Dim*_*thu 189 kubernetes
我厌倦了删除一个带有12个pod的复制控制器,我可以看到一些pod停留在终止状态.我的Kubernetes设置包括在ubuntu vms中安装的一个主机和三个minons.这个问题可能是什么原因?
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
Run Code Online (Sandbox Code Playgroud)
Nit*_*tin 378
您可以使用以下命令强制删除POD.
kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>
Run Code Online (Sandbox Code Playgroud)
Joa*_*oan 50
强制删除pod:
kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
Run Code Online (Sandbox Code Playgroud)
该--force
标志是强制性的.
noe*_*lin 43
最初的问题是“这个问题的原因是什么? ”,答案在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
它是由 docker mount 泄漏到其他一些命名空间引起的。
您可以登录到 pod 主机进行调查。
minikube ssh
docker container ps | grep <id>
docker container stop <id>
Run Code Online (Sandbox Code Playgroud)
rrr*_*rrr 25
我最近偶然发现了这个来释放集群中的资源。这是将它们全部删除的命令。
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
Run Code Online (Sandbox Code Playgroud)
小智 23
我发现这个命令更简单:
for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
Run Code Online (Sandbox Code Playgroud)
它将删除默认命名空间中处于终止状态的所有 pod。
小智 19
从资源中删除终结器块(pod,deployment,ds等...)yaml:
"finalizers": [
"foregroundDeletion"
]
Run Code Online (Sandbox Code Playgroud)
Ale*_*son 11
实际答案 - 您可以通过运行以下命令删除终止pod:
kubectl delete pod NAME --grace-period=0
Run Code Online (Sandbox Code Playgroud)
历史答案 - 版本1.1中存在一个问题,如果从群集中不正确地删除节点,则有时pod会陷入Terminating状态.
就我而言,我不喜欢解决方法。所以有步骤:
k get pod -o wide
-> 这将显示哪个节点正在运行 podk get nodes
-> 检查该节点的状态...我明白了NotReady
我去修复了那个节点。对于我的情况,只需重新启动 kubelet 即可:
ssh that-node
-> 运行swapoff -a && systemctl restart kubelet
(或者systemctl restart k3s
在 k3s | 或systemctl restart crio
其他情况下,如 OCP 4.x (k8s <1.23) )现在,删除 pod 应该可以正常工作,而不会强制执行 Poor pod。
小智 8
请尝试以下命令:
kubectl patch pod <pod>-p '{"metadata":{"finalizers":null}}'
Run Code Online (Sandbox Code Playgroud)
我最近在删除 rook ceph 命名空间时偶然发现了这一点 - 它陷入了终止状态。
唯一有帮助的是通过使用curl 直接调用 k8s api 来删除 kubernetes 终结器,如此处建议的那样。
kubectl get namespace rook-ceph -o json > tmp.json
tmp.json
(保留空数组"finalizers": []
)kubectl proxy
以进行身份验证,并按照curl请求运行返回的端口curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
详细的 rook ceph 拆解请参见此处。
小智 7
强制删除命名空间中的所有 Pod:
kubectl delete pods --all -n <namespace> --grace-period 0 --force
Run Code Online (Sandbox Code Playgroud)
小智 7
删除所有命名空间中处于“终止”状态的所有 pod:
kubectl get pods --all-namespaces | awk '/Terminating/{print $1 " " $2}' | while read -r namespace pod; do kubectl delete pod "$pod" -n "$namespace" --grace-period=0 --force;done
Run Code Online (Sandbox Code Playgroud)
小智 6
如果--grace-period=0
不起作用,那么您可以执行以下操作:
kubectl delete pods <pod> --grace-period=0 --force
Run Code Online (Sandbox Code Playgroud)
就我而言,该--force
选项不太奏效。我仍然可以看到吊舱!它停留在终止/未知模式下。所以跑步后
kubectl delete pods <pod> -n redis --grace-period=0 --force
Run Code Online (Sandbox Code Playgroud)
我跑了
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
Run Code Online (Sandbox Code Playgroud)
我用这个命令来删除 Pod
kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行另一个 Pod 时,它不起作用,它卡在“Pending”状态,看起来节点本身被卡住了。
对我来说,解决方案是重新创建节点。我只是转到 GKE 控制台并从集群中删除了该节点,然后 GKE 启动了另一个节点。
之后,一切又开始正常运转。
我在生产 Kubernetes 集群中遇到了同样的问题。
一个 Pod 在终止阶段停留了一段时间:
pod-issuing mypod-issuing-0 1/1 Terminating 0 27h
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下命令检查日志和事件:
kubectl describe pod mypod-issuing-0 --namespace pod-issuing
kubectl logs mypod-issuing-0 --namespace pod-issuing
Run Code Online (Sandbox Code Playgroud)
但没有一个可供查看
我是如何修复它的:
我运行以下命令来强制删除 pod:
kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>
Run Code Online (Sandbox Code Playgroud)
这会立即删除该 pod 并开始创建一个新的 pod。但是,在创建另一个 pod 时,我遇到了以下错误:
无法附加或装载卷:已卸载的卷=[数据],未附加的卷=[数据 mypod-issuing-token-5swgg aws-iam-token]:等待条件超时
我必须等待 7 到 10 分钟才能使该卷与我删除的上一个 Pod 分离,以便它可以用于我正在创建的新 Pod。
小智 5
您可以使用awk
:
kubectl get pods --all-namespaces | awk '{if ($4=="Terminating") print "oc delete pod " $2 " -n " $1 " --force --grace-period=0 ";}' | sh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102407 次 |
最近记录: |