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

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

——force标志是强制的。

其他回答

在做强制删除之前,我会先做一些检查。 1- node state:获取节点正在运行的节点名,可以使用以下命令查看:

"kubectl -n YOUR_NAMESPACE describe pod YOUR_PODNAME"

在“Node”标签下,您将看到节点名称。 你可以这样做:

kubectl describe node NODE_NAME

如果您看到任何奇怪的东西,请检查“条件”字段。 如果这是好的,那么你可以移动到步骤,重做:

"kubectl -n YOUR_NAMESPACE describe pod YOUR_PODNAME"

检查它挂起的原因,你可以在“事件”部分找到这个。 我这么说是因为在强制删除pod之前,您可能需要采取初步的操作,强制删除pod只删除pod本身,而不删除底层资源(例如,一个卡住的docker容器)。

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 -

发生这种情况的一个原因可能是关闭一个节点(而不耗尽它)。在这种情况下修复是再次打开节点;那么终止应该成功。

我在Kubernetes生产集群中遇到了同样的问题。

一个吊舱被困在终止阶段一段时间:

pod-issuing   mypod-issuing-0   1/1     Terminating   0  27h

我尝试使用命令检查日志和事件:

kubectl describe pod mypod-issuing-0 --namespace pod-issuing
kubectl logs mypod-issuing-0 --namespace pod-issuing

但没有人可以看到

我是如何解决的:

我运行下面的命令来强制删除pod:

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

这将立即删除pod并开始创建一个新的pod。然而,当创建另一个pod时,我遇到了下面的错误:

无法挂载或挂载卷:unmounted volumes=[data], unattach volumes=[data mypod- issue -token-5swgg aws-iam-token]:超时等待条件

我不得不等待7到10分钟,使卷从我删除的上一个pod中分离出来,以便它可以用于我正在创建的新pod。

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