问题描述:服务器非正常关机(意外掉电、强制拔电)后 etcd 数据损坏。通过下述现象3或者4能确定是出现了数据损坏问题;现象1和2是表象。
现象:1、因为当前kube-apiserver 是跟本地的 etcd 通信,etcd 数据损坏会导致 apiserver无法启动;
通过在正常节点执行kubectl get pod --namespace kube-system|grep apiserver|grep node-x可看到 x 节点的 apiserver 不是处于READY 1/1 + STATUS Running状态。
2、节点处于 NotReady 状态,因为 kubelet 是跟127.0.0.1的 apiserver 通信(在 master 节点是直接本地;在 node 节点是通过 Nginx 代理转发)。
通过在正常节点执行kubectl get node| grep node-x可看到 x 节点处于 NotReady 状态。如果故障超过10分钟,ECMS 会告警: 控制服务节点状态离线超时
3、etcd 服务无法启动,日志中有如下类似错误:
2018-11-07 09:07:03.391264 C | mvcc: cannot unmarshal event: proto: wrong wireType = 0 for field Key
4、对 etcd db 进行数据校验,发现数据被损坏:
[root@node-1 ~]# bolt check /var/lib/etcd/member/snap/db
page 1143: multiple references
page 1072: multiple references
page 1122: mult