利用 3个树莓派搭建一个k3s 集群,并且在 Mac 上用 k3sup管理

背景

手里有多个树莓派 4B(超过 3 个),并且暂时没有做硬件的计划,仅仅想拿树莓派当作服务器使用,不想单个去操作,想通过批量的方式管理,同时也要与时俱进,可以学习到 K8S 的相关知识。

经过评估,选择了 k3s, 控制端我打算用 Mac 电脑(其它的也行),其中一台树莓派当作 Server 节点,另外两台当作 Agent 节点。

 如果你遇到了其它树莓派的相关问题,可以查看以前的树莓派相关博客。

k3s 简介(来自 ChatGPT)

k3s 是一个轻量级的 Kubernetes 发行版,特别适合于资源有限的环境(如 IoT 设备、边缘计算、开发和测试环境等)。k3s 旨在提供一个简单易用、高效稳定的 Kubernetes 发行版,同时具有减少 Kubernetes 组件的复杂性和降低资源需求的优点。

k3s 支持常见的 Kubernetes 功能,包括服务发现、负载均衡、存储、网络、认证和授权等。它使用 SQLite 作为默认的后端存储,可以轻松部署在 Linux、macOS 和 Windows 等不同的操作系统上。

k3s 是由 Rancher Labs 公司开发和维护,遵循 Apache 2.0 许可证。Rancher Labs 公司是一家专注于 Kubernetes 和云原生技术的领先公司,其产品和服务为企业提供了更简单、更安全以及更强大的 Kubernetes 解决方案。

总的来说,k3s 是一款适用于资源有限环境的轻量级 Kubernetes 发行版,具有易用高效、简单稳定、低资源占用等优点。

安装 k3s

1. 在 Mac 上安装k3sup工具

k3sup 是一个轻量级的工具,用于在远程服务器上部署 k3sup s 集群, 用 Homebrew 安装

brew install k3sup

安装完成之后,可以通过k3sup version查看版本号
image.png

2. 在树莓派上安装 k3s 集群

假设树莓派的IP地址分别为:192.168.1.10,192.168.1.11,192.168.1.12,其中192.168.1.10当作 Server,其它两台当作 agent 节点
安装 Server 节点:

k3sup install --ip 192.168.1.10 --user pi --k3s-channel stable

添加 agent 节点

k3sup join --ip 192.168.1.11 --server-ip 192.168.1.10 --user pi --k3s-channel stable

k3sup join --ip 192.168.1.12 --server-ip 192.168.1.10 --user pi --k3s-channel stable

在执行上面命令的时候,报错了
(1)需要用 publickey 证书登录
image.png
将 Mac 电脑中的~/.ssh/id_rsa.pub文件内容添加到树莓派的/home/pi/.ssh/authorized_keys 文件中,这样登录树莓派就不需要输入密码了。

(2) 错误Failed to find memory cgroup, you may need to add "cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory" to your linux cmdline (/boot/cmdline.txt on a Raspberry Pi
详细错误如下

......
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  Failed to find memory cgroup, you may need to add "cgroup_memory=1 cgroup_enable=memory" to your linux cmdline (/boot/cmdline.txt on a Raspberry Pi)
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s
Job for k3s.service failed because the control process exited with error code.
See "systemctl status k3s.service" and "journalctl -xe" for details.
Error: error received processing command: Process exited with status 1

这个错误需要在树莓派的 SD 卡上,修改一下/boot/cmdline.txt文件。
首先关闭树莓派,将 SD 卡取出,然后用读卡器插入电脑,在终端用sudo vim /Volumes/bootfs/cmdline.txt命令打开 cmdline.txt 文件,并在末尾添加以下选项:

cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

然后重新将 SD 卡插入树莓派启动。
这时候再用前面的命令给树莓派添加k3s即可

3. 判断是否安装成功

(1)在 Mac控制端
安装成功之后,有如下提示,可以在终端输入。

# Test your cluster with:
export KUBECONFIG=/Users/gtts/macpro/kubeconfig
kubectl config use-context default
kubectl get node -o wide
 目前只添加了 2 个节点

用如下命令查看:

 kubectl get nodes 

image.png

kubectl get node -o wide

image.png

(2)在树莓派上
用以下命令检查 k3s 服务状态

systemctl status k3s

image.png

4. 如何卸载 k3s

如果你想卸载或者想重新安装k3s, 在/usr/local/bin/目录下,可以看到下面的脚本,有卸载相关的。
image.png

可以用以下命令:

sudo /usr/local/bin/k3s-uninstall.sh

卸载 k3s 后,您可以重新安装 k3s,并确保您选择了正确的 k3s 版本。

查看日志

如果你遇到了错误或者问题,可以在树莓派上查看日志,以便于定位问题。
• 服务器日志

sudo journalctl -u k3s

• 节点日志

sudo journalctl -u k3s-agent

部署一个 nginx,测试一下

1. 创建一个 Kubernetes 的配置文件

在您的 Mac 上,创建一个 nginx.yaml 文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: NodePort

此配置文件描述了一个名为 nginx-deployment 的 Deployment 对象和一个名为 nginx-service 的 Service 对象。Deployment 对象指定了应该在容器中部署的镜像和容器端口号,Service 对象将流量从集群中的 NodePort (Node 节点上的端口) 路由到该部署中的容器。

2. 部署应用

然后在 mac 下,用命令kubectl apply -f nginx.yaml
此命令将通过 nginx.yaml 文件中定义的规则在 K8S 集群中创建 Deployment 和 Service 对象,其中部署了名为 nginx-deployment 的 Docker 镜像,并创建了名为 nginx-service 的 Service。通过 Service,您现在可以通过树莓派节点的 IP 地址和 Service 暴露的 NodePort 访问 Nginx。

kubectl get pods命令,可以看到状态是
Running
image.png

用命令kubectl get svc -A,显示k3s 集群中所有服务的名称、类型、IP 地址和端口等。
image.png

从上面的图片可以看出,暴露的端口号是31567, 此时可以用 http://<node_ip>:31567 访问了,其中 是树莓派节点的 IP 地址

3. 如何查看错误

如果启动的时候报错了,可以通过这个kubectl describe pod nginx-deployment-7f456874f4-dgvbl命令查看

最后

到这里 k3s 搭建完了,并且可以跑一个 nginx 镜像,中间还有很多问题,可以在后面的博客中再写,到这儿仅仅只是个开始,后面尽情玩耍,相信可以增长很多有用的技能。


已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注