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

当前回答

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 -

其他回答

强制删除pod:

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

——force标志是强制的。

对我来说,我不喜欢变通。所以有几个步骤:

k get pod -o wide ->这会显示哪个Node正在运行pod k get nodes ->检查节点状态…我明白了

我修复了这个节点。对于我的情况,它只是重新启动kubelet:

ssh that-node ->运行swapoff -a && systemctl restart kubelet(或systemctl restart k3s,如果k3s |或systemctl restart crio,在其他情况下,如OCP 4。X (k8s <1.23))

现在删除豆荚应该工作而不强迫可怜豆荚。

我不建议强制删除pod,除非容器已经退出。

验证kubelet日志,看看是什么导致了问题“journalctl -u kubelet” 检查docker日志:journalctl -u docker.service 检查吊舱的卷挂载点是否仍然存在,是否有人持有锁。 检查主机内存或磁盘是否不足

强制删除命名空间中的所有pod:

kubectl delete pods --all -n <namespace> --grace-period 0 --force

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

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

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