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
あなたは強制的にPODを削除するために次のコマンドを使用することができます。
kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>
ポッドを強制削除します。
kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
--force
フラグは必須です。
リソース(pod、deployment、dsなど)yamlからfinalizersブロックを削除します。
"finalizers": [
"foregroundDeletion"
]
実用的な答え - あなたはいつでも実行することによって終了ポッドを削除することができます:
kubectl delete pod NAME --grace-period=0
歴史的回答 - バージョン1.1では、ノードがクラスタから不当に削除された場合にポッドがTerminating状態に取り残されることがあるという問題がありました。
私はこのコマンドがもっと簡単であることがわかりました:
for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
デフォルト名前空間の終了ステータスにあるすべてのポッドを削除します。
私の場合は--force
オプションはうまくいきませんでした。私はまだポッドを見ることができました! Terminating/Unknownモードで動かなくなりました。だから走った後
kubectl delete pods <pod> -n redis --grace-period=0 --force
私は走った
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
私は最近私のクラスタのリソースを解放するためにこれにつまずいた。これはそれらをすべて削除するコマンドです。
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
これを読んでくれる人に役立つことを願います
私は最近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
詳細なルークセフティアダウン はこちら 。
--grace-period=0
が機能していない場合は、次のようにします。
kubectl delete pods <pod> --grace-period=0 --force
元の質問は「この問題の理由は何ですか?」であり、その答えは https://github.com/kubernetes/kubernetes/issues/51835 & https://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>