Was passiert mit vertriebenen Hülsen in Kubernetes?


82

Ich habe gerade gesehen, dass einige meiner Schoten von Kubernetes vertrieben wurden. Was wird mit ihnen passieren? einfach so rumhängen oder muss ich sie manuell löschen?


3
Wenn ich das gleiche Verhalten beobachte, habe ich eine Kapsel, die seit Evicted13 Tagen in Betrieb ist. Es sieht so aus, als würden vertriebene Hülsen nicht entfernt (oder es ist nur ein Fehler).
Elouan Keryell-Even

Der Podgc-Controller fordert diese fehlgeschlagenen / erfolgreichen Pods zurück, wenn ein konfigurierbarer Schwellenwert erreicht wird.
zhb

2
Meine Pods werden vertrieben und es gibt insgesamt 40. Werden mir also auch für diese vertriebenen Pods pro Monat Gebühren berechnet?
Anant

Ein paar Container werden vertrieben, aber ich habe immer noch 2 Container, die wie erwartet laufen. Fehlgeschlagene waren wegen der geringen Ressource ( DiskPressure), die mitkubectl describe pods my-pod-name --namespace prod
betagupupd

Antworten:


78

Eine schnelle Problemumgehung, die ich verwende, besteht darin, alle vertriebenen Pods nach einem Vorfall manuell zu löschen. Sie können diesen Befehl verwenden:

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


Sie müssen einen Tippfehler haben, das -aArgument ist ungültig.
Ilya Suzdalnitski

5
Diese (und ähnliche Antworten) beantworten nicht die OP-Frage "Was wird mit ihnen geschehen [wenn Sie nichts tun]?"
Oliver

56

So löschen Sie Pods im Status "Fehlgeschlagen" im Namespace default

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

1
Seltsamerweise zeigt dies nicht wann status.phase=Evicted. Ich habe das geschafft kubectl -n default delete pods --field-selector=status.phase!=Running. Aber seien Sie vorsichtig, dies würde alles löschen
n3o

3
Ich denke, es kann nützlich sein, kubectl -n default get pods --field-selector=status.phase=Failedzuerst zu laufen .
Benutzername

Es wird die EvictedSchoten für mich los .
Robertodecurnex

19

Räumungs-Pods sollten manuell gelöscht werden. Mit dem folgenden Befehl können Sie alle Pods im ErrorStatus löschen .

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

15

Abhängig davon, ob eine weiche oder harte Räumungsschwelle erreicht wurde, werden die Container im Pod mit oder ohne Kulanzfrist beendet, PodPhaseals markiert Failedund der Pod gelöscht. Wenn Ihre Anwendung beispielsweise im Rahmen einer Bereitstellung ausgeführt wird, wird ein weiterer Pod von Kubernetes erstellt und geplant - wahrscheinlich auf einem anderen Knoten, der die Räumungsschwellen nicht überschreitet.

Beachten Sie, dass die Räumung nicht unbedingt durch Schwellenwerte verursacht werden muss, sondern auch über kubectl draindas Leeren eines Knotens oder manuell über die Kubernetes-API aufgerufen werden kann .


3
Ja, mein Pod stammt aus einer Bereitstellung, und ich sehe einen anderen Pod auf einem anderen Knoten laufen, aber diese zuvor vertriebenen Pods sind auch da
Sie den

Wie stellen Sie fest, dass sie "auch da" sind? Welcher Befehl zeigt Ihnen das genau?
Simon Tesar

Justkubectl get pods -n mynamespace
Reachlin

In welchem ​​Zustand? Was kubectl describe pod <pod>sagt das aus?
Simon Tesar

1
Nicht OP, aber ich habe dieses Problem. kubectl describe sagt "Status: Fehlgeschlagen Grund: Räumte Nachricht: Pod Der Knoten hatte wenig Ressourcen: [MemoryPressure]."
Bryan

5

Falls Sie Pods mit einem CompletedStatus haben, den Sie behalten möchten:

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

5

Kube-controller-managerist standardmäßig mit einer funktionierenden K8s-Installation vorhanden. Es scheint, dass die Standardeinstellung maximal 12500 terminierte Pods ist, bevor GC aktiviert wird.

Direkt aus der K8s-Dokumentation: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

--terminated-pod-gc-schwelle int32 Standard: 12500
Anzahl der terminierten Pods, die vorhanden sein können, bevor der terminierte Pod-Garbage Collector mit dem Löschen terminierter Pods beginnt. Wenn <= 0, ist der terminierte Pod-Garbage-Collector deaktiviert.


Ich habe die kube-controller-manager-Pods auf meinen Masterknoten. Aber wie soll ich dieses Flag ändern? Wenn ich es verwenden möchte, kubectl edit pod kube-controller-manager-<master_name> -n kube-systemerhalte ich pod is invalidnach dem Speichern der Konfigurationsdatei eine Fehlermeldung.
Ali Tou

4

Nur für den Fall, dass jemand automatisch alle vertriebenen Pods für alle Namespaces löschen möchte:

  • Power Shell
    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 }
  • Bash
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces

3

OpenShift-Äquivalent zu Kalvins Befehl zum Löschen aller "vertriebenen" Pods:

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

Noch ein Bash-Befehl zum Löschen von vertriebenen Pods

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

2

Um alle EvictedPods mit Gewalt zu löschen , können Sie diesen einzeiligen Befehl versuchen:

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

Tipps: Verwenden Sie den pModifikator des sBefehls von sedanstatt enur den tatsächlichen Befehl zu drucken, um den Löschjob auszuführen:

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

1

Hier ist die 'offizielle' Anleitung zum harten Codieren des Schwellenwerts (wenn Sie nicht zu viele vertriebene Pods sehen möchten): kube-controller-manager

Ein bekanntes Problem ist jedoch, wie kube-controller-manager installiert wird ...


Bitte geben Sie an, wie die erwähnte Installation erreicht werden kann, wenn sie problematisch ist.
MandyShaw

Ich kenne die Antwort auch nicht, deshalb habe ich sie erwähnt. Und OP erwähnte das von ihm verwendete System nicht und ich weiß nicht, ob er das gleiche Problem haben würde. Übrigens ist Downvote SUPER NICE.
Tikael

Sie hätten es besser gemacht, Ihre Idee als Kommentar hinzuzufügen, da sie die Frage nicht vollständig beantwortet (weshalb ich sie abgelehnt habe - sorry, aber es passiert uns allen, einschließlich mir gerade).
MandyShaw

Überprüfen Sie alle anderen Antworten oben. OP fragte, was passiert ist und wie viele von ihnen haben darauf geantwortet und wie viele von ihnen bieten eine Möglichkeit, den Räumungs-Pod zu löschen.
Tikael

1

Ein anderer Weg noch mit awk .

Um menschliche Fehler zu vermeiden, die mich verrückt machen könnten (Löschen wünschenswerter Pods), überprüfe ich vor dem Ergebnis des get podsBefehls:

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

Wenn das gut aussieht, los geht's:

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

1

Mit dem folgenden Befehl werden alle fehlgeschlagenen Pods aus allen Namespaces gelöscht

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

-1

Mit dem folgenden Befehl werden alle entfernten Pods aus dem Standard-Namespace abgerufen und gelöscht

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


1
Nur-Code-Antworten werden nicht empfohlen, da sie nicht wie eine Antwort mit erklärtem Kontext helfen, die der Community auf lange Sicht hilft.
Arun Vinoth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.