树莓派 5 集群 配置 k3s
Table of Contents
K3s 是由 Rancher Labs 开发的轻量级 Kubernetes 发行版,专为资源受限的环境和边缘计算场景设计。
本文将介绍如何在 Raspberry Pi 5 集群上部署 K3s,搭建一个功能完整的容器编排平台。
#
Step 1. 在 Master 和 Agent 节点分别执行命令
这部分参考了1的 “Setting Up with k3s” 章节
##
Master 节点
在 pi-1
执行
1curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
2 INSTALL_K3S_MIRROR=cn \
3 sh -s - \
4 --system-default-registry=registry.cn-hangzhou.aliyuncs.com
##
Agent 节点
在 pi-2
, pi-3
, pi-4
执行
1curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
2 INSTALL_K3S_MIRROR=cn \
3 K3S_URL=https://100.84.216.88:6443 \
4 K3S_TOKEN=K10d0e1ccd102d3f60043941ab35d22f29ca15e0ecf48e138d502fd258ee232cb84::server:bc76905e2c32080b0c2a0501293876bd \
5 sh -s -
6
7# K3S_URL 和 K3S_TOKEN 请写你自己的
8# K3s agent 节点不需要配置 `system-default-registry`。
如何查看 K3S_TOKEN
cat /var/lib/rancher/k3s/server/node-token
#
Step 2. 验证安装效果
#
其他:K3s 在中国大陆地区的安装
##
方法一:全新安装
3 和 4 介绍了在安装时通过指定 INSTALL_K3S_MIRROR=cn
和 --system-default-registry
来更换 registry mirror。
1# 全新安装(master 节点)
2curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
3 INSTALL_K3S_MIRROR=cn sh -s - \
4 --system-default-registry=registry.cn-hangzhou.aliyuncs.com
##
方法二:换源
这个方法适用于在国外配置好环境之后,设备迁移到中国大陆地区的无法访问默认源的用户。
我执行完 Rancher 的快速入门指南里提供的命令,发现 pods 根本没启动的
# Rancher 快速入门指南提供的代码(正常安装 k3s 但是无法启动 pod)
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
在 /etc/systemd/system/k3s.service
里面指定 --system-default-registry
,然后 systemctl daemon-reload && systemctl restart k3s
重启服务即可
1[Unit]
2Description=Lightweight Kubernetes
3Documentation=https://k3s.io
4Wants=network-online.target
5After=network-online.target
6
7[Install]
8WantedBy=multi-user.target
9
10[Service]
11Type=notify
12EnvironmentFile=-/etc/default/%N
13EnvironmentFile=-/etc/sysconfig/%N
14EnvironmentFile=-/etc/systemd/system/k3s.service.env
15KillMode=process
16Delegate=yes
17# Having non-zero Limit*s causes performance problems due to accounting overhead
18# in the kernel. We recommend using cgroups to do container-local accounting.
19LimitNOFILE=1048576
20LimitNPROC=infinity
21LimitCORE=infinity
22TasksMax=infinity
23TimeoutStartSec=0
24Restart=always
25RestartSec=5s
26ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service 2>/dev/null'
27ExecStartPre=-/sbin/modprobe br_netfilter
28ExecStartPre=-/sbin/modprobe overlay
29ExecStart=/usr/local/bin/k3s \
30 server \
31 '--system-default-registry' \
32 'registry.cn-hangzhou.aliyuncs.com' \
systemctl daemon-reload
systemctl restart k3s
一些题外话
6 说通过 crictl info
找到 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
文件,然后修改这个文件中描述的 endpoint 地址
但是这个方案看起来特别奇怪。
7 里面提到
启动时,K3s 会检查
/etc/rancher/k3s/
中是否存在registries.yaml
文件,并指示 containerd 使用文件中定义的镜像仓库。如果你想使用一个私有的镜像仓库,那么你需要在每个使用镜像仓库的节点上以 root 身份创建这个文件。
但是通过 3 和 4 的方式安装之后,并没有出现 /etc/rancher/k3s/registries.yaml
。
那么它是怎么知道 registry 的 mirror 是谁呢?
##
安装后的验证
kubectl get pods -n kube-system