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。

相关推荐
网硕互联的小客服5 小时前
Linux服务器磁盘应该如何合理分区?
linux·运维·服务器
lisanmengmeng5 小时前
nacos nrpe 监控机及被监控机部署
服务器·nacos·nagios·nrpe
贵沫末6 小时前
Ubuntu——常用软件安装
linux·运维·ubuntu
Doraemomo7 小时前
Linux内核驱动开发——中断与定时器
linux·运维·驱动开发
2301_808414387 小时前
Linux中动静态库的理解
linux·运维·服务器
誰能久伴不乏7 小时前
保姆级 Docker 入门教程
docker·容器·eureka
M78佐菲8 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲8 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
半仙白桑8 小时前
内核篇第十五讲:system-V共享内存
linux·共享内存·shmget·shmat·shmdt·shmctl
一条破秋裤8 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维