ポッドが終了ステータスで止まっている


244

ReplicationController12個のポッドを持つを削除しようとしたところ、一部のポッドがスタックTerminating状態になっていることがわかりました。

私の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

スケジューラーとコントローラー・マネージャーは稼働していますか?
Antoine Cotten 2016

回答:


471

次のコマンドを使用して、PODを強制的に削除できます。

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

3
これは、1.2.4での解決策でした。ポッドは一晩中終了していた
tback

6
私の場合、もう1つのオプションを追加する必要があります--force。ポッドを終了させるためです。
BMWの

17
クラスターでこれを実行し、ポッドが削除されたように見えましたが、ノードを確認したところ、コンテナーはまだ実行されていました。ノード自体でDockerを再起動することになりました。github.com/kubernetes/kubernetes/issues/25456このコマンドでシステムの問題を隠さないように注意してください。
mqsoh

4
@mqsoh:強制削除は、それをapi-serverストア(etcd)から削除するだけです。削除された実際のリソースは、無期限に実行される可能性があります。
ビット

8
「警告:即時削除は、実行中のリソースが終了したことの確認を待ちません。リソースは、クラスター上で無期限に実行され続ける可能性があります」どのようなリソースですか?
Akshay

57

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

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

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


41
しかし、私にとっての本当の質問は、「なぜ最初にこれに頼らなければならないのか」です。さもなければ通常の動作条件下で、ポッドがこのスタック状態になる原因は何ですか?
neverfox

2
一例を挙げましょう。正常にシャットダウンされたJavaコンテナがありましたが、それ自体がガベージコレクションされて死ぬため、シグナルに反応しませんでした。
アウレリア

1
名前空間を提供することは良いことです。そうしないと、マルチ名前空間環境ではポッドが見つかりませんkube-system。デフォルトでは、ポッドは名前空間を探します。
Daniel AndreiMincă2018

一度な名前空間内のすべてのポッドを削除するには、強制ktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
deepdive

21

ファイナライザブロックをリソース(ポッド、デプロイメント、DSなど...)yamlから削除します。

"finalizers": [
  "foregroundDeletion"
]

1
この後、永続ボリュームが削除されました。それは実際には何をしますか?
raiyan

ポッドが終了状態でスタックしていると、すぐに削除されました。
Kuberchaun 2018

スタックポッドを修正delete -grace-period=0 --forceできなかったとき、これが唯一の修正でした。しかし、それが正確に何をするかについてのいくらかの詳細についても感謝します。
valorl 2018

このページでは、foregroundDeletionについて説明します。オブジェクトが削除中であることを示すメタデータ値。kubernetes.io/docs/concepts/workloads/controllers/…–
Sean Keane、

14

実用的な答え-次のコマンドを実行すると、終了ポッドをいつでも削除できます。

kubectl delete pod NAME --grace-period=0

歴史的な答え-バージョン1.1で、ポッドのノードがクラスターからきれいに削除されていない場合、ポッドが終了状態で孤立することがあるという問題がありました。


1
それが問題だと思います。ノードから削除せずに1つのminion vmの電源を切りました。これは許容できる動作ですか?または、それらのポッドをKubernetesから削除するための修正はありますか?
Dimuthu、2016

ええ、バージョン1.2が出てくるまでの回避策は、ポッドを削除することです。
Alex Robinson

36
いつでも強制終了できますkubectl delete pod NAME --grace-period=0
Clayton

3
ドキュメントはkubectl delete ...SIG_TERMリクエストを実行するとコンテナに送信されると言っています。しかし、猶予期間後もコンテナーがまだ実行されている場合はどうなりますか?たくさんのポッドがスタックしTerminating、いくつかはgoで書かれ、いくつかはnodejsで書かれています。replicationControllerは削除され、コンテナはまだ実行中です
Quyen Nguyen Tuan

4
kubectl delete pod PODNAME --grace-period=0クレイトンの提案に従って私のために働いた。
Yogesh Jilhawar、2016年

12

私はこのコマンドをもっと簡単に見つけました:

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

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


1
kube-systemuse などの別の名前空間で実行する場合:for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
acrogenesis

8

私の場合、 --forceオプションはうまくいきませんでした。ポッドはまだ見えました!終了/不明モードでスタックしました。だから走った後

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

私は走った

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

2
これを行う前に、ファイナライザが何であるかを理解するためにkubernetes.io/docs/concepts/workloads/controllers/…を読む価値があります。また、スタックのかもしれないの所与のヒントで、特定のファイナライザを見て、なぜ ...それは立ち往生だし、それがバイパスに安全なのかどうか
紅Cherniavsky-Paskinは、

5

--grace-period=0動作していない場合は、次のことができます。

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

これが機能しているように見えても実際には削除されない状況があります。これは、kubeletがポッドの状態を失い、状態を取得できないためにそれを残すという問題に関係している可能性があります(例:github.com/kubernetes/kubernetes/issues/51835)。今のところ、これを削除する方法はまだ見つかっていません。
cgseller 2018

3

私は最近、rook ceph名前空間を削除するときにこれに遭遇しました-終了状態でスタックしました。

ここで提案されているように、curlを使用してk8s apiを直接呼び出すことにより、kubernetesファイナライザを削除するのに役立ちました

  • kubectl get namespace rook-ceph -o json > tmp.json
  • kubernetesファイナライザを削除する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
  • 名前空間がなくなった

詳細なルークセフの分解はこちら


3

元の質問は「ある?何がこの問題の原因かもしれない」と答えがで議論されているhttps://github.com/kubernetes/kubernetes/issues/51835https://github.com/kubernetes/kubernetes/issues / 65569&参照 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> 

これが最も賛成されない回答であり、単一のコメントがなかったとは信じられません。他のすべての回答は問題を回避または修正する方法に対処しますが、OPは条件が最初に発生する理由を明確に尋ねました。
MisterStrickland

0

私は最近これに遭遇し、クラスター内のリソースを解放しました。これらはすべて削除するコマンドです。

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

これがこれを読んだ人を助けることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.