跳至内容

Junyi's Lab

树莓派 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_URL100.84.216.88

因为我使用 tailscale 2 给树莓派集群构建了虚拟局域网。

请根据你的实际情况进行配置。

如何查看 K3S_TOKEN
cat /var/lib/rancher/k3s/server/node-token

# Step 2. 验证安装效果

agent 已加入 master


# 其他:K3s 在中国大陆地区的安装

## 方法一:全新安装

34 介绍了在安装时通过指定 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 根本没启动的

5

# Rancher 快速入门指南提供的代码(正常安装 k3s 但是无法启动 pod)
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
卡在 ContainerCreating 步骤
卡在 ContainerCreating 步骤(黄色高亮部分)

/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
k3s正在重启服务
k3s 正在重启服务,已经有一个服务就绪(黄色高亮)
Container 成功被创建
稍等一会,全部的 Container 成功被创建
一些题外话

6 说通过 crictl info 找到 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl 文件,然后修改这个文件中描述的 endpoint 地址

但是这个方案看起来特别奇怪。

7 里面提到

启动时,K3s 会检查/etc/rancher/k3s/中是否存在registries.yaml文件,并指示 containerd 使用文件中定义的镜像仓库。如果你想使用一个私有的镜像仓库,那么你需要在每个使用镜像仓库的节点上以 root 身份创建这个文件。

但是通过 34 的方式安装之后,并没有出现 /etc/rancher/k3s/registries.yaml

那么它是怎么知道 registry 的 mirror 是谁呢?

## 安装后的验证

kubectl get pods -n kube-system

alt text