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。

相关推荐
syagain_zsx3 小时前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
GeW15 小时前
新质生产力路线图Linux、数据库、国产化替代一次讲透
linux
aningx17 小时前
cachyos 从 GRUB 切换到 rEFInd
linux
第404号工位19 小时前
40块钱二手瘦客户端,如何跑满家庭物联网中枢?(拒绝Docker爆盘实录)
linux·架构·node.js
对象存储与RustFS19 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
骑着蜗牛撵大象32720 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
..Dauntless..21 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
裕晟资质规划21 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
QMCY_jason21 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器
重生之小比特21 小时前
【Linux系统】12 进程程序替换 自定义Shell 命令行解释器
linux·运维·服务器