kubeadm + haproxy + keepalived 三节点高可用控制平面

kubeadm + haproxy + keepalived 三节点高可用控制平面

操作环境:master01(.11)/master02(.12)/master03(.13),VIP 192.168.1.100;三台 master 均装 haproxy + keepalived。

对接原理:keepalived 通过 VRRP 在 master 间漂移 VIP;haproxy 监听 VIP:6444,TCP 转发到三个本机 kube-apiserver:6443;kubeadm 的 controlPlaneEndpoint 指向 VIP:6444,所有 kubelet 与组件经此接入,任一 master 宕机不影响集群入口。

详细步骤

bash

复制代码
1# 1. 三台 master 安装组件
2dnf install -y haproxy keepalived
3
4# 2. haproxy 配置(三台相同)/etc/haproxy/haproxy.cfg 追加:
5cat >> /etc/haproxy/haproxy.cfg <<'EOF'
6frontend k8s_frontend
7  bind *:6444
8  mode tcp
9  default_backend k8s_backend
10backend k8s_backend
11  mode tcp
12  balance roundrobin
13  server master01 192.168.1.11:6443 check inter 3s fall 3 rise 2
14  server master02 192.168.1.12:6443 check inter 3s fall 3 rise 2
15  server master03 192.168.1.13:6443 check inter 3s fall 3 rise 2
16EOF
17
18# 3. keepalived 配置 /etc/keepalived/keepalived.conf(master01 为例,
19#    master02 priority 90、master03 priority 80,state 均为 BACKUP)
20cat > /etc/keepalived/keepalived.conf <<'EOF'
21vrrp_instance VI_K8S {
22  state BACKUP
23  interface eth0
24  virtual_router_id 51
25  priority 100
26  advert_int 1
27  virtual_ipaddress {
28    192.168.1.100/24
29  }
30}
31EOF
32
33systemctl enable --now haproxy keepalived
34ip addr show eth0 | grep 192.168.1.100     # VIP 应漂在 master01

yaml

复制代码
1# 4. kubeadm-config.yaml(关键差异:controlPlaneEndpoint)
2apiVersion: kubeadm.k8s.io/v1beta3
3kind: ClusterConfiguration
4kubernetesVersion: v1.28.15
5imageRepository: registry.aliyuncs.com/google_containers
6controlPlaneEndpoint: "192.168.1.100:6444"
7networking:
8  podSubnet: 10.244.0.0/16
9  serviceSubnet: 10.96.0.0/12

bash

复制代码
1# 5. master01 初始化并导出证书密钥
2kubeadm init --config=kubeadm-config.yaml --upload-certs
3# 记录 join 命令与 --certificate-key 输出
4
5# 6. master02/03 以控制平面身份加入
6kubeadm join 192.168.1.100:6444 --token xxx \
7  --discovery-token-ca-cert-hash sha256:xxx \
8  --control-plane --certificate-key xxx
9
10# 7. 部署 CNI(如 Calico/Flannel)后 worker 按普通方式 join

验证流程

bash

复制代码
1kubectl get nodes                       # 三 master + worker 全 Ready
2kubectl -n kube-system get pods -o wide # 三套 apiserver/etcd 分布在三节点
3# VIP 漂移演练:停掉 master01 的 keepalived,VIP 应在秒级切到 master02,
4# kubectl 仍可用(因经 VIP 访问)

排错 :VIP 不漂移 → 检查 virtual_router_id 是否冲突、防火墙是否放行 VRRP(协议号 112);join 控制平面失败 → 确认 6444 经 haproxy 可达:curl -k https://192.168.1.100:6444/version

相关推荐
智塑未来1 小时前
北京服务器托管选型:从机房位置到服务边界
运维·服务器
有脚就行2 小时前
第33篇-KServe推理平台-标准化的K8s推理服务管理
人工智能·云原生·容器·kubernetes
前端 贾公子2 小时前
第08章:中间件(5)
服务器·前端·javascript
名字还没想好☜2 小时前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset
-今昭-2 小时前
MooseFS分布式文件系统
linux·服务器·网络
byte轻骑兵3 小时前
【BlueZ 】蓝牙 HCI 协议基础:与 BlueZ 源码的层面对应关系
linux·hci·电脑蓝牙·嵌入式蓝牙·buez
万联WANFLOW3 小时前
Meta开源了能本地跑的agent
运维·服务器·网络·人工智能·业界资讯
智恒百亿3 小时前
从政策到实践:RTX 5090 八卡服务器跑通 70B 大模型推理全流程技术解析
运维·服务器
Brilliantwxx3 小时前
【Linux】 进程(1) 从冯诺依曼体系到进程核心概念
linux·运维·服务器
lengjingzju3 小时前
编译与调试完全指南—第12章 日志分析
linux