Wie plane ich eine Upgrade-Strategie für einen Amazon EKS-Cluster?
Wenn ich meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster aktualisiere, möchte ich die bewährten Methoden befolgen.
Kurzbeschreibung
Neue Kubernetes-Versionen können erhebliche Änderungen an Ihrem Amazon EKS-Cluster mit sich bringen. Nach dem Upgrade eines Clusters können Sie Ihren Cluster nicht mehr herabstufen. Wenn Sie auf eine neuere Kubernetes-Version aktualisieren, können Sie zu neuen Clustern migrieren, anstatt direkte Cluster-Upgrades durchzuführen. Wenn Sie sich für die Migration zu neuen Clustern entscheiden, können Ihnen Tools zur Sicherung und Wiederherstellung von Clustern wie Velero von VMware bei der Migration helfen. Weitere Informationen finden Sie unter Valero auf der GitHub-Website.
Aktuelle und frühere Versionen von Kubernetes, die für Amazon EKS verfügbar sind, finden Sie im Amazon EKS-Kubernetes-Veröffentlichungskalender.
Behebung
Vorbereitung auf ein Upgrade
Bevor Sie mit dem ClusterUpgrade beginnen, beachten Sie die folgenden Anforderungen:
- Amazon EKS benötigt bis zu fünf verfügbare IP-Adressen aus den Subnetzen, die Sie bei der Erstellung Ihres Clusters angegeben haben.
- Die Rolle und Sicherheitsgruppe für AWS Identity and Access Management (IAM) des Clusters müssen in Ihrem AWS-Konto vorhanden sein.
- Wenn Sie die Verschlüsselung von Geheimnissen aktivieren, muss die Cluster-IAM-Rolle über Schlüsselberechtigungen für AWS Key Management Service (AWS KMS) verfügen.
Überprüfen Sie die wichtigsten Updates für Amazon EKS und Kubernetes
Prüfen Sie alle dokumentierten Änderungen für die Upgrade-Version und notieren Sie sich alle erforderlichen Upgrade-Schritte. Beachten Sie auch alle Anforderungen oder Verfahren, die für von Amazon EKS verwaltete Cluster spezifisch sind.
In den folgenden Ressourcen finden Sie wichtige Updates für Amazon EKS-Cluster-Plattformversionen und Kubernetes-Versionen:
- Aktualisierung einer Amazon EKS-Cluster-Kubernetes-Version
- Amazon EKS-Kubernetes-Versionen
- Amazon EKS-Plattformversionen
Weitere Informationen zu Kubernetes-Upstream-Versionen und wichtigen Updates finden Sie in der folgenden Dokumentation:
- Kubernetes-Versionshinweise auf der Kubernetes-Website
- Änderungsprotokoll auf der GitHub-Website
Verstehen Sie die Kubernetes-Verfallsrichtlinie
Wenn eine API aktualisiert wird, ist die frühere API veraltet und wird schließlich entfernt. Um zu verstehen, warum APIs in einer neueren Version von Kubernetes möglicherweise veraltet sind, lesen Sie die Verfallsrichtlinie auf der Kubernetes-Website.
Um zu überprüfen, ob Sie veraltete API-Versionen in Ihrem Cluster verwenden, verwenden Sie Kube No Trouble (kubent) auf der GitHub-Website. Wenn Sie veraltete API-Versionen verwenden, aktualisieren Sie Ihre Workloads, bevor Sie Ihr Kubernetes Cluster aktualisieren.
Verwenden Sie das Plugin kubectl convert, um Kubernetes-Manifestdateien zwischen verschiedenen API-Versionen zu konvertieren. Weitere Informationen finden Sie unter Installieren des Kubectl Convert-Plugins auf der Kubernetes-Website.
Was Sie bei einem Kubernetes-Upgrade erwartet
Wenn Sie Ihren Cluster aktualisieren, startet Amazon EKS neue API-Serverknoten mit der aktualisierten Kubernetes-Version, um die vorhandenen Knoten zu ersetzen. Wenn eine dieser Prüfungen fehlschlägt, setzt Amazon EKS die Infrastrukturbereitstellung zurück und Ihr Cluster verbleibt auf der vorherigen Kubernetes-Version. Dieses Rollback wirkt sich jedoch nicht auf laufende Anwendungen aus, und Sie können bei Bedarf alle Cluster wiederherstellen. Während des Upgrade-Vorgangs kann es zu geringfügigen Betriebsunterbrechungen kommen.
Rüsten Sie die Steuerungsebene und die Datenebene auf
Um einen Amazon EKS-Cluster zu aktualisieren, müssen Sie zwei Hauptkomponenten aktualisieren: die Steuerungsebene und die Datenebene. Beachten Sie beim Upgrade dieser Komponenten die folgenden Überlegungen.
Direkte Amazon EKS-Cluster-Upgrades
Für direkte Upgrades können Sie nur auf die nächsthöhere Kubernetes-Nebenversion aktualisieren. Wenn es mehrere Versionen zwischen Ihrer aktuellen Cluster-Version und der Zielversion gibt, müssen Sie nacheinander auf jede Version aktualisieren. Führen Sie für jedes direkte Kubernetes-Cluster-Upgrade die folgenden Aufgaben aus:
- Aktualisieren Sie Ihre Kubernetes-Manifeste und aktualisieren Sie nach Bedarf veraltete oder entfernte APIs.
- Aktualisieren Sie die Cluster-Steuerungsebene.
- Aktualisieren Sie die Knoten in Ihrem Cluster.
- Aktualisieren Sie Ihre Kubernetes-Add-Ons und benutzerdefinierten Controller nach Bedarf.
Weitere Informationen finden Sie unter Planung und Ausführung von Kubernetes-Versionsupgrades in Amazon EKS unter Planung von Kubernetes-Upgrades mit Amazon EKS. Weitere Informationen finden Sie auf der GitHub Website unter Bewährte Methoden für Cluster Upgrades.
Migration von Amazon EKS-Clustern in Blau/Grün oder Canary
Eine Upgrade-Strategie in Blau/Grün oder Canary kann komplexer sein, aber die Strategie ermöglicht Upgrades mit einfacher Rollback-Funktion und ohne Ausfallzeiten. Informationen zu einem Blau/Grün- oder Canary-Upgrade finden Sie unter Migration von Amazon EKS-Clustern in Blau/Grün oder Canary für zustandslose ArgoCD-Workloads.
**Aktualisieren Sie die von Amazon EKS verwalteten Knotengruppen **
Wichtig: Das Kubelet eines Knotens kann nicht neuer als kube-apiserver sein. Außerdem können es nicht mehr als zwei Nebenversionen vor kube-apiserver sein. Nehmen wir zum Beispiel an, kube-apiserver hat Version 1.24. In diesem Fall wird ein Kubelet nur in den Versionen 1.24, 1.23 und 1.22 unterstützt.
Gehen Sie wie folgt vor, um Ihre verwalteten Knotengruppen vollständig zu aktualisieren:
- Aktualisieren Sie die Komponenten der Cluster-Steuerungsebene von Amazon EKS auf die neueste Version.
- Aktualisieren Sie Ihre Knoten in der verwalteten Knotengruppe.
Migrieren Sie zu von Amazon EKS verwalteten Knotengruppen
Wenn Sie selbstverwaltete Knotengruppen verwenden, können Sie Ihre Workload ohne Ausfallzeiten auf von Amazon EKS verwaltete Knotengruppen migrieren. Weitere Informationen finden Sie unter Nahtloses Migrieren von Workloads von einer selbstverwalteten EKS-Knotengruppe zu EKS-verwalteten Knotengruppen.
Identifizieren und aktualisieren Sie Downstream-Abhängigkeiten (Add-Ons)
Cluster enthalten häufig externe Produkte wie Eingangskontrollen, Continuous-Delivery-Systeme, Überwachungstools und andere Workflows. Wenn Sie Ihren Amazon EKS-Cluster aktualisieren, müssen Sie auch die Add-Ons und Tools von Drittanbietern aktualisieren. Vergewissern Sie sich, dass Sie verstehen, wie Add-Ons mit Ihrem Cluster funktionieren und wie sie aktualisiert werden.
Hinweis: Es hat sich bewährt, verwaltete Add-Ons anstelle von selbstverwalteten Add-Ons zu verwenden.
Sehen Sie sich die folgenden Beispiele gängiger Add-Ons und die entsprechende Upgrade-Dokumentation an:
- Amazon VPC CNI: Die empfohlene Version des Amazon VPC CNI-Add-Ons, das für jede Cluster-Version verwendet werden kann, finden Sie unter Arbeiten mit dem Amazon VPC CNI-Plugin für Kubernetes Amazon EKS-Add-On. Weitere Informationen finden Sie unter Aktualisieren des aws-node-Daemonset zur Verwendung von IRSA auf der GitHub-Website.
- Selbstverwaltetes Kube-Proxy-Add-On: Aktualisieren Sie für jede Amazon EKS-Cluster-Version auf die neueste verfügbare Kube Proxy Container Image-Version. Weitere Informationen finden Sie unter Arbeiten mit dem Kubernetes-Add-On Kube-Proxy.
- CoreDNS: Aktualisieren Sie für jede Amazon EKS-Cluster-Version auf die neueste verfügbare CoreDNS Container Image-Version. Weitere Informationen finden Sie unter Aktualisieren des selbstverwalteten Add-Ons.
- AWS Load Balancer Controller: Versionen 2.5.0 oder höher von AWS Load Balancer Controller erfordern Kubernetes-Versionen 1.22 oder höher. Weitere Informationen finden Sie unter Versionen von AWS Load Balancer Controller auf der GitHub-Website. Informationen zur Installation finden Sie unter Installation des AWS Load Balancer Controller-Add-Ons.
- Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI)-Treiber: Versionen 1.25.0 oder höher des Amazon EBS CSI-Treibers erfordern Kubernetes-Versionen 1.23 oder höher. Weitere Informationen finden Sie unter Amazon EBS CSI-Treiberversionen auf der GitHub-Website. Informationen zur Installation und zum Upgrade finden Sie unter Verwalten des Amazon EBS CSI-Treibers als Amazon EKS-Add-On.
- **Amazon Elastic File System (Amazon EFS) Container Storage Interface (CSI)-Treiber:**Versionen 1.5.8 oder höher des Amazon EFS CSI-Treibers erfordern Kubernetes-Versionen 1.22 oder höher. Weitere Informationen finden Sie unter Amazon EFS CSI-Treiberversionen auf der GitHub-Website. Informationen zur Installation und zum Upgrade finden Sie unter Amazon EFS CSI-Treiber.
Aktualisieren der AWS Fargate-Knoten
Um einen Fargate-Knoten zu aktualisieren, löschen Sie den Pod, den der Knoten repräsentiert. Stellen Sie dann, nachdem Sie Ihre Steuerungsebene aktualisiert haben, den Pod erneut bereit. Alle neuen Pods, die Sie auf Fargate starten, haben eine Kubelet-Version, die Ihrer Cluster-Version entspricht. Bestehende Fargate-Pods werden nicht geändert.
Hinweis: Um die Sicherheit der Fargate-Pods zu gewährleisten, muss Amazon EKS sie regelmäßig patchen. Amazon EKS versucht, die Pods so zu aktualisieren, dass die Auswirkungen minimiert werden. Wenn Pods jedoch nicht erfolgreich entfernt werden können, löscht Amazon EKS sie. Informationen zur Minimierung von Unterbrechungen finden Sie unter Fargate OS-Patching.
Aktualisieren gruppenloser Knoten, die Karpenter erstellt
Wenn Sie einen Wert für TTLSecondsUntilExpired festlegen, aktiviert dieser Wert den Verfall des Knotens. Nachdem Knoten das definierte Alter in Sekunden erreicht haben, löscht Amazon EKS sie. Dieses Löschen erfolgt auch dann, wenn die Knoten verwendet werden. Dieser Prozess ermöglicht es Ihnen, Knoten durch neu bereitgestellte Instances zu ersetzen und sie daher zu aktualisieren. Wenn ein Knoten ersetzt wird, verwendet Karpenter die neuesten für Amazon EKS optimierten AMIs. Weitere Informationen finden Sie unter Unterbrechungen auf der Karpenter-Website.
Das folgende Beispiel zeigt einen Knoten, für den die Bereitstellung mit TTLSecondsUntilExpired aufgehoben und dann durch eine aktualisierte Instance ersetzt wurde:
apiVersion: karpenter.sh/v1alpha5kind: Provisioner metadata: name: default spec: requirements: - key: karpenter.sh/capacity-type # optional, set to on-demand by default, spot if both are listed operator: In values: ["spot"] limits: resources: cpu: 1000 # optional, recommended to limit total provisioned CPUs memory: 1000Gi ttlSecondsAfterEmpty: 30 # optional, but never scales down if not set ttlSecondsUntilExpired: 2592000 # optional, nodes are recycled after 30 days but never expires if not set provider: subnetSelector: karpenter.sh/discovery/CLUSTER_NAME: '*' securityGroupSelector: kubernetes.io/cluster/CLUSTER_NAME: '*'
Hinweis: Karpenter fügt diesem Wert nicht automatisch Jitter hinzu. Wenn Sie in kurzer Zeit mehrere Instances erstellen, laufen die Instances fast zur gleichen Zeit ab. Um übermäßige Workload-Unterbrechungen zu vermeiden, definieren Sie ein Budget für Pod-Unterbrechungen. Weitere Informationen finden Sie auf der Kubernetes-Website unter Angeben eines Unterbrechungsbudgets für Ihre Anwendung.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr