web-dev-qa-db-ja.com

ポッドが終了ステータスで停止しています

12個のポッドを持つReplicationControllerを削除しようとしましたが、いくつかのポッドがTerminatingステータスで動かなくなっていることがわかりました。

My Kubernetesクラスタは、Ubuntu仮想マシンにインストールされた1つのコントロールプレーンノードと3つのワーカーノードで構成されています。

この問題の原因は何でしょうか。

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
150
Dimuthu

あなたは強制的にPODを削除するために次のコマンドを使用することができます。

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

ポッドを強制削除します。

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

--forceフラグは必須です。

47
Joan

リソース(pod、deployment、dsなど)yamlからfinalizersブロックを削除します。

"finalizers": [
  "foregroundDeletion"
]
16
Roee Rakovsky

実用的な答え - あなたはいつでも実行することによって終了ポッドを削除することができます:

kubectl delete pod NAME --grace-period=0

歴史的回答 - バージョン1.1では、ノードがクラスタから不当に削除された場合にポッドがTerminating状態に取り残されることがあるという問題がありました。

11
Alex Robinson

私はこのコマンドがもっと簡単であることがわかりました:

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

デフォルト名前空間の終了ステータスにあるすべてのポッドを削除します。

3
belabrinel

私の場合は--forceオプションはうまくいきませんでした。私はまだポッドを見ることができました! Terminating/Unknownモードで動かなくなりました。だから走った後

kubectl delete pods <pod> -n redis --grace-period=0 --force

私は走った

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
2
sh0umik

私は最近私のクラスタのリソースを解放するためにこれにつまずいた。これはそれらをすべて削除するコマンドです。

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

これを読んでくれる人に役立つことを願います

1
rrr

私は最近rook ceph名前空間を削除するときにこれにつまずいた - それはTerminating状態で動けなくなった。

ここで提案されているように k8s apiをcurlで直接呼び出すことによってkubernetesファイナライザーを削除することが唯一の助けになりました

  • kubectl get namespace rook-ceph -o json > tmp.json
  • tmp.json内のkubernetesファイナライザを削除します(空の配列"finalizers": []を残します)
  • 認証目的で別の端末でkubectl proxyを実行し、返されたポートへのカール要求に続いて実行します。
  • 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
  • 名前空間がなくなった

詳細なルークセフティアダウン はこちら

1
zub0r

--grace-period=0が機能していない場合は、次のようにします。

kubectl delete pods <pod> --grace-period=0 --force
1
Paul Ma

元の質問は「この問題の理由は何ですか?」であり、その答えは https://github.com/kubernetes/kubernetes/issues/51835https://github.com/kubernetes/kubernetes/issues/65569 &see https://www.bountysource.com/ issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy

Dockerマウントが他のネームスペースにリークしていることが原因です。

ポッドホストにログオンして調査できます。

minikube ssh
docker container ps | grep <id>
docker container stop <id> 
0
noelmcloughlin