Direkt zum Inhalt

Wie kann ich Probleme bei der Aktualisierung verwalteter Knotengruppen für Amazon EKS beheben?

Lesedauer: 5 Minute
0

Ich versuche, meine von Amazon Elastic Kubernetes Service (Amazon EKS) verwaltete Knotengruppe zu aktualisieren und habe Probleme.

Kurzbeschreibung

Wenn du die von Amazon EKS verwaltete Knotengruppe aktualisierst, erhältst du möglicherweise eine der folgenden Fehlermeldungen:

  • "PodEvictionFailure Reached max retries while trying to evict pods from nodes in node group nodegroup-1234"
  • "Error: Nodegroup health has issues other than AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable"
  • "Error: InvalidParameterException: Launch template details can't be null for Custom ami type node group"

          -oder-

         "An error occurred (InvalidParameterException) when calling the UpdateNodegroupVersion operation: You cannot specify the field kubernetesVersion when using custom AMIs"

  • "UPDATE_FAILED Resource handler returned message: Requested release version 1.xx is not valid for kubernetes version 1.yy"

Lösung

Um Fehler bei der Aktualisierung von Amazon EKS-verwalteten Knotengruppen zu beheben, folge diesen Schritten zur Problembehandlung.

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhältst, stelle sicher, dass du die neueste AWS CLI-Version verwendest.

PodEvictionFailure Reached max retries while trying to evict pods from nodes in node group nodegroup-1234

Der Fehler PodEvictionFailure tritt auf, wenn das Upgrade nicht alle Pods aus dem Knoten leeren kann. Wenn ein Pod Disruption Budget (PDB) verhindert, dass Pods vom Knoten abgezogen werden, kann dies das Problem verursachen. Wenn eine Anwendung beispielsweise eine PDB von zwei hat, müssen mindestens zwei Pods für diese Anwendung ausgeführt werden.

Um zu überprüfen, ob die Anwendung eine PDB verwendet, führe den folgenden kubectl-Befehl aus:

$ kubectl get pdb —all-namespaces

Wenn du ein PDB verwendest, führe eine der folgenden Aktionen aus:

Die Option „Update erzwingen“ erkennt PDBs nicht. Aktualisierungen erfolgen unabhängig von PDB-Problemen, indem der Knoten zum Neustart gezwungen wird.

Hinweis: Wenn Pods von einem Kubernetes-Controller nicht auf die Knoten verteilt sind, kann diese Option zu Ausfallzeiten der Anwendungen führen.

Um die Option „Erzwingen“ zu verwenden, führe den AWS-CLI-Befehl ähnlich dem folgenden aus:

$ aws eks update-nodegroup-version --cluster-name cluster-123 --nodegroup-name nodegroup-1234 --force

-oder-

Führe den folgenden eksctl-Befehl aus:

$ eksctl upgrade nodegroup --cluster OneCluster --name managed-ng --force-upgrade

Behebung von PodDisruptionBudget-Bereinigungsfehlern mit CloudWatch Logs-Insights

Du kannst Amazon CloudWatch Logs Insights verwenden, um die Protokolldaten der Amazon EKS-Steuerebene zu durchsuchen. Weitere Informationen findest du unter Analyse von Protokolldaten mit CloudWatch Logs Insights.

Wichtig: Du kannst Protokollereignisse in CloudWatch Logs erst anzeigen, nachdem du die Protokollierung der Steuerebene in einem Cluster aktiviert hast. Bevor du einen Zeitraum für die Ausführung von Abfragen in CloudWatch Logs-Insights auswählst, stelle sicher, dass du die Protokollierung auf Steuerebene aktiviert hast. Weitere Informationen findest du unter Wie kann ich Amazon EKS-Steuerebenenprotokolle aus CloudWatch Logs abrufen?

Führe eine Abfrage ähnlich der folgenden aus, um den Pod zu ermitteln, bei dem die Bereinigung fehlgeschlagen ist, und die Anzahl der Fehler zu ermitteln:

fields @timestamp, @message
| stats count(*) as count by objectRef.name
| filter @logStream like /audit/
| filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod" and responseStatus.code > 400
| sort count desc

Die maximale Anzahl von Wiederholungsversuchen für einen Bereinigungs-Pod beträgt 20. Wenn die Anzahl für einen angezeigten Pod größer als oder gleich 20 Ausfälle ist, ist dies der Pod, bei dem die Bereinigung fehlgeschlagen ist.

Führe die folgende Abfrage aus, um den Budgetnamen für Pod-Unterbrechungen zu ermitteln, der verhindert, dass der vorherige Pod entfernt wird.

filter @logStream like /^kube-apiserver-audit/
  | fields @logStream, @timestamp, @message
  | sort @timestamp desc
  | filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod_name" and responseStatus.code > 400
  | limit 999
  | display responseObject.details.causes.0.message,objectRef.name,objectRef.namespace,objectRef.resource

Hinweis: Ersetze pod_name durch den Namen deines Pods.

Die Ausgabe enthält eine Meldung ähnlich der folgenden, wobei pod_distruption_budget das Objekt ist, das die Bereinigungsfehler verursacht:

The disruption budget pod_distruption_budget needs 1 healthy pods and has 1 currently

Fehler: Nodegroup health has issues other than AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable

Wenn du diese Fehlermeldung erhältst, überprüfe die Details der verwalteten Knotengruppe und suche nach den Zustandsproblemen. Weitere Informationen und Problemlösungen findest du unter Fehler bei verwalteten Knotengruppen und in der Amazon EKS-Problem-API-Referenz.

Fehler: InvalidParameterException: Launch template details can't be null for Custom ami type node group

-oder-

An error occurred (InvalidParameterException) when calling the UpdateNodegroupVersion operation: You cannot specify the field kubernetesVersion when using custom AMIs.

Für verwaltete Knotengruppen mit einem benutzerdefinierten AMI musst du eine neue AMI-Version mit der Kubernetes-Version erstellen, auf die du ein Upgrade durchführen möchtest. Gib während des Upgrades die Startvorlage und die Version an.

Wenn du die AWS-CLI verwendest, verwende das Flag --launch-template. Verwende für eksctl das Flag --launch-template-version.

Hinweis: Vermeide es, das Flag**\ --kubernetes-version ** mit diesen Befehlen zu verwenden.

UPDATE_FAILED Resource handler returned message: "Requested release version 1.xx is not valid for kubernetes version 1.yy"

Dieser Fehler tritt auf, wenn die verwaltete Knotengruppe mit dem Amazon EKS-Cluster aus demselben AWS CloudFormation-Stack mit dem UpdateStack-API-Aufruf aktualisiert wird.

CloudFormation versucht, den Stack zurückzusetzen, aber es schlägt fehl, weil der Amazon EKS-Cluster erfolgreich aktualisiert wurde und nicht rückgängig gemacht werden kann. Der Amazon EKS-Cluster kann 1.xx nicht mit 1.yy (z. B. 1.21 und 1.22) abgleichen .

Weitere Informationen zur Behebung des Problems findest du im ersten Fehler, der für die Knotengruppe im CloudFormation-Stack aufgetreten ist. Aktualisiere dann den CloudFormation-Stack erneut.

Weitere Informationen findest du unter Verhalten bei Aktualisierungen verwalteter Knoten.


Ähnliche Informationen

Wie behebe ich Fehler bei der Erstellung von verwalteten Amazon-EKS-Knotengruppen?

Wie behebe ich Fehler bei verwalteten Knotengruppen in einem Amazon EKS-Cluster?

Amazon-EKS-Fehlerbehebung

AWS OFFICIALAktualisiert vor 3 Jahren