You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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做负载均衡:

  1. 在两个主节点上都安装工具:sudo apt install keepalived haproxy -y
  2. 配置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
  1. 配置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
          }
      }
      
  2. 重启两个节点的服务并设置开机自启:
    sudo systemctl restart haproxy keepalived
    sudo systemctl enable haproxy keepalived
    
  3. 最后更新所有节点的kubeconfig:编辑~/.kube/config,把server: https://<原有主节点IP>:6443改成server: https://<你的VIP>:6443,这样后续所有kubectl操作都会通过负载均衡访问主节点集群。
最终验证HA效果

可以试着把其中一个主节点关机,然后在另一个节点上执行kubectl get pods -A,检查所有集群组件状态是否正常,确保单主节点故障时集群仍能正常运行。

内容的提问来源于stack exchange,提问作者joesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:51:58