-
对服务进行重启后发现pod状态一直是Terminating
-
查看pod详情
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedKillPod 3m24s (x81 over 5h23m) kubelet error killing pod: [failed to "KillContainer" for "xxxxx-xxx" with KillContainerError: "rpc error: code = Unknown desc = operation timeout: context deadline exceeded", failed to "KillPodSandbox" for "688342f1-f270-493e-ae3b-59bf0272a1df" with KillPodSandboxError: "rpc error: code = DeadlineExceeded desc = context deadline exceeded"]
- 处理过程
网上查了资料,说是查看docker和kubelet状态之类,回到环境查看发现kubelet状态无法查看,不多docker服务显示运行正常的。有文档说是要重启容器,无奈根据报错pod未找到容器。
Unit kubelet.service could not be found.
最后受到floud文章启发,对故障pod进行强制删除。成功解决问题。
- 强制删除Terminating状态的pod
删除前先将deployment调度为0。
kubectl -n <ns> delete pod foo --grace-period=0 --force
- 问题分析
最近又遇到了pod无法删除,资源无法调度的问题。原因是其中一个集群节点意外脱离集群控制,所以在故障节点调度的服务全部意外关闭,无法正常重新调度。
像这种情况不应该直接进行强制删除。需要尝试将故障节点恢复到集群中。意外关闭的服务会自动恢复启动。
否则不问缘由的强制删除会将整个集群置于不安全状态中。安全生产无小事。
- 参考文档
https://www.cnblogs.com/floud/p/10620783.html
http://docs.kubernetes.org.cn/618.html