我试图删除一个有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

当前回答

从资源(pod,deployment,ds等)中删除终结器块

"finalizers": [
  "foregroundDeletion"
]

其他回答

实用的答案——你可以通过运行:

kubectl delete pod NAME --grace-period=0

历史答案——在1.1版本中有一个问题,有时如果pod的节点被不干净地从集群中移除,则它们会处于终止状态。

我最近在释放集群中的资源时偶然发现了这一点。下面是删除它们的命令。

kubectl get pods --all-namespaces | grep Terminating | while read line; do
  pod_name=$(echo $line | awk '{print $2}' ) \
  name_space=$(echo $line | awk '{print $1}' ); \
  kubectl delete pods $pod_name -n $name_space --grace-period=0 --force
done

希望这能帮助到读到这篇文章的人

请尝试以下命令: Kubectl补丁pod -p '{"metadata":{"finalizers":null}}'

最初的问题是“这个问题的原因是什么?”,答案在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> 

可以使用以下命令强制删除POD。

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>