停滞在”Terminiating”状态Pod¶
在Kubernetes中,有些pod删除后一直显示 Terminating
状态无法清理,通常我们需要释放掉这个资源,需要采用一些措施
常见原因:
pod有一个没有完成的
finalizer
pod没有响应终止信号
检查¶
使用
get pods
命令检查:kubeclt get pods
看到类似:
NAME READY STATUS RESTARTS AGE
nginx-7ef9efa7cd-qasd2 1/1 Terminating 0 1h
处理方法¶
方法一: finalizers
¶
检查pod是否存在
finalizers
kubectl get pod -n [NAMESPACE] -p [POD_NAME] -o yaml
输出中如果在 metadata
部分存在 finalizers
段落,则通过删除掉 finalizers
来解决:
kubectl patch pod [POD_NAME] -p '{"metadata":{"finalizers":null}}'
方法二: 强制删除¶
如果清理了 finalizers
没有解决问题,则强制删除:
kubectl delete pod --grace-period=0 --force --namespace [NAMESPACE] [POD_NAME]
警告
强制删除时候会提示:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "XXXXX" force deleted
这其实表明节点上的资源并没有释放,因为节点上还残留运行的容器,所以可能需要登陆到worker节点上来手工处理
备注
对于Node节点宕机,无法正常删除pod,则可能不得不使用上述强制删除方法
根因排查¶
导致kuberntes无法终止pod的原因通常是因为worker节点存在异常,导致资源不释放进而容器不能终止。一般需要检查 kubelet
的日志,排查为何无法停滞容器,例如卷不能卸载常会触发这样的问题。