Wie behebe ich ein fehlgeschlagenes Upgrade mit meinem Amazon-EKS-Cluster?

Letzte Aktualisierung: 23.09.2022

Mein Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster wird nicht aktualisiert. Wie kann ich dies beheben?

Kurzbeschreibung

Versuchen Sie folgendes, um ein fehlgeschlagenes Amazon-EKS-Cluster-Update zu beheben:

  • Überprüfen Sie bei einem IpNotAvailable-Fehler, ob das Subnetz, das Ihrem Cluster zugeordnet ist, über genügend verfügbare IP-Adressen verfügt.
  • Überprüfen Sie bei einem SubnetNotFound-Fehler, ob die Subnetze existieren und korrekt gekennzeichnet sind.
  • Überprüfen Sie bei einem SecurityGroupNotFound-Fehler, ob die Sicherheitsgruppen, die dem Cluster zugeordnet sind, vorhanden sind.
  • Erhöhen Sie bei einem EniLimitReached-Fehler das elastic-Network-Schnittstelle-Kontingent für das AWS-Konto.
  • Stellen Sie bei einem AccessDenied-Fehler sicher, dass Sie über die richtigen Berechtigungen verfügen.
  • Stellen Sie bei einem OperationNotPermitted-Fehler sicher, dass die Amazon-EKS-Servicerolle über die richtigen Berechtigungen verfügt.
  • Überprüfen Sie bei einem VpcIdNotFound-Fehler, ob die mit dem Cluster verknüpfte VPC vorhanden ist.
  • Überprüfen Sie, ob die Ressourcen, die Sie zum Erstellen des Clusters verwendet haben, gelöscht wurden.
  • Überprüfen Sie bei Clustern, die mit eksctl erstellt wurden, ob das Rollback des AWS-CloudFormation-Stack fehlgeschlagen ist.
  • Aktualisieren Sie bei vorübergehenden Problemen mit dem Backend-Workflow den Cluster erneut.

Hinweis: Die AWS-Konsolenlinks im Abschnitt „Auflösung“ führen Sie zur AWS-Region US-east-1. Wenn sich Ihre Ressourcen in einer anderen AWS-Region befinden, müssen Sie die Region in die Region ändern, in der sich Ihre Ressourcen befinden.

Lösung

Überprüfen Sie, ob die Subnetze über verfügbare IP-Adressen verfügen (IpNotAvailable)

Um einen Amazon-EKS-Cluster zu aktualisieren, müssen Sie über drei verfügbare IP-Adressen aus jedem der Subnetze verfügen. Wenn Sie nicht über genügend verfügbare IP-Adressen verfügen, können Sie nicht verwendete Netzwerkschnittstellen innerhalb der Cluster-Subnetze löschen. Durch das Löschen einer Netzwerkschnittstelle wird die IP-Adresse freigegeben. Weitere Informationen finden Sie unter Löschen einer Netzwerkschnittstelle.

So suchen Sie in den Amazon-EKS-Cluster-Subnetzen nach verfügbaren IP-Adressen:

1.    Öffnen Sie die Amazon-EKS-Konsole.

2.    Wählen Sie den Amazon-EKS-Cluster aus.

3.    Wählen Sie die Registerkarte Konfiguration aus.

4.    Wählen Sie die Registerkarte Netzwerk.

5.    Wählen Sie unter Subnetze ein Subnetz aus, um die Seite Subnetze zu öffnen.

6.    Wählen Sie ein Subnetz aus und wählen Sie die Registerkarte Details.

7.    Lokalisieren Sie die verfügbaren IPv4-Adressen, um zu sehen, über wie viele IP-Adressen das Subnetz verfügt.

Führen Sie in der AWS-Befehlszeilenschnittstelle die folgenden Befehle aus:

1.    Holen Sie sich die Subnetze, die mit dem Cluster verknüpft sind:

$ aws eks describe-cluster --name cluster-name --region your-region

Hinweis: Ersetzen Sie cluster-name durch den Namen Ihres Clusters und your-region durch Ihre AWS-Region.

Ausgabe:

...
   "subnetIds": [
                "subnet-6782e71e",
                "subnet-e7e761ac"
            ],
   ...

2.    Beschreiben Sie die Subnetze aus der vorhergehenden Ausgabe:

aws ec2 describe-subnets --subnet-ids subet-id --region your-region

Hinweis: Ersetzen Sie subnet-id durch die ID Ihres Subnetzes und your-region durch Ihre Region.

Ausgabe:

...
"AvailableIpAddressCount": 4089,
...

Wenn Sie nicht genügend verfügbare IP-Adressen haben, können Sie die Umgebungsvariable im aws-node Daemonset auf WARM_IP_TARGET setzen:

$ kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=number

Hinweis: Ersetzen Sie number durch die Anzahl der IP-Adressen, die Sie aus den Subnetzen reservieren möchten.

Das WARM_IP_TARGET definiert, wie viele sekundäre IP-Adressen das Container Network Interface (CNI) für Pods reservieren muss. Weitere Informationen zu WARM_IP_TARGET und anderen Konfigurationsvariablen finden Sie unter Was sind die bewährten Methoden, um das Amazon-VPC-CNI-Plug-In für die Verwendung einer IP-Adresse in VPC-Subnetzen mit Amazon EKS zu konfigurieren?

Überprüfen Sie, ob die Subnetze existieren und korrekt gekennzeichnet sind (SubnetNotFound)

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihre Subnetze vorhanden sind:

aws ec2 describe-subnets --subnet-ids subet-id --region region

Hinweis: Ersetzen Sie subnet-id durch die ID Ihres Subnetzes und Region durch die Region, in der sich die Subnetze befinden.

Wenn die Subnetze nicht existieren, wird der folgende Fehler angezeigt:

An error occurred (InvalidSubnetID.NotFound) when calling the DescribeSubnets operation: The subnet ID 'subnet-id' does not exist

Um zu überprüfen, ob die Subnetze korrekt gekennzeichnet sind:

1.    Identifizieren Sie die dem Cluster zugeordneten Subnetze, die dem Cluster zu sind, mithilfe der Schritte, die im Abschnitt Überprüfen, ob Sie über genügend verfügbare IP-Adressen (IpNotAvailable) verfügen, aufgeführt sind.

2.    Öffnen Sie die VPC-Konsole.

3.    Navigieren Sie zur Subnetz-Seite.

4.    Wählen Sie die Subnetze aus, die mit dem Cluster verknüpft werden sollen und wählen Sie im Detailbereich die Registerkarte Tags.

5.    Stellen Sie sicher, dass jedes Subnetz über die richtigen Tags verfügt:

Key - kubernetes.io/cluster/cluster-name

Hinweis: Das vorhergehende Tag wird nur zu Amazon-EKS-Cluster-Versionen 1.18 oder früher hinzugefügt. Das Tag ist für Cluster, die mit Kubernetes Version 1.19 und höher erstellt wurden, nicht obligatorisch. Ersetzen Sie cluster-name durch den Namen Ihres Clusters.

Der Wert des Tags kann entweder geteilt oder im Besitz sein.

Überprüfen Sie, ob die Sicherheitsgruppen, die dem Cluster zugeordnet sind, existieren (SecurityGroupNotFound)

Um die Sicherheitsgruppen zu identifizieren, die mit dem Cluster verknüpft sind:

1.    Öffnen Sie die Amazon-EKS-Konsole.

2.    Wählen Sie den Cluster aus.

3.    Wählen Sie die Registerkarte Konfiguration aus.

4.    Wählen Sie die Registerkarte Netzwerk.

5.    Wählen Sie die Sicherheitsgruppen aus, die unter Clustersicherheitsgruppe und Zusätzliche Sicherheitsgruppen aufgeführt sind.

Wenn die Sicherheitsgruppe vorhanden ist, wird die Konsole geöffnet und zeigt die Details der Sicherheitsgruppe an.

Aus der AWS CLI:

1.    Holen Sie sich die mit dem Cluster verknüpften Sicherheitsgruppen:

$ aws eks describe-cluster --name cluster-name --region your-region

Hinweis: Ersetzen Sie cluster-name durch den Namen Ihres Clusters und your-region durch Ihre Region.

Ausgabe:

...
"securityGroupIds": [       
 "sg-xxxxxxxx"
]
...

2.    Beschreiben Sie die Sicherheitsgruppe aus der vorhergehenden Ausgabe:

$ aws ec2 describe-security-groups --group-ids security-group-id --region your-region

Hinweis: Ersetzen Sie security-group-id durch die ID Ihrer Sicherheitsgruppe und your-region durch Ihre Region.

Erhöhen Sie das elastic-Network-Schnittstelle-Kontingent für das AWS-Konto (EniLimitReached)

Wenn Sie Ihr Kontingent an Netzwerkschnittstellen erreicht haben, können Sie nicht verwendete Netzwerkschnittstellen entfernen oder eine Limiterhöhung beantragen .

Wenn Ihre Netzwerkschnittstellen an einen Cluster angeschlossen sind, löschen Sie den Cluster, um die Netzwerkschnittstelle zu entfernen. Wenn Ihre Netzwerkschnittstellen an nicht verwendete Worker-Knoten angeschlossen sind, löschen Sie die Auto-Scaling-Gruppe für selbstverwaltete Knotengruppen. Löschen Sie die Knotengruppe für verwaltete Knotengruppen aus der Amazon-EKS-Konsole. Informationen zum Verschieben von Workloads von einer Knotengruppe in eine andere Knotengruppe finden Sie unter Migration zu einer neuen Knotengruppe.

Überprüfen Sie, ob Sie über die entsprechenden Berechtigungen verfügen (AccessDenied)

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Rollen oder Benutzer aus.

3.    Wählen Sie die Rolle oder den Benutzer aus.

4.    Stellen Sie sicher, dass die IAM-Rolle oder der Benutzer über die entsprechenden Berechtigungen verfügt.

Prüfen Sie, ob die Servicerolle über die entsprechenden Berechtigungen verfügt (OperationNotPermitted)

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Rollen aus.

3.    Filtern Sie nach AWSServiceRoleForAmazonEKS und wählen Sie die Rolle aus.

4.    Stellen Sie sicher, dass an die Rolle die Richtlinie AmazonEKSServiceRolePolicy angefügt ist.

Wenn die Richtlinie nicht angefügt ist, lesen Sie IAM-Identitätsberechtigungen hinzufügen.

Überprüfen Sie, ob die mit dem Cluster verknüpfte VPC vorhanden ist (VpcNotFound)

1.    Öffnen Sie die Amazon-EKS-Konsole.

2.    Wählen Sie den Cluster aus.

3.    Wählen Sie die Registerkarte Konfiguration aus.

4.    Wählen Sie die Registerkarte Netzwerk.

5.    Wählen Sie den VPC-ID-Link aus, um festzustellen, ob die VPC vorhanden ist.

Wenn die VPC nicht vorhanden ist, müssen Sie einen neuen Cluster erstellen.

Stellen Sie sicher, dass die dem Cluster zugeordneten Ressourcen gelöscht wurden

Wenn Sie den Cluster auf der Amazon-EKS-Konsole erstellt haben und die Subnetze, die zum Erstellen des Clusters verwendet wurden, gelöscht wurden, kann der Cluster nicht aktualisiert werden. Sie müssen den Cluster neu erstellen und die Workloads vom alten Cluster auf den neuen verschieben.

Prüfen Sie, ob das Rollback des AWS-CloudFormation-Stack fehlgeschlagen ist (eksctl)

Wenn das Rollback der CloudFormation-Stack fehlgeschlagen ist, lesen Sie Wie kann ich meine CloudFormation-Stack aktualisieren, wenn diese im Status UPDATE_ROLLBACK_FAILED feststeckt?

Aktualisieren Sie den Cluster erneut

Vorübergehende Probleme können dazu führen, dass die Backend-Workflows instabil sind. Wenn sich die vorherigen Schritte zur Fehlerbehebung nicht auf Ihr Problem beziehen, versuchen Sie erneut, den Cluster zu aktualisieren.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?