问题一:etcd和apiserver无法正常启动
问题查看nodes节点发生报错
解决方法/步骤
步骤一:K8S集群节点异常重启后,再终端执行kubectl get nodes命令,出现报错dial tcp 10.200.18.100:6443: connect: connection refused。
步骤二:通过docker ps -a可以看到api现在处于exit退出状态。
步骤三:查看apiserver服务容器的启动日志, 发现又出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused,2379是etcd的端口,那么apiserver是由于etcd无法连接而启动不了。
步骤四:
接着查看etcd的启动日志,发现报错mvcc: cannot unmarshal event: proto: wrong wireType = 0 for field Key。经查询资料,此报错是由于服务器非正常关机(意外掉电,强制拔电)后 etcd数据损坏导致的,这个节点之前确实是出现异常关机,etcd无法启动,那么解决此问题就行了。
步骤五:
按照指导进行操作,在故障节点上停止etcd服务并删除损坏的 etcd 数据,现在etcd服务本来就没有启动,删除前先备份数据,最后启动etcd服务。
注:容器的数据在/var/lib目录下,按照下图操作。
root@k8s-master:/var/lib/etcd# find ./ -type d -name member
./member
root@k8s-master:/var/lib/etcd# cd ./member
root@k8s-master:/var/lib/etcd/member# ls
snap wal
root@k8s-master:/var/lib/etcd/member# mkdir ../bak
root@k8s-master:/var/lib/etcd/member# mv * ../bak/
root@k8s-master:/var/lib/etcd/member# ls
步骤六:最后先启动etcd服务,然后启动api-server,执行kubectl get nodes后可以正常显示节点状态,问题解决。
可以重启容器
root@k8s-master:/var/lib/etcd/member# docker start 37f1e8e68a81 重启 etcd
root@k8s-master:/var/lib/etcd/member# docker start c32fbf338038 重启 api
/etcd/member# docker start c32fbf338038 重启 api
![image-20220725175143197](https://img-blog.csdnimg.cn/img_convert/08c7edc74f3785d2957d7e6badb59244.png)