本文约 2000 字,阅读约需 10 分钟。 上一篇,我直接关掉了一台 Master,集群用 3 秒就完成了故障转移,kubectl 纹丝不动。 有的人可能存在疑虑: “你前面不是还有台负载均衡器吗?那台机器挂了呢?” 没错,这才是高可用链路里 最容易被忽略、却最致命的一环。 接下来,直接把 Keepalived 和 HAProxy 所在的 LB 节点整机宕机,看看这套架构还撑不撑得住。
不少人搭高可用时会不自觉地陷入一个思维盲区:
如果这台 LB 挂了,VIP 漂不走、HAProxy 起不来,那你精心设计的 3 Master 就瞬间变成了 “看得见却摸不着”的集群。
所以这次故障演练的核心目标非常明确:
动手之前,把集群的每一个关键状态都“拍照存档”,建立一条硬邦邦的基线。
kubectl get nodes -o wide
必须看到 3 Master + 3 Worker 全部 Ready,版本一致,并且 master01已经在上一篇演练后恢复上线,整个集群回到完美状态。

kubectl get pods -A
kube-system下的 DNS、proxy、CNI,以及监控命名空间下的 Prometheus、Grafana,必须全部 Running。

在当前的 LB01 上执行:
ip addr show
我需要确认 VIP 192.168.114.134此刻正挂在 LB01 的网卡上,这是 Keepalived 主节点的标志。

在管理终端运行:
watch -n 1 kubectl get nodes
这个窗口会像心电图一样,实时告诉我集群的“脉搏”。一旦负载层崩溃,这里将最先出现变化。

我没有选择温和的 systemctl stop keepalived,而是模拟生产环境中最常见的灾难——整机宕机。
在 vCenter内,我直接关闭虚拟机电源:

这一下,VIP、HAProxy、Keepalived 进程,连同整个操作系统,全部瞬间消失。
如果读者想额外验证单服务故障,也可以
systemctl stop haproxy作为附加场景,但本篇以整机宕机为主。
关机后,立刻切换到监控窗口和备用 LB02。
在 LB02 上执行:
ip addr show
几乎在 1~3 秒内,VIP 192.168.114.134已经自动出现在 LB02 的网卡上。Keepalived 通过 VRRP 协议检测到主节点失联,立即将 VIP 接管了过来。

那扇 watch kubectl get nodes的窗口,在 LB01 关机后的 2~3 秒内,刷新出现了一次 短暂的卡顿或连接超时,随后立刻恢复,继续显示所有节点状态。因为 Master 并没有挂,只有 master01等仍在正常服务。
我手动执行一次:
kubectl get nodes
返回完全正常,kubectl丝毫未受影响。

kubectl get pods -A -o wide
所有业务 Pod 依旧 Running,没有任何重启。Worker 节点上的容器完全不依赖 LB,它们直接与本地 kubelet 通信,不受 VIP 漂移影响。

更直观地,我打开浏览器直接访问:


全部秒开,操作丝滑,仿佛什么都没发生过。
登录到任意一台存活的 Master(如 Master02),通过 kubectl exec 进入 etcd 容器检查集群健康:
kubectl -n kube-system exec -it etcd-master02 -- etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint health --cluster
输出显示,3 个 etcd 成员中,master01健康,master02和 master03也健康(如果 master01 之前已恢复),集群处于 healthy状态。哪怕 LB 全挂,etcd 的 Raft 多数派依然独立运行在 Master 节点上,不受负载层影响。

这次演练证明,即使负载均衡器整机宕机,Kuberentes 集群依然存活。背后的原理其实很清晰:
notify脚本也能自动拉起 HAProxy。所以,这次故障验证的不是“负载层多坚强”,而是“负载层是否也做了高可用”。如果我只用了一台 LB,那它就是整个系统的阿喀琉斯之踵。
通过这两次演练,我总结出一张 Kubernetes 控制平面的“高可用三层模型”:

缺了任何一层,你的“高可用”都只是半成品。
接入层和控制层都验证过了,接下来进入 最内核、也最容易翻车的部分了:
etcd 真正发生多数派失效时,Kubernetes 会变成什么样?
我会故意挂掉两台 Master,破坏 etcd 的 Quorum,然后亲手尝试:
这将是整个 HA 系列里最硬核、最接近运维噩梦的一篇。如果你想知道极端故障下 Kubernetes 的真实底线。