我试图删除一个有12个pod的ReplicationController,我可以看到一些pod卡在终止状态。

我的Kubernetes集群由一个控制平面节点和三个安装在Ubuntu虚拟机上的工作节点组成。

这个问题的原因是什么?

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h

当前回答

我发现这个命令更直接:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done

它将删除默认命名空间中处于终止状态的所有pod。

其他回答

Go模板可以在没有awk的情况下工作,对我来说,它可以在没有-grace-period=0 -force的情况下工作,但是,如果你喜欢的话,可以添加它

这将输出删除终止pods的命令。

kubectl get pods --all-namespaces -otemplate='{{ range .items }}{{ if eq .status.reason  "Terminated" }}{{printf "kubectl delete pod -n %v %v\n" .metadata.namespace .metadata.name}}{{end}}{{end}}'

如果您对输出感到满意,可以添加| sh -来执行它。 遵循:

kubectl get pods --all-namespaces -otemplate='{{ range .items }}{{ if eq .status.reason  "Terminated" }}{{printf "kubectl delete pod -n %v %v\n" .metadata.namespace .metadata.name}}{{end}}{{end}}' |sh -

你可以使用awk:

kubectl get pods --all-namespaces | awk '{if ($4=="Terminating") print "oc delete pod " $2 " -n " $1 " --force --grace-period=0 ";}' | sh

我最近在删除rook ceph命名空间时偶然发现了这个问题——它卡在了终止状态。

唯一有帮助的是通过使用curl直接调用k8s api来删除kubernetes终结器。

Kubectl获取命名空间鲁克-ceph -o json > tmp.json 删除tmp中的kubernetes终结器。Json(留下空数组“终结器”:[]) 在另一个终端上运行kubectl代理进行身份验证,并在返回的端口上运行curl请求 curl -k -H "Content-Type: application/json" -X PUT——data-binary @tmp。json 127.0.0.1:8001 /美丽/集群/ c-mzplp / api / v1 /命名空间/ rook-ceph /完成 命名空间消失了

详细的rook ceph拆卸在这里。

最初的问题是“这个问题的原因是什么?”,答案在https://github.com/kubernetes/kubernetes/issues/51835和https://github.com/kubernetes/kubernetes/issues/65569上讨论,请参阅https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy

这是由于码头挂载泄漏到其他命名空间造成的。

您可以登录到pod主机进行调查。

minikube ssh
docker container ps | grep <id>
docker container stop <id> 

如果——grace-period=0不起作用,那么你可以这样做:

kubectl delete pods <pod> --grace-period=0 --force