故障问题
执行kubectl get nodes
命令出现如下错误信息:
the connection to server 192.168.58.100:6443 was refused
问题分析
步骤一
在k8s
集群中6443是apiserver
的端口,通过docker ps -a
查看到apiserver
处于Exited
状态;
步骤二
docker logs -f apiserver的CONTAINER ID
查看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
服务。etcd
容器的数据在/var/lib/etcd/member
目录下;
#不知道路径可以查找etcd数据目录
find / -type d -name member
cd /var/lib/etcd/member
#删除或者移走备份都可以
rm -rf *
步骤五
然后先启动etcd
服务,然后启动api-server
,最后执行kubectl get nodes
后可以正常显示节点状态,该问题成功解决。
注:k8s
集群遇到这种问题,etcd
和apiserver
会一直重启,因此不需要手动启动etcd
和apiserver
,等待它自动重启成功即可。