文章目录[隐藏]
背景
手里有多个树莓派 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
查看版本号
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
证书登录
将 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
kubectl get node -o wide
(2)在树莓派上
用以下命令检查 k3s 服务状态
systemctl status k3s
4. 如何卸载 k3s
如果你想卸载或者想重新安装k3s, 在/usr/local/bin/
目录下,可以看到下面的脚本,有卸载相关的。
可以用以下命令:
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
用命令kubectl get svc -A
,显示k3s 集群中所有服务的名称、类型、IP 地址和端口等。
从上面的图片可以看出,暴露的端口号是31567
, 此时可以用 http://<node_ip>:31567
访问了,其中 是树莓派节点的 IP 地址
3. 如何查看错误
如果启动的时候报错了,可以通过这个kubectl describe pod nginx-deployment-7f456874f4-dgvbl
命令查看
最后
到这里 k3s 搭建完了,并且可以跑一个 nginx 镜像,中间还有很多问题,可以在后面的博客中再写,到这儿仅仅只是个开始,后面尽情玩耍,相信可以增长很多有用的技能。
发表回复