问题描述:服务器非正常关机(意外掉电、强制拔电)后 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: multiple references
page 1138: multiple references
page 1088: multiple references
page 630: unreachable unfreed
page 999: unreachable unfreed
page 1021: unreachable unfreed
page 1029: unreachable unfreed
page 1098: unreachable unfreed
10 errors found
invalid value
修复方法:
通过如下方式可以把损坏的 etcd 节点(例子中node-1上的 etcd1 :2380)先移除再重新加入集群:
1、在故障节点停止 etcd服务并删除损坏的 etcd 数据
[root@node-1 ~] systemctl stop etcd; mv /var/lib/etcd/member/* ~/etcd-backup
2、在其它节点找到故障etcd 的 member id 并从 从集群中移除
[root@node-2 ~]# etcdctl member list
39872ad0e5987746, started, etcd3, :2380, :2379
72af99a4c899158b, unstarted, etcd1, :2380, :2379
cd39f3691f506c2b, started, etcd2, :2380, :2379
[root@node-2 ~]# etcdctl member remove 72af99a4c899158b
3、重新把 etcd1添加回集群
[root@node-2 ~]# etcdctl member add etcd1 --peer-urls=:2380
Member a431fc3546d257c4 added to cluster 9a63314b15ba7312
ETCD_NAME="etcd1"
ETCD_INITIAL_CLUSTER="etcd3=:2380,etcd1=:2380,etcd2=:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
4、在故障节点重启 etcd 服务
[root@node-1 ~] systemctl start etcd
5、查看确认etcd 和 Kubernetes集群恢复正常
1)etcdctl member list确认etcd集群恢复正常
2)kubectl get pod --namespace kube-system|grep apiserver|grep node-1确认 apiserver 恢复正常
3)kubectl get node| grep node-1确认节点处于 Ready 状态
注意事项:如果在3个控制节点的集群,出现2个节点 etcd 数据损坏,可能造成整个集群无法恢复的风险。请确保不对服务器进行非正常关机操作。
本文发布于:2024-01-31 07:31:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170665746626689.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |