K8s 高可用集群部署(kubeadm + HAProxy + Keepalived 堆叠 etcd)
2026-08-11 09:57:40 # Kubernetes

一、背景

大模型训练与推理平台对集群可用性要求极高:控制面一旦单点故障,所有推理/训练任务都会受影响。生产环境必须部署高可用(HA)控制平面。本文以 kubeadm 为例,给出 3 控制节点 + 多工作节点的 HA 搭建。

二、环境信息

  • 操作系统:Ubuntu 22.04 LTS(kernel 5.15)
  • Kubernetes:v1.28.x
  • 容器运行时:containerd 1.7
  • 控制节点:master-1/2/3(建议奇数)
  • 负载均衡 VIP:192.168.0.100:6443(HAProxy + Keepalived)
  • 工作节点:gpu-node-1..n

三、操作要点

1. 所有节点通用前置

1
2
3
4
5
6
7
8
9
10
# 关闭 swap
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
# 加载内核模块
modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sysctl --system

2. 控制节点部署 HAProxy + Keepalived

1
2
3
4
5
6
7
8
9
# haproxy.cfg 关键段
frontend k8s-api
bind *:6443
default_backend k8s-api-back
backend k8s-api-back
balance roundrobin
server master-1 192.168.0.11:6443 check
server master-2 192.168.0.12:6443 check
server master-3 192.168.0.13:6443 check

Keepalived 管理 VIP(192.168.0.100),通过 VRRP 健康检测实现故障转移。

3. 初始化第一个控制节点

1
kubeadm init   --control-plane-endpoint "192.168.0.100:6443"   --upload-certs   --pod-network-cidr=10.244.0.0/16

4. 其余控制节点加入

1
kubeadm join 192.168.0.100:6443   --token <token> --discovery-token-ca-cert-hash sha256:<hash>   --control-plane --certificate-key <cert-key>

5. 工作节点加入

1
kubeadm join 192.168.0.100:6443 --token <token>   --discovery-token-ca-cert-hash sha256:<hash>

6. 安装 CNI(见下一篇)

四、验证方式

1
2
3
4
kubectl get nodes          # 所有节点 Ready
kubectl get pods -n kube-system # 核心组件 Running
kubectl get endpoints kube-applications # 控制面健康
# 模拟故障:停掉一个 master 的 kube-apiserver,VIP 仍可用

五、常见问题

  • join token 过期kubeadm token create --print-join-command
  • certificate-key 过期(24h)kubeadm init phase upload-certs --upload-certs
  • etcd 脑裂:确保奇数节点、网络分区恢复后核对 etcdctl endpoint status
  • HAProxy 后端不健康:检查 apiserver 监听与防火墙 6443
  • kubelet 启动失败:核对 cgroup driver(systemd)与 kubeadm 配置一致