Die automatische Reparatur von Knoten überwacht kontinuierlich den Zustand jedes Knotens in einem Knotenpool. Wenn ein Knoten fehlerhaft wird, wird er durch die automatische Knotenreparatur automatisch repariert. Diese Funktion verringert die Wahrscheinlichkeit von Clusterunterbrechungen und Leistungseinbußen und minimiert den Bedarf an manueller Wartung Ihrer Cluster.
Sie können die automatische Knotenreparatur aktivieren, wenn Sie einen Knotenpool erstellen oder aktualisieren. Sie aktivieren oder deaktivieren diese Funktion für Knotenpools und nicht für einzelne Knoten.
Fehlerhafte Knotenbedingungen
Bei der automatischen Knotenreparatur wird der Systemstatus jedes Knotens geprüft, um festzustellen, ob eine Reparatur erforderlich ist. Ein Knoten mit dem Status Ready
wird als fehlerfrei erachtet.
Andernfalls werden Reparaturen eingeleitet, wenn der Knoten über einen bestimmten Zeitraum hinweg wiederholt einen fehlerhaften Status meldet.
Ein fehlerhafter Status kann durch den Status NotReady
entstehen, der bei aufeinanderfolgenden Prüfungen über einen Zeitraum von etwa 15 Minuten erkannt wird. Alternativ kann ein fehlerhafter Status auch durch einen über einen Zeitraum von etwa 30 Minuten festgestellten Mangel an Speicherplatz auf dem Bootlaufwerk verursacht werden.
Mit dem Befehl kubectl get nodes
können Sie die Zustandssignale Ihres Knotens jederzeit manuell prüfen.
Strategien für die Knotenreparatur
Die automatische Reparatur von Knoten folgt bestimmten Strategien, um sowohl die allgemeine Integrität des Clusters als auch die Verfügbarkeit von Anwendungen während des Reparaturvorgangs zu gewährleisten. In diesem Abschnitt wird beschrieben, wie die Funktion zur automatischen Knotenreparatur PodDisruptionBudget
-Konfigurationen berücksichtigt, die Pod Termination
Grace Period
respektiert und andere Maßnahmen ergreift, um Unterbrechungen des Clusters bei der Reparatur von Knoten zu minimieren.
PodDisruptionBudget
für 30 Minuten ehren
Wenn ein Knoten repariert werden muss, wird er nicht sofort entleert und neu erstellt. Stattdessen berücksichtigt die Funktion zur automatischen Knotenreparatur PodDisruptionBudget-Konfigurationen (PDB) bis zu 30 Minuten lang. Danach werden alle Pods auf dem Knoten gelöscht. Eine PDB-Konfiguration definiert unter anderem die Mindestanzahl von Replikaten eines bestimmten Pods, die zu einem bestimmten Zeitpunkt verfügbar sein müssen.
Durch die Einhaltung von PodDisruptionBudget
für etwa 30 Minuten bietet die automatische Knotenreparatur die Möglichkeit, Pods sicher neu zu planen und auf andere fehlerfreie Knoten im Cluster zu verteilen. So kann die gewünschte Verfügbarkeit der Anwendung während des Reparaturvorgangs aufrechterhalten werden.
Nach Ablauf des 30-minütigen Zeitlimits wird die automatische Knotenreparatur mit dem Reparaturvorgang fortgesetzt, auch wenn dadurch die PodDisruptionBudget
verletzt wird. Ohne Zeitlimit könnte der Reparaturvorgang auf unbestimmte Zeit ins Stocken geraten, wenn die PodDisruptionBudget
-Konfiguration die für eine Reparatur erforderlichen Entfernungen verhindert.
Kulanzzeitraum für die Beendigung von Pods einhalten
Die automatische Knotenreparatur berücksichtigt auch einen Kulanzzeitraum für die Pod-Beendigung von etwa 30 Minuten. Der Kulanzzeitraum für die Pod-Beendigung bietet Pods ein Zeitfenster für ein ordnungsgemäßes Herunterfahren während der Beendigung. Während der Kulanzfrist ist das Kubelet auf einem Knoten für die Ausführung von Bereinigungsaufgaben und die Freigabe von Ressourcen verantwortlich, die den Pods auf diesem Knoten zugeordnet sind. Die automatische Knotenreparatur gibt dem Kubelet bis zu 30 Minuten Zeit, um diese Bereinigung durchzuführen. Wenn die zugewiesenen 30 Minuten abgelaufen sind, wird der Knoten zwangsweise beendet, unabhängig davon, ob die Pods ordnungsgemäß beendet wurden.
Zusätzliche Strategien für die Knotenreparatur
Bei der automatischen Knotenreparatur werden auch die folgenden Strategien implementiert:
- Wenn mehrere Knoten repariert werden müssen, werden sie nacheinander repariert, um Störungen des Clusters zu begrenzen und Arbeitslasten zu schützen.
- Wenn Sie die automatische Knotenreparatur während des Reparaturvorgangs deaktivieren, werden laufende Reparaturen trotzdem fortgesetzt, bis der Reparaturvorgang erfolgreich ist oder fehlschlägt.
Automatische Knotenreparatur aktivieren und deaktivieren
Sie können die automatische Knotenreparatur aktivieren oder deaktivieren, wenn Sie einen Knotenpool erstellen oder aktualisieren. Sie aktivieren oder deaktivieren diese Funktion für Knotenpools und nicht für einzelne Knoten.
Automatische Reparatur für einen neuen Knotenpool aktivieren
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--instance-type INSTANCE_TYPE \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME" \
--enable-autorepair
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: Der Name, den Sie für Ihren Knotenpool auswählen. Führen Sie den Befehlgcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
aus, um die Namen Ihrer Knotenpools abzurufen.CLUSTER_NAME
: ist der Name des Clusters, an den der Knotenpool angehängt werden soll.INSTANCE_TYPE
: ist der gewünschte AWS-Maschineninstanztyp für diesen Knotenpool, z. B.m5.large
ROOT_VOLUME_SIZE
: ist die gewünschte Größe für das Root-Volume jedes Knotens in GbNODEPOOL_PROFILE
: ist das IAM-Instanzprofil für Knotenpool-VMsNODE_VERSION
: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. "1.32.4-gke.200")MIN_NODES
: ist die Mindestanzahl von Knoten, die der Knotenpool enthalten kann.MAX_NODES
: ist die maximale Anzahl an Knoten, die der Knotenpool enthalten darf.MAX_PODS_PER_NODE
: ist die maximale Anzahl von Pods, die auf einem einzelnen Knoten im Pool erstellt werden könnenGOOGLE_CLOUD_LOCATION
: der Name des Google Cloud-Standorts, von dem dieser Knotenpool verwaltet wird.NODEPOOL_SUBNET
ist die ID des Subnetzes, in dem der Knotenpool ausgeführt wird.- Es gibt keine Überschneidungen zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetzwerk des Knotenpools. Weitere Informationen zum Auswählen von Pod- und Dienst-IP-Bereichen für Ihren Cluster finden Sie unter CIDR-Bereiche für Ihren Cluster auswählen.
- Wenn sich dieses Subnetz außerhalb des primären CIDR-Blocks der VPC befindet, sind einige zusätzliche Schritte erforderlich. Weitere Informationen finden Sie unter Sicherheitsgruppen.
SSH_KEY_PAIR_NAME
ist der Name des AWS-SSH-Schlüsselpaars, das für den SSH-Zugriff erstellt wurde (optional).CONFIG_KMS_KEY_ARN
: ist der Amazon-Ressourcenname (ARN) des AWS KMS-Schlüssels, der Nutzerdaten verschlüsselt
Automatische Reparatur für einen vorhandenen Knotenpool aktivieren
Führen Sie den folgenden Befehl aus, um die automatische Knotenreparatur für einen vorhandenen Knotenpool zu aktivieren:
gcloud container aws node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--enable-autorepair
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: ein eindeutiger Name für Ihren Knotenpool, z. B.node-pool-1
CLUSTER_NAME
: der Name Ihres ClustersGOOGLE_CLOUD_LOCATION
: die Google Cloud Region, die Ihren Cluster verwaltet
Automatische Reparatur für einen vorhandenen Knotenpool deaktivieren
gcloud container aws node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--no-enable-autorepair
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: ein eindeutiger Name für Ihren Knotenpool, z. B.node-pool-1
CLUSTER_NAME
: der Name Ihres ClustersGOOGLE_CLOUD_LOCATION
: die Google Cloud Region, die Ihren Cluster verwaltet
Beachten Sie, dass GKE on AWS die automatische Knotenreparatur ordnungsgemäß deaktiviert. Wenn Sie die automatische Knotenreparatur für einen vorhandenen Knotenpool deaktivieren, startet GKE on AWS einen Vorgang zum Aktualisieren des Knotenpools. Der Vorgang wartet, bis alle vorhandenen Knotenreparaturen abgeschlossen sind, bevor er fortgesetzt wird.
Prüfen, ob die automatische Knotenreparatur aktiviert ist
Führen Sie den folgenden Befehl aus, um zu prüfen, ob die automatische Knotenreparatur aktiviert ist:
gcloud container aws node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: ein eindeutiger Name für Ihren Knotenpool, z. B.node-pool-1
CLUSTER_NAME
: der Name Ihres ClustersGOOGLE_CLOUD_LOCATION
: die Google Cloud Region, die Ihren Cluster verwaltet
Verlauf der Knotenreparatur
Mit dem folgenden Befehl können Sie sich den Verlauf der Reparaturen ansehen, die an einem Knotenpool durchgeführt wurden:
gcloud container aws operations list \
--location GOOGLE_CLOUD_LOCATION \
--filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME/awsNodePools/NODEPOOL_NAME
Ersetzen Sie Folgendes:
GOOGLE_CLOUD_LOCATION
: die unterstützte Google Cloud Region, die Ihren Cluster verwaltet, z. B.us-west1
PROJECT_ID
: Ihr Google Cloud ProjektCLUSTER_NAME
: der Name Ihres ClustersNODE_POOL_NAME
: ein eindeutiger Name für Ihren Knotenpool, z. B.node-pool-1
Zusammenfassung des Knotenpoolzustands
Nachdem Sie die automatische Knotenreparatur aktiviert haben, können Sie mit dem folgenden Befehl eine Zusammenfassung des Knotenpoolstatus generieren:
gcloud container aws node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
Eine Zusammenfassung für einen fehlerfreien Knotenpool sieht in etwa so aus:
{ "name": "some-np-name", "version": "some-version", "state": "RUNNING", ... "errors": [ { "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair." } ], }
Die Zusammenfassung des Knotenpoolstatus gibt Aufschluss über den aktuellen Status des Knotenpools. In diesem Beispiel enthält die Zusammenfassung eine Fehlermeldung, die besagt, dass einer der beiden Knoten im Knotenpool fehlerhaft ist. Außerdem wird gemeldet, dass derzeit keine Knoten repariert werden.