问题: 从下图可看出k8s集群节点node1不可用,其节点旗下statefulSet应用也出现Unknown,并且长时间也不会自动恢复、调度到其他节点上,describe barry-1出现Terminating<终止信号>却不作为。最后执行删除异常pod也无作为

[root@k8s-master ~]# kubectl get nodes
NAME                  STATUS   ROLES    AGE   VERSION
k8s-master            Ready    master   20d   v1.14.0
k8s-node1.novalocal   NotReady <none>   20d   v1.14.0
k8s-node2.novalocal   Ready    <none>   20d   v1.14.0
[root@k8s-master ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
barry-0                          1/1     Running   0         5d7h
barry-1                          1/1     Unknown   0         14d
barry-2                          1/1     Running   0         4d6h
[root@k8s-master ~]# kubectl delete pods barry-1
pod "barry-1" deleted
[root@k8s-master ~]# kubectl get pods #多次列举仍无反应
NAME                            READY   STATUS    RESTARTS   AGE
barry-0                          1/1     Running   0         5d7h
barry-1                          1/1     Unknown   0         14d
barry-2                          1/1     Running   0         4d6h

原因:
1.当节点正常通信时,节点会回报旗下pod状态,若pod状态错误,主节点将会标记它为删除,节点会执行终止运行该Pod.
2.为什么不会自动恢复并调度:从上面可知,barry-1所在的节点未NotReady,主节点与node1节点无法通信,node1节点的kubelet无法收到主节点的驱逐命令

如何正确处理故障的Pod
1.恢复节点,在故障的几分钟内,主节点仍会等待pod的恢复,若持久几分钟仍不见恢复,会被标记删除,当节点恢复时,会执行删除,删除完毕后,主节点会重新调度新pod替代
2.强制删除,前提要求是该故障节点不会再被主节点访问到(forever),否则不要强制删除有状态的pod

[root@k8s-master ~]# kubectl delete pods barry-1 --force --grace-period 0

再次列举pods

[root@k8s-master ~]# kubectl get po
NAME                            READY   STATUS    			RESTARTS   AGE
barry-0                          1/1     Running   			 0         5d7h
barry-1                          0/1     ContainerCreating   0         6s
barry-2                          1/1     Running   			 0         4d6h

查看barry-1已从Unknown变为ContainerCreating,状态恢复

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐