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。

相关推荐
木子欢儿19 分钟前
国内 macOS/Linux 安装 rust
linux·运维·服务器·macos·rust
say_fall29 分钟前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
迪菲赫尔曼31 分钟前
【基础篇 26】第一次在服务器完成训练:准备数据、断线继续、检查成果与备份
运维·服务器·人工智能·机器学习·计算机视觉
进击的荆棘36 分钟前
Linux系统——线程同步与互斥
linux·运维·服务器·策略模式·同步·互斥·posix
橙橙笔记1 小时前
QT的学习第四部分
linux·qt·学习·音视频
.道阻且长.1 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
叼烟扛炮1 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之av_guess_format调用流程与实战(三十六)
linux·运维·服务器·ffmpeg·ffmpeg音视频进阶
进击的荆棘2 小时前
Linux系统——线程概念与控制之线程封装
linux·运维·服务器·线程
叼烟扛炮2 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt