Install and Configure k3s on Raspberry Pi
k3s 介绍
K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。K3s 有以下增强功能:
- 打包为单个二进制文件。
- 使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
- 封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。
- 默认情况下是安全的,对轻量级环境有合理的默认值。
- 添加了简单但功能强大的 batteries-included 功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller。
- 所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
- 最大程度减轻了外部依赖性,K3s 仅需要 kernel 和 cgroup 挂载。 K3s 软件包需要的依赖项包括:
- containerd
- Flannel
- CoreDNS
- CNI
- 主机实用程序(iptables、socat 等)
- Ingress controller(Traefik)
- 嵌入式服务负载均衡器(service load balancer)
- 嵌入式网络策略控制器(network policy controller)
——《K3s官方介绍》
架构介绍
K3s 在单主节点的情况下的架构如下图所示, Server 节点使用内置的 SQLite 数据库
其他节点作为 Agent 注册到 Server 节点, 本次将使用单 Server 的部署模式
同时 K3s 也支持多 Server 节点的高可用部署, 这种场景下会部署多个 Server 节点, 保证在单个 Server 故障也可以让集群正常工作, 同时与单节点 k3s 设置中使用的嵌入式 SQLite 数据存储相反, 高可用 K3s 需要挂载一个外部数据库作为数据存储的媒介
系统安装
树莓派上安装的操作系统为 Arch Linux ARM, 本次安装会使用 yay 进行安装
# 输入以下命令进行安装
yay -Syy && yay -S k3s
# 选择最新的k3s版本
Server 模式
安装完成后, systemctl 中注册的默认是 server 模式, 可以直接启动
systemctl start k3s
# 启动k3s
systemctl enable k3s
# 添加开机自启
修改 NodePort 范围
启动时添加 --service-node-port-range "1024-32767"
禁用 worker 角色
默认情况下, k3s 启动 master 节点也同时具有 worker 角色, 是可调度的, 因此可以在它们上启动工作
启动时添加 --node-taint k3s-controlplane=true:NoExecute
查看 node-token
server 启动后会生成 node-token
cat /var/lib/rancher/k3s/server/node-token
查看 kubelet config
将以下内容内容保存到 ~/.kubelet/config, 就可以在本地使用 kubelet 控制集群, 记得将其中的 127.0.0.1
替换为 Server 节点的地址
cat /etc/rancher/k3s/k3s.yaml
Agent 模式
将启动模式修改为 Agent
vim /lib/systemd/system/k3s.service
# 将启动命令由 `server` 改成 `agent`
systemctl daemon-load
# 重新载入服务配置
修改 /etc/systemd/system/k3s.service.env 文件, 填入 server 节点地址, 与 node-token
K3S_URL="https://{{.my-server-ip}}:6443"
K3S_TOKEN="{{.my-server-token}}"
# K3S_NODE_NAME=
# K3S_ARGS=
然后用 systemctl 启动服务即可
修改节点角色
K3s worker 节点默认为 none, 可以通过以下命令修改
kubectl lable node {{.your-node}} node-role.kubernetes.io/worker=worker