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

当前回答

以下命令与awk和xargs可以使用——grace-period=0——force删除所有处于终止状态的pod。

kubectl get pods|grep -i terminating | awk '{print $1}' | xargs kubectl delete --grace-period=0 --force pod

其他回答

强制删除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容器)。

我发现这个命令更直接:

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

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

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

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

你可以使用awk:

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