项目功能测试时发现k8s集群pod状态异常,node节点异常。
通过命令查看节点状态发现,有一台node状态为NotReady。
[root@loli-test1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.12.33.35 Ready <none> 237d v1.16.8-dirty
172.12.33.36 NotReady <none> 237d v1.16.8-dirty
172.12.33.37 Ready <none> 237d v1.16.8-dirty
172.12.33.38 Ready <none> 237d v1.16.8-dirty
在异常的节点中,执行查看nodes命令,发现除自己本身状态是ready外,其他节点均为NotReady
[root@loli-test2 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.12.33.35 NotReady <none> 237d v1.16.8-dirty
172.12.33.36 Ready <none> 237d v1.16.8-dirty
172.12.33.37 NotReady <none> 237d v1.16.8-dirty
172.12.33.38 NotReady <none> 237d v1.16.8-dirty
出现问题的节点为master节点,35、36均存在etcd服务。
解决办法
可以通过ps命令过滤etcd的数据目录,未必为默认的。
在异常的节点etcd的data-dir目录下,重命名或删除member目录
cd /var/lib/etcd
mv member{,.bak}
在移动目录后,重启kubelet服务即可
systemctl restart kubelet
本文仅针对kubeadm部署的k8s集群