Aktualisieren einer Amazon-EKS-Cluster-Kubernetes-Version - Amazon EKS

Helfen Sie mit, diese Seite zu verbessern

Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aktualisieren einer Amazon-EKS-Cluster-Kubernetes-Version

Wenn eine neue Kubernetes-Version in Amazon EKS verfügbar ist, können Sie Ihren Amazon-EKS-Cluster auf die neueste Version aktualisieren.

Wichtig

Sobald Sie einen Cluster aktualisiert haben, können Sie kein Downgrade auf eine frühere Version durchführen. Es wird empfohlen, dass Sie vor dem Aktualisieren auf eine neue Kubernetes-Version die Informationen in Kubernetes-Versionen für Amazon EKS und in den Aktualisierungsschritten in diesem Thema sichten.

Neue Kubernetes-Versionen führen oft bedeutende Änderungen ein. Daher empfehlen wir Ihnen, das Verhalten Ihrer Anwendungen mit einer neuen Kubernetes-Version zu testen, bevor Sie Ihre Produktionscluster aktualisieren. Hierzu erstellen Sie einen kontinuierlichen Integrations-Workflow, um das Verhalten Ihrer Anwendungen zu testen, bevor Sie auf eine neue Kubernetes-Version aktualisieren.

Der Aktualisierungsprozess besteht darin, dass Amazon EKS neue API-Serverknoten mit der aktualisierten Kubernetes-Version startet, um die vorhandenen zu ersetzen. Amazon EKS führt auf diesen neuen Knoten standardmäßige Infrastruktur- und Bereitschaftszustandsprüfungen für den Netzwerkverkehr durch, um sicherzustellen, dass sie wie erwartet funktionieren. Sobald Sie das Cluster-Upgrade gestartet haben, können Sie es jedoch weder anhalten noch beenden. Wenn eine dieser Prüfungen fehlschlägt, macht Amazon EKS die Infrastruktur-Bereitstellung rückgängig und der Cluster verbleibt in der vorherigen Kubernetes-Version. Laufende Anwendungen sind davon nicht betroffen und Ihr Cluster befindet sich nie in einem nicht deterministischen oder nicht wiederherstellbaren Zustand. Amazon EKS sichert regelmäßig alle verwalteten Cluster, und es gibt Mechanismen, um Cluster bei Bedarf wiederherzustellen. Wir evaluieren und verbessern unsere Verwaltungsprozesse für die Kubernetes-Infrastruktur laufend.

Um den Cluster zu aktualisieren, benötigt Amazon EKS bis zu fünf verfügbare IP-Adressen aus den Subnetzen, die beim Erstellen des Clusters bereitgestellt wurden. Amazon EKS erstellt in jedem der von Ihnen angegebenen Subnetze neue Elastic-Network-Schnittstellen für den Cluster (Netzwerkschnittstellen). Die Netzwerkschnittstellen können in anderen Subnetzen erstellt werden als Ihre vorhandenen Netzwerkschnittstellen. Stellen Sie daher sicher, dass Ihre Sicherheitsgruppenregeln die erforderliche Cluster-Kommunikation für jedes der Subnetze zulassen, die Sie bei der Erstellung Ihres Clusters angegeben haben. Wenn eines der Subnetze, die Sie bei der Erstellung des Clusters angegeben haben, nicht existiert, nicht genügend verfügbare IP-Adressen hat oder nicht über Sicherheitsgruppenregeln verfügt, die die notwendige Clusterkommunikation zulassen, kann die Aktualisierung fehlschlagen.

Anmerkung

Um sicherzustellen, dass der API-Serverendpunkt für Ihren Cluster immer zugänglich ist, bietet Amazon EKS eine hochverfügbare Kubernetes-Steuerebene und führt während Aktualisierungsvorgängen fortlaufende Aktualisierungen der API-Serverinstances durch. Um den sich ändernden IP-Adressen von API-Serverinstances Rechnung zu tragen, die Ihren Kubernetes-API-Server-Endpunkt unterstützen, müssen Sie sicherstellen, dass Ihre API-Serverclients Wiederverbindungen effektiv verwalten. Aktuelle Versionen von kubectl und der Kubernetes-Client-Bibliotheken, die offiziell unterstützt werden, führen diesen Vorgang zur Wiederherstellung der Verbindung transparent durch.

Die Kubernetes-Version für Ihren Amazon-EKS-Cluster aktualisieren

Aktualisieren der Kubernetes-Version für Ihren Cluster
  1. Vergleichen Sie die Kubernetes-Version Ihrer Cluster-Steuerebene mit der Kubernetes-Version Ihrer Knoten.

    • Rufen Sie die Kubernetes-Version Ihrer Cluster-Steuerebene ab.

      kubectl version
    • Holen Sie sich die Kubernetes-Version Ihrer Knoten. Dieser Befehl gibt alle selbstverwalteten und verwalteten Amazon-EC2- und Fargate-Knoten zurück. Jeder Fargate-Pod wird als eigener Knoten aufgeführt.

      kubectl get nodes

    Bevor Sie eine Steuerebene auf eine neue Kubernetes-Version aktualisieren, muss die Kubernetes-Nebenversion der verwalteten und Fargate-Knoten in Ihrem Cluster mit der Version der aktuellen Version Ihrer Steuerebene übereinstimmen. Wenn auf Ihrer Kontrollebene beispielsweise Version ausgeführt wird 1.29 und auf einem Ihrer Knoten Version ausgeführt wird1.28, müssen Sie Ihre Knoten auf Version aktualisieren, 1.29 bevor Sie Ihre Kontrollebene auf 1.30 aktualisieren. Wir empfehlen außerdem, dass Sie Ihre selbstverwalteten Knoten auf dieselbe Version wie Ihre Steuerebene aktualisieren, bevor Sie die Steuerebene aktualisieren. Weitere Informationen finden Sie unter Aktualisieren einer verwalteten Knotengruppe und Aktualisierungen des selbstverwalteten Worker-Knotens. Wenn Sie Fargate-Knoten mit einer Nebenversion haben, die niedriger als die Version der Steuerebene ist, löschen Sie zuerst den Pod, der durch den Knoten dargestellt wird. Aktualisieren Sie dann Ihre Steuerebene. Alle verbleibenden Pods werden auf die neue Version aktualisiert, nachdem Sie sie neu bereitgestellt haben.

  2. Wenn die Kubernetes-Version, mit der Sie Ihren Cluster ursprünglich eingerichtet haben, Kubernetes 1.25 oder eine neuere war, überspringen Sie diesen Schritt.

    Der Zugangscontroller für die Pod-Sicherheitsrichtlinie ist auf Amazon-EKS-Clustern standardmäßig aktiviert. Stellen Sie vor der Aktualisierung Ihres Clusters sicher, dass die richtigen Pod-Sicherheitsrichtlinien vorhanden sind. Dies dient dazu, potenzielle Sicherheitsprobleme zu vermeiden. Sie können die Standardrichtlinie mit dem Befehl kubectl get psp eks.privileged überprüfen.

    kubectl get psp eks.privileged

    Wenn die folgende Fehlermeldung angezeigt wird, lesen Sie Amazon-EKS-Pod-Standardsicherheitsrichtlinie, bevor Sie fortfahren.

    Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
  3. Wenn die Kubernetes-Version, mit der Sie Ihren Cluster ursprünglich eingerichtet haben, Kubernetes 1.18 oder eine neuere war, überspringen Sie diesen Schritt.

    Möglicherweise müssen Sie einen eingestellten Begriff aus Ihrem CoreDNS-Manifest entfernen.

    1. Überprüfen Sie, ob Ihr CoreDNS-Manifest eine Zeile enthält, die nur das Wort upstream enthält.

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      Wenn keine Ausgabe zurückgegeben wird, bedeutet dies, dass Ihr Manifest die Zeile nicht enthält. In diesem Fall überspringen Sie den nächsten Schritt. Wenn das Wort upstream zurückgegeben wird, müssen Sie die Zeile entfernen.

    2. Entfernen Sie in der configmap-Datei die Zeile am oberen Rand der Datei, die nur das Wort upstream enthält. Ändern Sie sonst nichts in der Datei. Nachdem die Zeile entfernt wurde, speichern Sie die Änderungen.

      kubectl edit configmap coredns -n kube-system -o yaml
  4. Aktualisieren Sie Ihren Cluster mit eksctl AWS Management Console, dem AWS CLI oder.

    Wichtig
    • Wenn Sie auf Version 1.23 aktualisieren und in Ihrem Cluster Amazon-EBS-Volumes verwenden, müssen Sie zur Vermeidung von Workload-Unterbrechungen den CSI-Treiber von Amazon EBS im Cluster installieren, bevor Sie den Cluster auf die Version 1.23 aktualisieren. Weitere Informationen finden Sie unter Kubernetes1.23 und Amazon-EBS-CSI-Treiber.

    • Die Kubernetes-Versionen 1.24 und höher nutzen containerd als standardmäßige Container-Laufzeit. Wenn Sie zur Laufzeit containerd wechseln und Fluentd bereits für Container Insights konfiguriert ist, müssen Sie vor der Aktualisierung des Clusters Fluentd zu Fluent Bit migrieren. Die Fluentd-Parser sind so konfiguriert, dass sie nur Protokollnachrichten im JSON-Format analysieren. Im Gegensatz zu dockerd enthält die Container-Laufzeit containerd Protokollnachrichten, die sich nicht im JSON-Format befinden. Wenn Sie nicht zu Fluent Bit migrieren, erzeugen einige der konfigurierten Fluentd's-Parser eine große Anzahl von Fehlern im Container Fluentd. Weitere Informationen zur Migration finden Sie unter Fluent BitSo einrichten, dass Protokolle DaemonSet an Logs gesendet werden CloudWatch .

    • Da Amazon EKS eine hoch verfügbare Steuerebene ausführt, dürfen Sie jeweils nur um eine Unterversion aktualisieren. Weitere Informationen zu dieser Anforderung finden Sie unter Kubernetes-Version und Version-Skew-Supportrichtlinie. Angenommen, Ihre aktuelle Cluster-Version ist Version 1.28 und Sie möchten sie auf Version 1.30 aktualisieren. Sie müssen zuerst Ihren Version 1.28-Cluster auf Version 1.29 und dann Ihren Version 1.29-Cluster auf Version 1.30 aktualisieren.

    • Überprüfen Sie den Versionsunterschied zwischen Kubernetes kube-apiserver und kubelet auf Ihren Knoten.

      • Ab der Kubernetes-Version 1.28 kann kubelet bis zu drei Nebenversionen älter sein als kube-apiserver. Weitere Informationen finden Sie in der Richtlinie zum Unterschied bei der Kubernetes-Upstream-Version.

      • Wenn das kubelet Ihrer verwalteten Knoten und Ihrer Fargate-Knoten mindestens über die Kubernetes-Version 1.25 verfügt, können Sie Ihren Cluster um bis zu drei Versionen aktualisieren, ohne die kubelet-Version zu aktualisieren. Wenn das kubelet also beispielsweise über die Version 1.25 verfügt, können Sie die Version Ihres Amazon EKS-Clusters von 1.25 auf1.26, auf 1.27 und auf 1.28 aktualisieren und für kubelet die Version 1.25 beibehalten.

      • Wenn das kubelet Ihrer verwalteten Knoten und Ihrer Fargate-Knoten über die Kubernetes-Version 1.24 oder über eine ältere Version verfügt, darf es maximal zwei Nebenversionen älter sein als kube-apiserver. Anders ausgedrückt: Wenn das kubelet über die Version 1.24 oder über eine ältere Version verfügt, können Sie Ihren Cluster nur um bis zu Versionen aktualisieren. Wenn das kubelet also beispielsweise über die Version 1.21 verfügt, können Sie die Version Ihres Amazon EKS-Clusters von 1.21 auf1.22 und auf 1.23 aktualisieren. Es ist aber nicht möglich, den Cluster auf 1.24 zu aktualisieren, solange kubelet über die Version 1.21 verfügt.

    • Vergewissern Sie sich daher vor dem Starten eines Updates, dass das kubelet auf Ihren Knoten die gleiche Kubernetes-Version hat wie Ihre Steuerebene.

    • Wenn Ihr Cluster mit einer Version des Amazon VPC CNI plugin for Kubernetes konfiguriert ist, die älter ist als 1.8.0, empfehlen wir, dass Sie das Plugin auf die neueste Version aktualisieren, bevor Sie Ihren Cluster aktualisieren. Informationen zum Aktualisieren des Plugins finden Sie unter Arbeiten mit dem Amazon VPC CNI plugin for Kubernetes-Amazon-EKS-Add-on.

    • Wenn Sie Ihren Cluster auf Version 1.25 oder höher aktualisieren und den AWS Load Balancer Controller in Ihrem Cluster bereitgestellt haben, aktualisieren Sie den Controller auf Version 2.4.7 oder höher, bevor Sie Ihre Cluster-Version auf 1.25 aktualisieren. Weitere Informationen finden Sie in den Kubernetes1,25-Versionshinweisen.

    eksctl

    Für diesen Vorgang ist eksctl Version 0.183.0 oder höher erforderlich. Sie können Ihre -Version mit dem folgenden Befehl überprüfen:

    eksctl version

    Eine Installations- und Aktualisierungsanleitung für eksctl finden Sie in der Dokumentation zu eksctl unter Installation.

    Aktualisieren Sie die Kubernetes-Version Ihrer Amazon-EKS-Steuerebene. Ersetzen Sie my-cluster mit Ihrem Clusternamen. Ersetzen Sie 1.30 durch die von Amazon EKS unterstützte Versionsnummer, auf die Sie Ihren Cluster aktualisieren möchten. Eine Liste der unterstützten Versionsnummern finden Sie unter Kubernetes-Versionen für Amazon EKS.

    eksctl upgrade cluster --name my-cluster --version 1.30 --approve

    Die Aktualisierung dauert einige Minuten.

    AWS Management Console
    1. Öffnen Sie die Amazon-EKS-Konsole unter https://console.aws.amazon.com/eks/home#/clusters.

    2. Wählen Sie den Namen des zu aktualisierenden Amazon-EKS-Clusters aus und klicken Sie dann auf Cluster-Version aktualisieren.

    3. Wählen Sie unter Kubernetes version (-Version) die Version aus, auf die Sie den Cluster aktualisieren möchten, und klicken Sie auf Update (Aktualisieren).

    4. Geben Sie als Cluster name (Clustername) den Namen Ihres Clusters ein und klicken Sie auf Confirm (Bestätigen).

      Die Aktualisierung dauert einige Minuten.

    AWS CLI
    1. Aktualisieren Sie Ihren Amazon-EKS-Cluster mit dem AWS CLI -Befehl. Ersetzen Sie das example values durch Ihr eigenes. Ersetzen Sie 1.30 durch die von Amazon EKS unterstützte Versionsnummer, auf die Sie Ihren Cluster aktualisieren möchten. Eine Liste der unterstützten Versionsnummern finden Sie unter Kubernetes-Versionen für Amazon EKS.

      aws eks update-cluster-version --region region-code --name my-cluster --kubernetes-version 1.30

      Eine Beispielausgabe sieht wie folgt aus.

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "InProgress",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.30"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
    2. Überwachen Sie den Status Ihres Cluster-Updates mit dem folgenden Befehl. Verwenden Sie den Clusternamen und die Update-ID, die der vorherige Befehl zurückgegeben hat. Wenn der Status Successful angezeigt wird, ist das Update abgeschlossen. Die Aktualisierung dauert einige Minuten.

      aws eks describe-update --region region-code --name my-cluster --update-id b5f0ba18-9a87-4450-b5a0-825e6e84496f

      Eine Beispielausgabe sieht wie folgt aus.

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "Successful",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.30"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
  5. Nachdem Ihre Cluster-Aktualisierung abgeschlossen wurde, aktualisieren Sie Ihre Knoten auf dieselbe Kubernetes-Nebenversion wie Ihr aktualisierter Cluster. Weitere Informationen finden Sie unter Aktualisierungen des selbstverwalteten Worker-Knotens und Aktualisieren einer verwalteten Knotengruppe. Alle neuen Pods, die auf Fargate gestartet werden, verfügen über eine kubelet-Version, die Ihrer Cluster-Version entspricht. Bestehende Fargate-Pods werden nicht geändert.

  6. (Optional) Wenn Sie den Kubernetes Cluster Autoscaler in Ihrem Cluster bereitgestellt haben, bevor Sie den Cluster aktualisiert haben, aktualisieren Sie den Cluster Autoscaler auf die neueste Version, die der Kubernetes-Haupt- und Nebenversion entspricht, auf die Sie aktualisiert haben.

    1. Öffnen Sie die Seite Cluster Autoscaler releases in einem Webbrowser und suchen Sie die neuste Cluster Autoscaler-Version, die der Haupt- und Nebenversion Ihres Kubernetes-Clusters entspricht. Wenn beispielsweise die Kubernetes-Version Ihres Clusters 1.30 lautet, suchen Sie die neueste Cluster Autoscaler-Version, die mit 1.30 beginnt. Notieren Sie die semantische Versionsnummer (z. B. 1.30.n) für diese Version, um sie im nächsten Schritt zu verwenden.

    2. Legen Sie das Cluster Autoscaler-Abbild-Tag mit dem folgenden Befehl auf die Version fest, die Sie im vorherigen Schritt notiert haben. Ersetzen Sie ggf. 1.30.n durch Ihren eigenen Wert.

      kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.n
  7. (Nur Cluster mit GPU-Knoten) Wenn Ihr Cluster über Knoten-Gruppen mit GPU-Unterstützung (z. B. p3.2xlarge) verfügt, müssen Sie das NVIDIA-Geräte-Plugin für Kubernetes DaemonSet auf Ihrem Cluster aktualisieren. Ersetzen Sie vX.X.X mit Ihrer gewünschten Nvidia/K8S-Geräte-Plugin-Version, bevor Sie den folgenden Befehl ausführen.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/nvidia-device-plugin.yml
  8. Aktualisieren Sie die Amazon VPC CNI plugin for Kubernetes, CoreDNS und kube-proxy Add-ons. Wir empfehlen, die Add-Ons auf die Mindestversionen zu aktualisieren, die unter Servicekonto-Tokens aufgeführt sind.

    • Wenn Sie Amazon-EKS-Add-Ons verwenden, wählen Sie Clusters (Cluster) in der Amazon-EKS-Konsole und dann im linken Navigationsbereich den Namen des Clusters aus, den Sie aktualisiert haben. In der Konsole werden Benachrichtigungen angezeigt. Diese informieren Sie darüber, dass für jedes Add-On, für das eine Aktualisierung verfügbar ist, eine neue Version verfügbar ist. Um ein Add-on zu aktualisieren, wählen Sie die Registerkarte Add-ons aus. Wählen Sie in einem der Felder für ein Add-on, für das eine Aktualisierung verfügbar ist, Jetzt aktualisieren aus, wählen Sie eine verfügbare Version aus, und wählen Sie dann Aktualisieren aus.

    • Alternativ können Sie das AWS CLI oder verwenden, um Add-Ons eksctl zu aktualisieren. Weitere Informationen finden Sie unter Aktualisieren eines Add-Ons.

  9. Sofern erforderlich, aktualisieren Sie Ihre Version von kubectl. Sie müssen eine kubectl-Version verwenden, die nur in der Minor-Version von Ihrer Amazon–EKS-Cluster-Steuerebene abweicht. Beispielsweise sollte ein 1.29-kubectl-Client mit Kubernetes-, 1.28-, 1.29- und 1.30-Clustern funktionieren. Sie können Ihre aktuell installierte Version mit dem folgenden Befehl überprüfen.

    kubectl version --client