Hilf 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.
Anwendungen auf eine neue Knotengruppe migrieren
Dieses Thema beschreibt Hinweise zum Erstellen einer neuen Knoten-Gruppe, zum ordnungsgemäßen Migrieren Ihrer vorhandenen Anwendungen zur neuen Gruppe und zum Entfernen der alten Knoten-Gruppe aus Ihrem Cluster. Sie können zu einer neuen Knotengruppe migrieren, indem Sie eksctl
oder AWS Management Console benutzen.
- eksctl
-
So migrieren Sie Ihre Anwendungen mit
eksctl
zu einer neuen Worker-Knoten-GruppeWeitere Informationen zur Verwendung von eksctl für die Migration finden Sie in der Dokumentation unter Unmanaged Nodegroups
. eksctl
Für diesen Vorgang ist
eksctl
Version0.191.0
oder höher erforderlich. Sie können Ihre -Version mit dem folgenden Befehl überprüfen:eksctl version
Eine Installations- und Upgrade-Anleitung für
eksctl
finden Sie in der Dokumentation zueksctl
unter Installation. Anmerkung
Dieses Verfahren funktioniert nur für Cluster, die mit
eksctl
erstellt wurden.-
Rufen Sie den Namen Ihrer vorhandenen Knotengruppen ab und ersetzen Sie
durch Ihren Clusternamen.my-cluster
eksctl get nodegroups --cluster=
my-cluster
Eine Beispielausgabe sieht wie folgt aus.
CLUSTER NODEGROUP CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID default standard-nodes 2019-05-01T22:26:58Z 1 4 3 t3.medium ami-05a71d034119ffc12
-
Starten Sie eine neue Knotengruppe mit
eksctl
mit dem folgenden Befehl. Ersetzen Sie im Befehl alle
mit deinen eigenen Werten. Die Versionsnummer darf nicht später sein als Kubernetes Version für Ihre Steuerungsebene. Außerdem darf es nicht mehr als zwei Nebenversionen vor der Kubernetes Version für Ihre Steuerebene. Es wird empfohlen, dieselbe Version wie die Steuerebene zu verwenden.Beispielwert
Wir empfehlen das Blockieren Pod Zugriff auf, IMDS wenn die folgenden Bedingungen zutreffen:
Sie planen, all Ihren IAM Rollen zuzuweisen Kubernetes Dienstkonten, sodass Pods verfügen nur über die Mindestberechtigungen, die sie benötigen.
Nein Pods im Cluster benötigen aus anderen Gründen Zugriff auf den EC2 Amazon-Instance-Metadatenservice (IMDS), z. B. um die aktuelle AWS-Region Version abzurufen.
Weitere Informationen finden Sie unter Beschränken Sie den Zugriff auf das Instance-Profil, das dem Worker-Knoten zugewiesen ist
. Um zu blockieren Pod Fügen Sie dem IMDS folgenden Befehl die
--disable-pod-imds
Option hinzu, um Zugriff auf zu erhalten.Anmerkung
Weitere verfügbare Flags und deren Beschreibungen finden Sie unterhttps://eksctl.io/
. eksctl create nodegroup \ --cluster
my-cluster
\ --version1.31
\ --namestandard-nodes-new
\ --node-typet3.medium
\ --nodes3
\ --nodes-min1
\ --nodes-max4
\ --managed=false -
Wenn der vorherige Befehl abgeschlossen ist, bestätigen Sie mit folgendem Befehl, dass alle Ihre Worker-Knoten den
Ready
-Status erreicht haben:kubectl get nodes
-
Löschen Sie die ursprüngliche Knotengruppe mit dem folgenden Befehl. Ersetzen Sie im Befehl alle
mit Ihren Cluster- und Knotengruppennamen:example value
eksctl delete nodegroup --cluster
my-cluster
--namestandard-nodes-old
-
- AWS Management Console and AWS CLI
-
Um Ihre Anwendungen mit dem AWS Management Console und zu einer neuen Knotengruppe zu migrieren AWS CLI
-
Starten Sie eine neue Knoten-Gruppe, indem Sie die unter Erstellen Sie selbstverwaltete Amazon Linux-Knoten beschriebenen Schritte ausführen.
-
Wenn Ihr Stack fertig erstellt wurde, wählen Sie ihn in der Konsole aus und klicken Sie auf Outputs (Ausgänge).
-
Notieren Sie das NodeInstanceRolefür die Knotengruppe, die erstellt wurde. Sie benötigen dies, um die neuen EKS Amazon-Knoten zu Ihrem Cluster hinzuzufügen.
Anmerkung
Wenn Sie Ihrer alten IAM Knotengruppenrolle zusätzliche IAM Richtlinien angehängt haben, fügen Sie dieselben Richtlinien Ihrer neuen IAM Knotengruppenrolle hinzu, um diese Funktionalität in der neuen Gruppe beizubehalten. Dies gilt für Sie, wenn Sie Berechtigungen für das hinzugefügt haben Kubernetes Cluster Autoscaler
, zum Beispiel. -
Aktualisieren Sie die Sicherheitsgruppen für beide Worker-Knoten-Gruppen, sodass sie miteinander kommunizieren können. Weitere Informationen finden Sie unter EKSAmazon-Sicherheitsgruppenanforderungen für Cluster anzeigen.
-
Notieren Sie die Sicherheitsgruppe IDs für beide Knotengruppen. Dies wird als NodeSecurityGroupWert in den AWS CloudFormation Stack-Ausgaben angezeigt.
Sie können die folgenden AWS CLI Befehle verwenden, um die Sicherheitsgruppe IDs aus den Stack-Namen abzurufen. In diesen Befehlen
oldNodes
steht der AWS CloudFormation Stack-Name für Ihren älteren Knotenstapel undnewNodes
der Name des Stacks, zu dem Sie migrieren. Ersetzen Sie jede
durch Ihre eigenen Werte.example value
oldNodes="
old_node_CFN_stack_name
" newNodes="new_node_CFN_stack_name
" oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) -
Fügen Sie Regeln für eingehenden Datenverkehr für jede Worker-Knoten-Sicherheitsgruppe hinzu, sodass sie voneinander Datenverkehr annehmen können.
Mit den folgenden AWS CLI Befehlen werden jeder Sicherheitsgruppe Regeln für eingehenden Datenverkehr hinzugefügt, die den gesamten Datenverkehr über alle Protokolle der anderen Sicherheitsgruppe zulassen. Diese Konfiguration ermöglicht Pods in jeder Knotengruppe, um miteinander zu kommunizieren, während Sie Ihre Arbeitslast in die neue Gruppe migrieren.
aws ec2 authorize-security-group-ingress --group-id $oldSecGroup \ --source-group $newSecGroup --protocol -1 aws ec2 authorize-security-group-ingress --group-id $newSecGroup \ --source-group $oldSecGroup --protocol -1
-
-
Bearbeiten Sie die
aws-auth
Configmap, um die neue Knoteninstanzrolle zuzuordnen. RBACkubectl edit configmap -n kube-system aws-auth
Fügen Sie einen neuen
mapRoles
-Eintrag für die neue Worker-Knoten-Gruppe hinzu. Wenn sich Ihr Cluster in den Ländern AWS GovCloud (USA-Ost) oder AWS GovCloud (US-West) befindet AWS-Regionen, ersetzen Sie ihn durch.arn:aws:
arn:aws-us-gov:
apiVersion: v1 data: mapRoles: | - rolearn:
ARN of instance role (not instance profile)
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes> - rolearn:arn:aws:iam::111122223333:role/nodes-1-16-NodeInstanceRole-U11V27W93CX5
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodesErsetzen Sie das ARN of instance role (not instance profile) Snippet durch den NodeInstanceRoleWert, den Sie in einem vorherigen Schritt aufgezeichnet haben. Speichern und schließen Sie dann die Datei, um die aktualisierte configmap anzuwenden.
-
Achten Sie auf den Status Ihrer Knoten und warten Sie, bis Ihre neuen Worker-Knoten Ihrem Cluster beigetreten sind und den Status
Ready
angenommen haben.kubectl get nodes --watch
-
(Optional) Wenn Sie das verwenden Kubernetes Cluster Autoscaler
: Skalieren Sie die Bereitstellung auf null (0) Replikate herunter, um widersprüchliche Skalierungsaktionen zu vermeiden. kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
-
Verwenden Sie den folgenden Befehl, um jeden der Knoten, die Sie mit
NoSchedule
entfernen möchten, mit einem Taint zu versehen. Das ist so neu Pods wurden auf den Knoten, die Sie ersetzen, weder geplant noch neu geplant. Weitere Informationen finden Sie unter Taints and Tolerationsim Kubernetes -Dokumentation. kubectl taint nodes
node_name
key=value:NoScheduleWenn Sie Ihre Knoten auf ein neues aktualisieren Kubernetes Mit dieser Version können Sie alle Knoten einer bestimmten Version identifizieren und manipulieren Kubernetes Version (in diesem Fall
1.29
) mit dem folgenden Codeausschnitt. Die Versionsnummer darf nicht später sein als Kubernetes Version Ihrer Steuerungsebene. Es können auch nicht mehr als zwei Nebenversionen vor der Kubernetes Version Ihrer Steuerebene. Es wird empfohlen, dieselbe Version wie die Steuerebene zu verwenden.K8S_VERSION=
1.29
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}") for node in ${nodes[@]} do echo "Tainting $node" kubectl taint nodes $node key=value:NoSchedule done -
Ermitteln Sie den DNS Anbieter Ihres Clusters.
kubectl get deployments -l k8s-app=kube-dns -n kube-system
Eine Beispielausgabe sieht wie folgt aus. Dieser Cluster verwendet CoreDNS zur DNS Lösung, aber Ihr Cluster kann
kube-dns
stattdessen zurückkehren):NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE coredns 1 1 1 1
31m
-
Wenn Ihre aktuelle Bereitstellung weniger als zwei Replikate ausführt, skalieren die Bereitstellung auf zwei Replikate. Ersetzen Sie
durchkubedns
, falls Ihre vorherige Befehlsausgabe dies stattdessen zurückgegeben hat.coredns
kubectl scale deployments/
coredns
--replicas=2 -n kube-system -
Lassen Sie die einzelnen Knoten, die Sie aus Ihrem Cluster entfernen möchten, mit dem folgenden Befehl sperren:
kubectl drain
node_name
--ignore-daemonsets --delete-local-dataWenn Sie Ihre Knoten auf ein neues aktualisieren Kubernetes Version, identifiziere und lösche alle Knoten einer bestimmten Kubernetes Version (in diesem Fall
) mit dem folgenden Codeausschnitt.1.29
K8S_VERSION=
1.29
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}") for node in ${nodes[@]} do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-local-data done -
Nachdem die alten Knoten entladen wurden, widerrufen Sie die Regeln für eingehenden Datenverkehr für Sicherheitsgruppen, die Sie zuvor autorisiert haben. Löschen Sie anschließend den AWS CloudFormation Stack, um die Instanzen zu beenden.
Anmerkung
Wenn Sie Ihrer alten IAM Knotengruppenrolle zusätzliche IAM Richtlinien angehängt haben, z. B. das Hinzufügen von Berechtigungen für Kubernetes Cluster Autoscaler
), trennen Sie diese zusätzlichen Richtlinien von der Rolle, bevor Sie Ihren Stack löschen können. AWS CloudFormation -
Heben Sie die Regeln für eingehenden Datenverkehr auf, die Sie zuvor für die Knoten-Sicherheitsgruppen erstellt haben. In diesen Befehlen
oldNodes
steht der AWS CloudFormation Stack-Name für Ihren älteren Knoten-Stack undnewNodes
der Name des Stacks, zu dem Sie migrieren.oldNodes="
old_node_CFN_stack_name
" newNodes="new_node_CFN_stack_name
" oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) aws ec2 revoke-security-group-ingress --group-id $oldSecGroup \ --source-group $newSecGroup --protocol -1 aws ec2 revoke-security-group-ingress --group-id $newSecGroup \ --source-group $oldSecGroup --protocol -1 Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation
. -
Wählen Sie Ihren alten Worker-Knoten-Stack aus.
-
Wählen Sie Delete (Löschen).
-
Wählen Sie im Bestätigungsdialogfeld Stack löschen Stack löschen aus.
-
-
Bearbeiten Sie die
aws-auth
Configmap, um die alte Knoteninstanzrolle aus zu entfernen. RBACkubectl edit configmap -n kube-system aws-auth
Löschen Sie den
mapRoles
-Eintrag für die alte Worker-Knoten-Gruppe. Wenn sich Ihr Cluster in den Ländern AWS GovCloud (USA-Ost) oder AWS GovCloud (US-West) befindet AWS-Regionen, ersetzen Sie ihn durch.arn:aws:
arn:aws-us-gov:
apiVersion: v1 data: mapRoles: | - rolearn:
arn:aws:iam::111122223333:role/nodes-1-16-NodeInstanceRole-W70725MZQFF8
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn:arn:aws:iam::111122223333:role/nodes-1-15-NodeInstanceRole-U11V27W93CX5
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes>Speichern und schließen Sie die Datei, um die aktualisierte configmap anzuwenden.
-
(Optional) Wenn Sie das verwenden Kubernetes Cluster Autoscaler
: Skalieren Sie die Bereitstellung auf ein Replikat zurück. Anmerkung
Außerdem müssen Sie Ihre neue Auto-Scaling-Gruppe (z. B.
k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/
) mit einem Tag versehen und den Befehl für die Cluster-Autoscaler-Bereitstellung so aktualisieren, dass er auf die neu getaggte Auto-Scaling-Gruppe verweist. Weitere Informationen finden Sie unter Clustermy-cluster
Autoscaler on. AWS kubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system
-
(Optional) Vergewissern Sie sich, dass Sie die neueste Version des VPCCNIAmazon-Plug-ins für Kubernetes
verwenden. Möglicherweise müssen Sie Ihre CNI Version aktualisieren, um die neuesten unterstützten Instance-Typen zu verwenden. Weitere Informationen finden Sie unter Zuweisen IPs zu Pods mit dem Amazon VPC CNI. -
Wenn Ihr Cluster
kube-dns
zur DNS Auflösung verwendet (siehe vorherigen Schritt), skalieren Sie diekube-dns
Bereitstellung auf ein Replikat.kubectl scale deployments/kube-dns --replicas=1 -n kube-system
-