Warum können Pods wiederholt nicht erneut gestartet werden oder werden unerwartet entfernt?
Virtual Private Cloud Klassische Infrastruktur
Der Pod befand sich in einwandfreiem Zustand, wird aber unerwartet entfernt oder bleibt in einer Neustartschleife stecken. In einigen Fällen weisen die Container den Status CrashLoopBackOff
auf.
Es kann sein, dass die Ressourcengrenzwerte der Container überschritten werden oder dass die Pods durch Pods mit höherer Priorität ersetzt wurden. Wenn der Start eines Kubernetes Containers wiederholt fehlschlägt, tritt er in den Zustand CrashLoopBackOff
ein, was auf eine anhaltende Neustartschleife innerhalb eines Pods hinweist. Dieser Fehler tritt häufig aufgrund verschiedener Probleme auf, die verhindern, dass der Container ordnungsgemäß gestartet werden kann. Häufige Ursachen sind unzureichender
Arbeitsspeicher, Ressourcenüberlastung, Bereitstellungsfehler, Probleme mit Diensten von Drittanbietern (z. B. DNS-Fehler), fehlende Abhängigkeiten oder Containerausfälle aufgrund von Portkonflikten.
Siehe hierzu folgenden Abschnitte:
- Ressourcenbegrenzungen für Container korrigieren
- Ersetzen von Pods durch Pods mit höherer Priorität korrigieren
Ressourcenbegrenzungen für Container korrigieren
- Rufen Sie den Namen des Pods ab. Falls Sie eine Bezeichnung verwenden, können Sie diese zum Filtern der Ergebnisse verwenden.
oc get pods --selector='app=wasliberty'
- Beschreiben Sie den Pod und suchen Sie nach dem Zähler für Neustart (Restart Count).
oc describe pod
- Rufen Sie den Status des Pods ab, wenn er in einem kurzen Zeitraum oft erneut gestartet wird.
oc get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
- Überprüfen Sie die Ursache. Zum Beispiel bedeutet
OOM Killed
"out of memory", was bedeutet, dass der Container aufgrund eines Ressourcenlimits abstürzt. - Erhöhen Sie die Kapazität Ihres Clusters, indem Sie z. B. die Größe der Worker-Pools so anpassen, dass die Ressourcen erfüllt werden können. Weitere Informationen finden Sie unter Größe des Classic-Worker-Pools ändern oder Größe des VPC-Worker-Pools ändern.
Ersetzen von Pods durch Pods mit höherer Priorität korrigieren
Gehen Sie wie folgt vor, um festzustellen, ob der Pod durch Pods mit höherer Priorität ersetzt wurde:
-
Rufen Sie den Namen des Pods ab.
oc get pods
-
Beschreiben Sie Ihre Pod-YAML.
oc get pod <pod_name> -o yaml
-
Überprüfen Sie das Feld
priorityClassName
.-
Wenn für das Feld
priorityClassName
kein Wert angegeben ist, weist der Pod die PrioritätsklasseglobalDefault
auf. Wenn der Clusteradministrator nicht die PrioritätsklasseglobalDefault
festgelegt hat, ist der Standardwert null (0) oder die niedrigste Priorität. Der Pod kann von jedem Pod mit einer höheren Priorität zurückgestellt oder entfernt werden. -
Wenn für das Feld
priorityClassName
ein Wert angegeben ist, rufen Sie die Prioritätsklasse ab.oc get priorityclass <priority_class_name> -o yaml
-
Notieren Sie den Wert für das Feld
value
, um die Priorität des Pods zu überprüfen.
-
-
Listen Sie vorhandene Prioritätsklassen im Cluster auf.
oc get priorityclasses
-
Rufen Sie für jede Prioritätsklasse die YAML-Datei ab und notieren Sie den Wert im Feld
value
.oc get priorityclass <priority_class_name> -o yaml
-
Vergleichen Sie den Prioritätsklassenwert des Pos mit den anderen Prioritätsklassenwerten, um festzustellen, ob seine Priorität höher oder niedriger ist.
-
Wiederholen Sie die Schritte 1 bis 3 für andere Pods im Cluster, um zu überprüfen, welche Prioritätsklasse von ihnen verwendet wird. Wenn die Prioritätsklasse der anderen Pods höher ist als die Ihres Pods, wird Ihr Pod erst bereitgestellt, wenn genügend Ressourcen für Ihren Pod und alle Pods mit höherer Priorität vorhanden sind.
-
Wenden Sie sich an Ihren Cluster-Administrator, um mehr Kapazität zu Ihrem Cluster hinzuzufügen und sicherzustellen, dass die richtigen Prioritätsklassen zugewiesen sind.