Aktualisierung von Hybridknoten für Ihren Cluster - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Aktualisierung von Hybridknoten für Ihren Cluster

Die Anleitung zum Upgrade von Hybridknoten ähnelt der für selbstverwaltete Amazon-EKS-Knoten, die in Amazon EC2 ausgeführt werden. Wir empfehlen Ihnen, neue Hybridknoten auf Ihrer Kubernetes-Zielversion zu erstellen, Ihre vorhandenen Anwendungen ordnungsgemäß auf die Hybridknoten der neuen Kubernetes-Version zu migrieren und die Hybridknoten der alten Kubernetes-Version aus Ihrem Cluster zu entfernen. Lesen Sie unbedingt die Bewährten Methoden für Amazon-EKS-Upgrades, bevor Sie ein Upgrade starten. Amazon EKS Hybrid Nodes verfügen über dieselbe Kubernetes-Versionsunterstützung für Amazon-EKS-Cluster mit Cloud-Knoten, einschließlich Standard- und erweiterten Support.

Amazon EKS Hybrid Nodes befolgen dieselbe Versionsabweichungsrichtlinie für Knoten wie vorgeschaltete Kubernetes. Amazon EKS Hybrid Nodes dürfen keine neuere Version als die Amazon-EKS-Steuerebene aufweisen und Hybridknoten dürfen bis zu drei Kubernetes-Nebenversionen älter sein als die Nebenversion der Amazon-EKS-Steuerebene.

Wenn Sie keine freien Kapazitäten haben, um neue Hybridknoten auf Ihrer Zielversion von Kubernetes für eine Cutover-Migrations-Upgrade-Strategie zu erstellen, können Sie alternativ die CLI (nodeadm) für Amazon EKS Hybrid Nodes verwenden, um die Kubernetes-Version Ihrer Hybridknoten vor Ort zu aktualisieren.

Wichtig

Wenn Sie Ihre Hybridknoten vor Ort mit nodeadm aktualisieren, kommt es während des Vorgangs zu Ausfallzeiten für den Knoten, bei denen die ältere Version der Kubernetes-Komponenten heruntergefahren und die Komponenten der neuen Kubernetes-Version installiert und gestartet werden.

Voraussetzungen

Stellen Sie vor dem Upgrade sicher, dass Sie die folgenden Voraussetzungen erfüllt haben.

  • Die Ziel-Kubernetes-Version für Ihr Hybridknoten-Upgrade muss gleich oder niedriger als die Version der Amazon-EKS-Steuerebene sein.

  • Wenn Sie eine Cutover-Migrations-Upgrade-Strategie verfolgen, müssen die neuen Hybridknoten, die Sie auf Ihrer Ziel-Kubernetes-Version installieren, die Voraussetzungen für die Einrichtung von Hybridknoten-Anforderungen erfüllen. Dies umfasst IP-Adressen innerhalb des Fern-Knoten-Netzwerk-CIDR, das Sie bei der Erstellung des Amazon-EKS-Clusters angegeben haben.

  • Sowohl für die Cutover-Migration als auch für direkte Upgrades müssen die Hybridknoten Zugriff auf die erforderlichen Domains haben, um die neuen Versionen der Abhängigkeiten der Hybridknoten abzurufen.

  • Sie müssen kubectl auf Ihrem lokalen Rechner oder Ihrer Instance installiert haben, die Sie für die Interaktion mit Ihrem API-Endpunkt für Amazon EKS Kubernetes verwenden.

  • Die Version Ihres CNI muss die Kubernetes-Version unterstützen, auf die Sie aktualisieren. Ist dies nicht der Fall, aktualisieren Sie Ihre CNI-Version, bevor Sie Ihre Hybridknoten aktualisieren. Weitere Informationen finden Sie unter CNI für Hybridknoten konfigurieren.

Cutover-Migration (Blau-Grün)-Upgrades

Cutover-Migrations-Upgrades beziehen sich auf den Prozess der Erstellung neuer Hybridknoten auf neuen Hosts mit Ihrer Ziel-Kubernetes-Version, der ordnungsgemäßen Migration Ihrer vorhandenen Anwendungen auf die neuen Hybridknoten auf Ihrer Ziel-Kubernetes-Version und der Entfernung der Hybridknoten auf der alten Kubernetes-Version aus Ihrem Cluster. Diese Strategie wird auch als Blau-Grün-Migration bezeichnet.

  1. Verbinden Sie Ihre neuen Hosts als Hybridknoten, indem Sie die Schritte Hybridknoten verbinden befolgen. Verwenden Sie beim Ausführen des nodeadm install-Befehls Ihre Ziel-Kubernetes-Version.

  2. Aktivieren Sie die Kommunikation zwischen den neuen Hybridknoten auf der Kubernetes-Zielversion und Ihren Hybridknoten auf der alten Kubernetes-Version. Diese Konfiguration ermöglicht die Kommunikation zwischen Pods, während Sie Ihre Workload auf die Hybridknoten der Kubernetes-Zielversion migrieren.

  3. Bestätigen Sie, dass Ihre Hybridknoten auf Ihrer Ziel-Kubernetes-Version Ihrem Cluster erfolgreich beigetreten sind und den Status „Bereit“ aufweisen.

  4. Verwenden Sie den folgenden Befehl, um jeden der Knoten, die Sie entfernen möchten, als nicht planbar zu markieren. Dadurch wird verhindert, dass auf den zu ersetzenden Knoten neue Pods geplant oder neu geplant werden. Weitere Informationen finden Sie unter kubectl cordon in der Kubernetes-Dokumentation. Ersetzen Sie NODE_NAME durch den Namen der Hybridknoten in der alten Kubernetes-Version.

    kubectl cordon NODE_NAME

    Mit dem folgenden Code-Ausschnitt können Sie alle Knoten einer bestimmten Kubernetes-Version (in diesem Fall 1.28) identifizieren und abgrenzen.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Cordoning $node" kubectl cordon $node done
  5. Wenn Ihre aktuelle Bereitstellung weniger als zwei CoreDNS-Replikate in Ihren Hybridknoten ausführt, skalieren die Bereitstellung auf mindestens zwei Replikate. Wir empfehlen, dass Sie aus Gründen der Ausfallsicherheit im Normalbetrieb mindestens zwei CoreDNS-Replikate in Hybridknoten ausführen.

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  6. Leeren Sie jeden Hybridknoten auf der alten Kubernetes-Version, den Sie aus Ihrem Cluster entfernen möchten, mit dem folgenden Befehl. Weitere Informationen zum Entleeren von Knoten finden Sie unter Sicheres Entleeren eines Knotens in der Kubernetes-Dokumentation. Ersetzen Sie NODE_NAME durch den Namen der Hybridknoten in der alten Kubernetes-Version.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data

    Mit dem folgenden Code-Ausschnitt können Sie alle Knoten einer bestimmten Kubernetes-Version (in diesem Fall 1.28) identifizieren und entleeren.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-emptydir-data done
  7. Sie können nodeadm verwenden, um die Artefakte der Hybridknoten zu stoppen und vom Host zu entfernen. Sie müssen nodeadm mit einem Benutzer ausführen, der über Root-/Sudo-Berechtigungen verfügt. Standardmäßig wird nodeadm uninstall nicht fortgesetzt, wenn auf dem Knoten noch Pods vorhanden sind. Weitere Informationen finden Sie unter nodeadm-Referenz für Hybridknoten.

    nodeadm uninstall
  8. Nachdem die Artefakte der Hybridknoten angehalten und deinstalliert wurden, entfernen Sie die Knoten-Ressource aus Ihrem Cluster.

    kubectl delete node node-name

    Mit dem folgenden Code-Ausschnitt können Sie alle Knoten einer bestimmten Kubernetes-Version (in diesem Fall 1.28) identifizieren und löschen.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Deleting $node" kubectl delete node $node done
  9. Abhängig von Ihrer CNI-Wahl können nach der Ausführung der obigen Schritte Artefakte auf Ihren Hybridknoten verbleiben. Weitere Informationen finden Sie unter CNI für Hybridknoten konfigurieren.

Direkte Upgrades

Der direkte Upgrade-Prozess bezieht sich auf die Verwendung von nodeadm upgrade zum Upgrade der Kubernetes-Version für Hybridknoten ohne Verwendung neuer physischer oder virtueller Hosts und einer Cutover-Migrationsstrategie. Der nodeadm upgrade-Prozess beendet die vorhandenen älteren Kubernetes-Komponenten, die auf dem Hybridknoten ausgeführt werden, deinstalliert die vorhandenen älteren Kubernetes-Komponenten, installiert die neuen Ziel-Kubernetes-Komponenten und startet die neuen Ziel-Kubernetes-Komponenten. Es wird dringend empfohlen, jeweils nur einen Knoten zu aktualisieren, um die Auswirkungen auf Anwendungen, die auf den Hybridknoten ausgeführt werden, zu minimieren. Die Dauer dieses Vorgangs hängt von Ihrer Netzwerkbandbreite und Latenz ab.

  1. Verwenden Sie den folgenden Befehl, um den Knoten, den Sie aktualisieren, als nicht planbar zu markieren. Dadurch wird sichergestellt, dass auf dem Knoten, den Sie aktualisieren, keine neuen Pods geplant oder neu geplant werden. Weitere Informationen finden Sie unter kubectl cordon in der Kubernetes-Dokumentation. NODE_NAME durch den Namen des Hybridknotens, den Sie aktualisieren, ersetzen

    kubectl cordon NODE_NAME
  2. Entleeren Sie den Knoten, den Sie aktualisieren, mit dem folgenden Befehl. Weitere Informationen zum Entleeren von Knoten finden Sie unter Sicheres Entleeren eines Knotens in der Kubernetes-Dokumentation. Ersetzen Sie NODE_NAME durch den Namen des Hybridknotens, den Sie aktualisieren.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data
  3. Führen Sie nodeadm upgrade auf dem Hybridknoten aus, den Sie aktualisieren. Sie müssen nodeadm mit einem Benutzer ausführen, der über Root-/Sudo-Berechtigungen verfügt. Der Name des Knotens bleibt während des Upgrades für die Anmeldeinformationsanbieter AWS SSM und AWS IAM Roles Anywhere erhalten. Sie können die Anmeldeinformationsanbieter während des Upgrades nicht ändern. Konfigurationswerte für nodeConfig.yaml finden Sie unter nodeadm-Referenz für Hybridknoten. Ersetzen Sie K8S_VERSION durch die Ziel-Version von Kubernetes, auf die Sie aktualisieren möchten.

    nodeadm upgrade K8S_VERSION -c file://nodeConfig.yaml
  4. Um die Planung von Pods auf dem Knoten nach dem Upgrade zuzulassen, geben Sie Folgendes ein. Ersetzen Sie NODE_NAME durch den Namen des Knotens.

    kubectl uncordon NODE_NAME
  5. Überwachen Sie den Status Ihrer Hybridknoten und warten Sie, bis Ihre Knoten heruntergefahren sind und mit dem Status „Bereit“ auf der neuen Kubernetes-Version neu gestartet wurden.

    kubectl get nodes -o wide -w