kubernetesで削除されたポッドはどうなりますか?


86

ポッドの一部がkubernetesによって削除されたのを見たところです。彼らはどうなりますか?そのようにぶらぶらしているだけですか、それとも手動で削除する必要がありますか?


3
同じ振る舞いを目の当たりにして、私はEvicted13日間状態になっているポッドを持っています。削除されたポッドが削除されないようです(または、単なるバグである可能性があります)。
ElouanKeryell- 2017

podgcコントローラーは、構成可能なしきい値に達したときに、これらの失敗/成功したポッドを再利用します。
zhb

2
私のポッドは削除され、合計40個あります。削除されたポッドに対しても月額料金が発生しますか?
Anant

コンテナの束が削除されますが、期待どおりに2つのコンテナが実行されています。失敗したものは低いため、リソース(あったDiskPressure使用して見つけることができます)kubectl describe pods my-pod-name --namespace prod
prayagupd

回答:


83

私が使用する簡単な回避策は、インシデント後にすべての削除されたポッドを手動で削除することです。次のコマンドを使用できます。

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c

2
チェックアウトこの1あまりにもgist.github.com/psxvoid/71492191b7cb06260036c90ab30cc9a0
パベルSapehin

タイプミスが必要-aです。引数が無効です。
IlyaSuzdalnitski19年

6
これ(および同様の回答)は、OPの質問「[何もしなかった場合]はどうなるのか」には答えません。
オリバー

61

名前空間で失敗状態のポッドを削除するには default

kubectl -n default delete pods --field-selector=status.phase=Failed

1
不思議なことに、これはいつも表示されませんstatus.phase=Evicted。私はなんとかこれを行うことができましたkubectl -n default delete pods --field-selector=status.phase!=Running。しかし、注意してください、これはすべてのものを削除します
n3o

3
kubectl -n default get pods --field-selector=status.phase=Failed最初に実行すると便利だと思います。
ユーザー名

それはEvicted私のためにポッドを取り除きます。
robertodecurnex

EKSv1.16のEvictedポッドの魅力のように機能しました。ありがとう。
ジョンハンフリーズ

19

削除されたポッドは手動で削除する必要があります。次のコマンドを使用して、Error状態のすべてのポッドを削除できます。

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

15

ソフトまたはハードのエビクションしきい値が満たされているかどうかに応じて、ポッド内のコンテナは猶予期間の有無にかかわらず終了し、PodPhaseとしてマークされFailed、ポッドが削除されます。アプリケーションがデプロイなどの一部として実行されている場合、Kubernetesによって作成およびスケジュールされた別のポッドがあります。おそらく別のノードでエビクションのしきい値を超えていません。

エビクションは必ずしもしきい値によって引き起こされる必要はありませんが、ノードkubectl drain空にするために呼び出すことも、KubernetesAPIを介して手動で呼び出すこともできることに注意してください。


3
ええ、私のポッドはデプロイメントからのものであり、別のノードで別のポッドが実行されているのがわかりますが、以前に
削除

それらが「そこにもある」とどのように判断しますか?どのコマンドがそれを正確に示していますか?
Simon Tesar 2017

ちょうどkubectl get pods -n mynamespace
リーチリン2017

どの状態ですか?何てkubectl describe pod <pod>言うの?
サイモン

1
OPではありませんが、この問題があります。 kubectl describe 「ステータス:失敗理由:削除されたメッセージ:ポッドノードのリソースが不足しています:[MemoryPressure]」と表示されます。
ブライアン2017

7

Kube-controller-managerデフォルトでは、K8sがインストールされています。GCが開始される前のデフォルトは最大12500の終了ポッドであるようです。

K8sドキュメントから直接:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

--terinated-pod-gc-threshold int32デフォルト:12500
終了したポッドガベージコレクタが終了したポッドの削除を開始する前に存在できる終了したポッドの数。<= 0の場合、終了したポッドガベージコレクタは無効になります。


マスターノードにkube-controller-managerポッドがあります。しかし、このフラグをどのように変更する必要がありますか?使用kubectl edit pod kube-controller-manager-<master_name> -n kube-systemしたい場合はpod is invalid、設定ファイルを保存した後にエラーが発生します。
AliTou19年

5

Completed維持したいステータスのポッドがある場合:

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

4

誰かがすべての名前空間のすべての削除されたポッドを自動的に削除したい場合に備えて:

  • パワーシェル
    Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
  • バッシュ
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces

3

すべての「削除された」ポッドを削除するKalvinのコマンドに相当するOpenShift:

eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"

3

追い出されたポッドを削除するもう1つのbashコマンド

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

2

すべてのEvictedポッドを強制的に削除するには、次の1行のコマンドを試すことができます。

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'

ヒント:代わりpsコマンドの修飾子を使用すると、実際のコマンドが出力されて削除ジョブが実行されます。sede

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'

1

しきい値をハードコーディングする方法の「公式」ガイドは次のとおりです(削除されたポッドをあまり多く表示したくない場合):kube-controll-manager

しかし、既知の問題は、kube-controll-managerをインストールする方法です...


面倒な場合は、上記のインストール方法を教えてください。
MandyShaw

私も答えがわからないので、私はそれについて言及しました。そして、OPは彼が使用しているシステムについて言及しておらず、彼が同じ問題を抱えているかどうかはわかりません。ところで、反対票はSUPERNICEです。
tikael

質問に完全に答えられないので、コメントとしてあなたのアイデアを追加したほうがいいと思います(それが私がそれを否定した理由です-申し訳ありませんが、それは今私を含む私たち全員に起こります)。
MandyShaw

上記の他のすべての回答を確認してください。OPは何が起こったのか、何人がそれに答えたのか、そして何人が立ち退きポッドを削除する方法を提供しているのかを尋ねました。
tikael

1

まだ別の方法awk

私を夢中にさせる可能性のある人為的エラー(望ましいポッドの削除)を防ぐために、get podsコマンドの結果の前にチェックします:

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed     

それがよさそうなら、ここに行きます:

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \
awk '{system("kubectl -n my-ns delete pods " $1)}'

1

次のコマンドは、失敗したすべてのポッドをすべての名前空間から削除します

kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod

0

以下のコマンドは、デフォルトの名前空間からすべての削除されたポッドを取得し、それらを削除します

kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}


1
コードのみの回答は、コミュニティを長期的に支援する説明されたコンテキストを含む回答のようには役に立たないため、推奨されません。
ArunVinoth19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.