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?
kubernetes
Reachlin
quelle
quelle
Evicted
13 Tagen in Betrieb ist. Es sieht so aus, als würden vertriebene Hülsen nicht entfernt (oder es ist nur ein Fehler).DiskPressure
), die mitkubectl describe pods my-pod-name --namespace prod
Antworten:
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
quelle
-a
Argument ist ungültig.So löschen Sie Pods im Status "Fehlgeschlagen" im Namespace
default
quelle
status.phase=Evicted
. Ich habe das geschafftkubectl -n default delete pods --field-selector=status.phase!=Running
. Aber seien Sie vorsichtig, dies würde alles löschenkubectl -n default get pods --field-selector=status.phase=Failed
zuerst zu laufen .Evicted
Schoten für mich los .Räumungs-Pods sollten manuell gelöscht werden. Mit dem folgenden Befehl können Sie alle Pods im
Error
Status löschen .kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
quelle
Abhängig davon, ob eine weiche oder harte Räumungsschwelle erreicht wurde, werden die Container im Pod mit oder ohne Kulanzfrist beendet,
PodPhase
als markiertFailed
und 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 drain
das Leeren eines Knotens oder manuell über die Kubernetes-API aufgerufen werden kann .quelle
kubectl get pods -n mynamespace
kubectl describe pod <pod>
sagt das aus?kubectl describe
sagt "Status: Fehlgeschlagen Grund: Räumte Nachricht: Pod Der Knoten hatte wenig Ressourcen: [MemoryPressure]."Falls Sie Pods mit einem
Completed
Status haben, den Sie behalten möchten:kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
quelle
Kube-controller-manager
ist 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
quelle
kubectl edit pod kube-controller-manager-<master_name> -n kube-system
erhalte ichpod is invalid
nach dem Speichern der Konfigurationsdatei eine Fehlermeldung.Nur für den Fall, dass jemand automatisch alle vertriebenen Pods für alle Namespaces löschen möchte:
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
quelle
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')"
quelle
Noch ein Bash-Befehl zum Löschen von vertriebenen Pods
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
quelle
Um alle
Evicted
Pods 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
p
Modifikator dess
Befehls vonsed
anstatte
nur 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'
quelle
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 ...
quelle
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 pods
Befehls: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)}'
quelle
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
quelle
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/{}
quelle