概述

之前 在树莓派集群上部署了 k8s,发现运行 control-panel 的节点在没有任何任务的情况下,负载也经常到 9-13,已经无法正常 SSH 登录,所以决定使用 k3s 来部署 kubernetes 集群。

k3s 是轻量级的 Kubernetes,当前版本:v1.26.5+k3s1 (7cefebea)

系统架构

整体架构使用 带有嵌入式数据库的单服务器 形式。

带有嵌入式数据库的单服务器

部署准备

网络拓扑

使用 家中闲置树莓派 4B 和零刻 EQ12 来搭建整个集群。

hostnamerole
EQ12server
rb1agent
rb2agent
rb3agent

软件支持

vxlan

k3s 默认使用 Flannel VXLAN 管理集群网络,从 Ubuntu 21.10 开始,对 Raspberry Pi 的 vxlan 支持已移至单独的内核模块中。

sudo apt update && 
sudo apt upgrade -y &&
sudo apt install -y linux-modules-extra-raspi

部署

安装 server

参考 快速入门指南 进行部署。

使用 配置文件 控制安装:

  • 任何账户执行官方脚本安装的 kubectl 默认的 kubeconfig 都是 /etc/rancher/k3s/k3s.yaml,而不是 ~/.kube/config,所以这里最好设置 write-kubeconfig-mode: 644
  • 由于 traefik 在处理 HTTPS backend service 方面不方便,使用 nginx-ingress 替代。
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

通过 /usr/local/bin/k3s-uninstall.sh 来执行卸载。

设置 kubeconfig

为当前用户设置 kubeconfig,这个配置虽然不会被 k3s 安装的 kubectl 用到,但是下面的 helm 会用到。

mkdir -p $HOME/.kube
sudo cp -i /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装 helm

使用 helm 管理 kubernetes 应用

部署 ingress-nginx

设置代理

nginx-ingress 启动的 pods 需要从国内无法访问的 registry.k8s.io 拉取镜像,给 containerd 临时配置 配置 HTTP 代理 可以解决该问题。

# cat /etc/systemd/system/k3s.service.env
CONTAINERD_HTTP_PROXY=http://clash:7890
CONTAINERD_HTTPS_PROXY=http://clash:7890
CONTAINERD_NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

重新启动 k3s 服务:

sudo systemctl restart k3s

安装 ingress-nginx

按照 官方文档 安装,这里我们选择使用 helm 安装。

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

确认部署结果:

删除代理

如果之前给 containerd 安装了代理,最好删掉,避免影响服务。

sudo rm /etc/systemd/system/k3s.service.env
sudo systemctl restart k3s

注意事项

运行状态

确认 k3s 服务运行状态 systemctl status k3s

查看 k3s 服务启动日志 journalctl -u k3s,下面的日志中列出了一些需要关注的信息,比如:

  • apiserver/scheduler/controller-manager 启动选项 (L11-L17)
  • server node token 的位置 (L19)
  • server node 与 agent node 加入的方法 (L20-L22)
  • kubeconfig 位置 (L23)
  • PodCIDRs 范围 (L48)

部署 agent

按照 快速入门指南 进行部署。

安装依赖

sudo apt install -y linux-modules-extra-raspi

查找 agent-token:

sudo cat  /var/lib/rancher/k3s/server/agent-token

加入集群


curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.122.11:6443 K3S_TOKEN=xxxxxx sh -

Next