k8s-etcd-quorum

Kubernetes etcd 失去多数派的定位与恢复

现象

apiserver 大量超时,etcdserver: no leader、request timed out,kubectl 无法连接。etcd 集群可能只剩少数成员在线。

快速定位

etcdctl --endpoints=https://127.0.0.1:2379 endpoint health
etcdctl --endpoints=https://127.0.0.1:2379 endpoint status -w table
etcdctl --endpoints=https://127.0.0.1:2379 member list -w table
journalctl -u etcd --since '30 min ago' | tail -100
df -h
iostat -x 1 5

常见根因

  1. 多数 etcd 成员宕机或网络隔离。
  2. 磁盘 fsync 慢导致成员失联/选举失败。
  3. 网络分区、时钟偏差或证书问题。
  4. 成员被误删/数据目录损坏。
  5. 快照恢复后集群配置不一致。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. etcd 失去多数派时,先用哪些命令确认集群状态?
  2. 排查时为什么要同时检查磁盘和 fsync?
  3. 恢复多数派后如何进一步修复与验证?
答案
  1. 用 etcdctl endpoint health、endpoint status 和 member list 查看成员、leader 与健康状态,并看 journalctl -u etcd 日志。
  2. 磁盘 fsync 慢会导致成员失联或选举失败,因此要查 df -h、iostat 和 etcd 日志。
  3. 先恢复多数成员的进程、磁盘、网络和证书,必要时用快照恢复到新数据目录/新集群,再检查 apiserver 和 controller 状态。