K8s多控制平面HA集群故障恢复咨询:双节点宕机后重启能否恢复可用?
3节点K8s控制平面HA集群故障恢复方案
3节点控制平面HA集群的核心依赖是etcd的法定人数(quorum)——3节点集群需要至少2个节点在线才能正常提供服务。当第二个节点宕机后,仅剩1个节点无法达成quorum,集群会进入只读或完全不可用状态;重启宕机节点后无法恢复,通常是因为etcd数据不一致、网络连通性问题或节点配置损坏,以下是可行的恢复步骤:
一、先确认存活节点的etcd状态
登录仅剩的存活控制平面节点,执行命令查看etcd成员状态:
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 member list
从输出里标记出两个宕机节点的ID,以及存活节点的状态。
二、尝试重启宕机节点并排查基础问题
- 启动宕机节点的etcd服务:
systemctl start etcd - 实时查看etcd日志,排查是否有网络连接失败、证书错误或数据损坏的报错:
journalctl -u etcd -f - 先修复节点间的网络连通性:确保所有节点的2379(客户端端口)、2380(peer端口)能互相访问,浮动IP也能正常切换到存活节点。
三、手动重建etcd集群(自动恢复失败时)
如果宕机节点的etcd数据已损坏,无法自动同步,需要将其作为新成员重新加入集群:
- 在存活节点上移除故障的etcd成员:
对两个宕机节点分别执行此操作。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 member remove <故障节点ID> - 在每个宕机节点上清空旧的etcd数据:
rm -rf /var/lib/etcd/* - 在存活节点上生成新成员的加入命令:
复制输出中的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 member add <节点名称> --peer-urls=https://<节点IP>:2380ETCD_INITIAL_CLUSTER等环境变量。 - 在宕机节点的etcd配置文件(通常是
/etc/kubernetes/manifests/etcd.yaml或systemd服务文件)中更新这些环境变量,然后重启etcd服务:systemctl restart etcd
四、恢复控制平面组件
当etcd集群重新达成quorum(至少2个节点在线)后,检查kube-apiserver等组件状态:
kubectl get componentstatuses
如果组件未正常启动,逐个重启:
systemctl restart kube-apiserver kube-controller-manager kube-scheduler
五、验证集群可用性
执行基础操作确认集群恢复:
kubectl get nodes kubectl create namespace test-recovery kubectl delete namespace test-recovery
如果这些命令能正常执行,说明集群已恢复可用。
内容的提问来源于stack exchange,提问作者Vasiliy M
相关产品推荐
相关产品推荐

