树莓派3B+部署K8s主节点后,如何搭建高可用(HA)主节点集群?
没问题,我来一步步帮你搞定树莓派3B+上K8s主节点的高可用部署——毕竟你现在已经有了单主集群,要转HA核心就是让新主节点共享集群状态,还要解决统一入口的问题,咱们一步步来:
前置准备工作
- 确保你的第二个Raspberry Pi 3B+满足K8s最低要求:至少2核CPU(刚好它达标)、2GB内存,Docker/containerd已安装配置完成,和现有主节点网络互通,主机名不重复,节点时间同步(推荐用chrony,避免证书校验出问题)。
- 把现有主节点上的kubeadm、kubelet、kubectl版本完全同步到新节点上,版本不匹配绝对会出兼容性故障。
第一步:备份现有主节点的集群核心数据
在已初始化的主节点上,先导出集群的证书和配置文件,这些是新主节点加入HA集群的关键凭据:
- 先创建备份目录:
mkdir -p ~/k8s-ha-backup - 复制kubeadm的集群配置:
cp /etc/kubernetes/kubeadm-config.yaml ~/k8s-ha-backup/ - 复制集群证书目录(需要root权限):
sudo cp -r /etc/kubernetes/pki ~/k8s-ha-backup/ - 重要:删掉备份pki目录里的
apiserver.key和apiserver-etcd-client.key——这两个是当前主节点的私有密钥,新主节点需要生成自己的:sudo rm ~/k8s-ha-backup/pki/apiserver.key ~/k8s-ha-backup/pki/apiserver-etcd-client.key - 把备份文件传到新主节点,比如用scp:
scp -r ~/k8s-ha-backup pi@<新主节点IP>:~/
第二步:在新主节点上执行加入主节点集群的操作
登录新主节点,先把备份的文件放到对应系统目录:
- 创建证书存放目录:
sudo mkdir -p /etc/kubernetes/pki - 复制备份的证书文件:
sudo cp -r ~/k8s-ha-backup/pki/* /etc/kubernetes/pki/ - 复制kubeadm配置文件:
sudo cp ~/k8s-ha-backup/kubeadm-config.yaml /etc/kubernetes/
然后用kubeadm执行加入命令,注意要加上--control-plane参数(表示加入的是主节点角色),同时带上你之前看到的集群token和哈希值——如果token过期了,回到原有主节点执行kubeadm token create --print-join-command,会生成最新的加入命令,直接拿来用就行:
sudo kubeadm join <现有主节点IP>:6443 --token <你的集群token> \ --discovery-token-ca-cert-hash sha256:<你的哈希值> \ --control-plane
第三步:验证新主节点是否成功加入
回到原有主节点,执行kubectl get nodes,如果看到新节点状态是Ready,角色标记为control-plane,master,就说明加入成功了。
第四步:配置负载均衡(HA的核心环节)
现在你有两个主节点了,但后续工作节点加入、kubectl操作不能只连其中一个,得有个统一的虚拟入口。针对树莓派集群,推荐用keepalived做虚拟IP(VIP)+ haproxy做负载均衡:
- 在两个主节点上都安装工具:
sudo apt install keepalived haproxy -y - 配置haproxy:编辑
/etc/haproxy/haproxy.cfg,添加以下内容(替换成你的两个主节点IP和计划用的VIP):
frontend kubernetes bind <你的VIP>:6443 mode tcp option tcplog default_backend kubernetes-master-nodes backend kubernetes-master-nodes mode tcp option tcp-check balance roundrobin server master1 <主节点1IP>:6443 check fall 3 rise 2 server master2 <主节点2IP>:6443 check fall 3 rise 2
- 配置keepalived:
- 主节点1的配置(编辑
/etc/keepalived/keepalived.conf,设置为MASTER,优先级更高):vrrp_instance VI_1 { state MASTER interface eth0 # 换成你的网卡名,树莓派可能是wlan0或eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { <你的VIP>/24 # 比如192.168.1.100/24 } } - 主节点2的配置(设置为BACKUP,优先级稍低):
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { <你的VIP>/24 } }
- 主节点1的配置(编辑
- 重启两个节点的服务并设置开机自启:
sudo systemctl restart haproxy keepalived sudo systemctl enable haproxy keepalived - 最后更新所有节点的kubeconfig:编辑
~/.kube/config,把server: https://<原有主节点IP>:6443改成server: https://<你的VIP>:6443,这样后续所有kubectl操作都会通过负载均衡访问主节点集群。
最终验证HA效果
可以试着把其中一个主节点关机,然后在另一个节点上执行kubectl get pods -A,检查所有集群组件状态是否正常,确保单主节点故障时集群仍能正常运行。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

