一次Kubernetes集群故障处理案例:etcd无法选出Leader导致Kubernetes API-Server启动失败
1. 概述
这是一个不慎的操作导致的Kubenernets控制平面故障,正常情况下不应该存在偶数控制节点。出现这个情况的原因是,需要我需要更新Node1
节点服务器版本,服务器有启动失败的的情况,为了稳妥起见另外启动一个控制节点(即Node2
)。更新前已经备份好Etcd数据,崩溃数据恢复已经做好了准备(我以为的…)。
1.1、集群信息
Name | IP | Role |
---|---|---|
Node1 | 172.17.1.120 | 控制节点1 |
Node2 | 172.17.1.121 | 控制节点2 |
k8s-2 | 172.17.1.131 | 工作节点1 |
k8s-3 | 172.17.1.132 | 工作节点2 |
1.2、故障现象
我按照正常卸载控制平面节点的操作步骤,一切顺利,当时并没有什么异常。
1 | root@node1:~# kubectl drain node node2 --ignore-daemonsets --delete-emptydir-data |
故障出现原因:双控制平面Kubernetes(这个状态本身就异常,但不在本次讨论范围内)删除Node2
控制节点后,另外一个控制平面无法正常工作。具体表现为ETCD启动失败,导致Kubernetes api-server
启动失败。
1 | Jul 22 23:17:05 node1 kubelet[3301]: E0722 23:17:05.135471 3301 controller.go:145] "Failed to ensure lease exists, will retry" err="Get \"https://172.17.1.120:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/node1?timeout=10s\": dial tcp 172.17.1.120:6443: connect: connection refused" interval="7s" |