K8s 高可用集群部署(kubeadm + HAProxy + Keepalived 堆叠 etcd)
一、背景
大模型训练与推理平台对集群可用性要求极高:控制面一旦单点故障,所有推理/训练任务都会受影响。生产环境必须部署高可用(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
| 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
| 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 kubectl get pods -n kube-system kubectl get endpoints kube-applications
|
五、常见问题
- 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 配置一致