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

Lesedauer: 8 Minute
0

Mein Amazon-EKS-Cluster (Amazon Elastic Kubernetes Service) 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.
  • Warten Sie bei einem ResourceInUseException-Fehler einige Zeit, bevor Sie das Update erneut versuchen.
  • Aktualisieren Sie bei vorübergehenden Problemen mit dem Backend-Workflow den Cluster erneut.

Auflö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 in der Region, in der Sie Ihren Cluster erstellt haben.

2.    Wählen Sie in der Seitenleiste Cluster aus. Wählen Sie dann Ihren 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: Dadurch wird definiert, wie viele sekundäre IP-Adressen das Container Network Interface (CNI) für Pods reservieren muss.

$ 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.

Sie können auch die Variable MINIMUM_IP_TARGET verwenden, um die Mindestanzahl von IP-Adressen pro Knoten zu steuern.

Es hat sich bewährt, diese Konfigurationsvariablen zu verwenden, um zu steuern, wie viele Netzwerkschnittstellen und IP-Adressen verwaltet werden.

Ü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

So überprüfen Sie, 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.    Wählen Sie in der Seitenleiste Subnetze aus.

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.

Wenn Sie einen Support-Tarif haben, wenden Sie sich an das Support-Team, um Ihre Amazon-EKS-Subnetze zu aktualisieren.

Ü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 in der Region, in der Sie Ihren Cluster erstellt haben.

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 in der Region, in der Sie Ihren Cluster erstellt haben.

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. Wenn Sie einen Support-Tarif haben, wenden Sie sich an das Support-Team, um Ihre Amazon-EKS-Subnetze zu aktualisieren.

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?

Warten Sie einige Zeit, bevor Sie das Update der Steuerebene erneut starten (ResourceInUseException)

Dieser Fehler tritt auf, wenn eine automatisierte Aktion der Amazon-EKS-Steuerebene, z. B. ein Update der Plattformversion, ausgeführt wird, wenn Sie ein Update initiieren. Amazon EKS erkennt und ersetzt automatisch fehlerhafte Instances auf Steuerebene und bietet automatische Versions-Upgrades und Patches für sie. Warten Sie einige Zeit, bis die automatische Aktion abgeschlossen ist, bevor Sie das Update der Steuerebene erneut starten.

Hinweis: Ihre Wartezeit hängt davon ab, wann das automatische Update gestartet wurde. Wenn Sie sich nicht sicher sind, wann die automatische Aktion behoben werden kann, warten Sie eine Stunde, bevor Sie erneut versuchen, das Update der Steuerebene durchzuführen.

Cluster erneut aktualisieren

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.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr