Automatische Knotenreparatur

Die automatische Knotenreparatur überwacht kontinuierlich den Zustand jedes Knotens in einem Knotenpool. Wenn ein Knoten fehlerhaft wird, wird er von der automatischen Knotenreparatur automatisch repariert. Dieses Feature verringert die Wahrscheinlichkeit von Clusterausfällen und Leistungseinbußen und minimiert die Notwendigkeit einer manuellen Wartung Ihrer Cluster.

Sie können die automatische Knotenreparatur beim Erstellen oder Aktualisieren eines Knotenpools aktivieren. Beachten Sie, dass Sie dieses Feature für Knotenpools und nicht für einzelne Knoten aktivieren oder deaktivieren.

Fehlerhafte Knotenbedingungen

Die automatische Knotenreparatur prüft den Systemstatus jedes Knotens, um festzustellen, ob eine Reparatur erforderlich ist. Ein Knoten gilt als fehlerfrei, wenn er den Status Ready meldet. Andernfalls werden Reparaturen eingeleitet, wenn während eines bestimmten Zeitraums mehrmals ein fehlerhafter Status gemeldet wird.

Ein fehlerhafter Status kann aus dem Status NotReady entstehen, der bei aufeinanderfolgenden Prüfungen über einen Zeitraum von etwa 15 Minuten erkannt wird. Alternativ kann ein fehlerhafter Status das Ergebnis sein, wenn über einen Zeitraum von etwa 30 Minuten entleerter Speicherplatz auf dem Bootlaufwerk festgestellt wurde.

Mit dem Befehl kubectl get nodes können Sie die Zustandssignale des Knotens jederzeit manuell prüfen.

Strategien zur Knotenreparatur

Bei der automatischen Knotenreparatur werden bestimmte Strategien angewendet, um sowohl den Gesamtzustand des Clusters als auch die Verfügbarkeit der Anwendungen während des Reparaturprozesses sicherzustellen. In diesem Abschnitt wird beschrieben, wie die automatische Knotenreparatur PodDisruptionBudget-Konfigurationen anerkennt, Pod Termination Grace Period berücksichtigt und andere Maßnahmen ergreift, um Clusterunterbrechungen beim Reparieren von Knoten zu minimieren.

PodDisruptionBudget 30 Minuten lang ehren

Wenn ein Knoten repariert werden muss, wird er nicht sofort per Drain beendet und neu erstellt. Stattdessen werden von der automatischen Knotenreparatur bis zu 30 Minuten lang PodDisruptionBudget-Konfigurationen (PDB) berücksichtigt. 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 Berücksichtigung 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. Dies trägt dazu bei, das gewünschte Maß an Anwendungsverfügbarkeit während des Reparaturprozesses aufrechtzuerhalten.

Nach Ablauf des Zeitlimits von 30 Minuten wird die automatische Knotenreparatur mit dem Reparaturprozess fortgesetzt, auch wenn dies einen Verstoß gegen PodDisruptionBudget bedeutet. Ohne Zeitlimit könnte der Reparaturprozess auf unbestimmte Zeit verzögert werden, wenn die PodDisruptionBudget-Konfiguration die für eine Reparatur erforderlichen Bereinigungen verhindert.

Kulanzzeitraum für die Beendigung des Pods einhalten

Für die automatische Knotenreparatur gilt auch ein Kulanzzeitraum für die Pod-Beendigung von etwa 30 Minuten. Der Kulanzzeitraum für die Pod-Beendigung gibt Pods ein Zeitfenster für ein ordnungsgemäßes Herunterfahren während der Beendigung. Während des Kulanzzeitraums ist das Kubelet auf einem Knoten für die Ausführung von Bereinigungsaufgaben und die Freigabe von Ressourcen verantwortlich, die mit den Pods auf diesem Knoten verknüpft sind. Die automatische Knotenreparatur kann von Kubelet bis zu 30 Minuten dauern, um diese Bereinigung abzuschließen. Wenn die zugewiesenen 30 Minuten abgelaufen sind, wird die Beendigung des Knotens erzwungen, unabhängig davon, ob die Pods ordnungsgemäß beendet wurden.

Zusätzliche Strategien zur Knotenreparatur

Bei der automatischen Knotenreparatur werden außerdem die folgenden Strategien implementiert:

  • Wenn mehrere Knoten repariert werden müssen, werden sie nacheinander repariert, um die Clusterunterbrechung zu begrenzen und Arbeitslasten zu schützen.
  • Wenn Sie die automatische Knotenreparatur während des Reparaturvorgangs deaktivieren, werden laufende Reparaturen dennoch fortgesetzt, bis der Reparaturvorgang erfolgreich ist oder fehlschlägt.

Automatische Knotenreparatur aktivieren und deaktivieren

Sie können die automatische Knotenreparatur beim Erstellen oder Aktualisieren eines Knotenpools aktivieren oder deaktivieren. Sie aktivieren oder deaktivieren dieses Feature 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: ein Name, den Sie für Ihren Knotenpool ausgewählt haben. Führen Sie den Befehl gcloud 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 Gb
  • NODEPOOL_PROFILE: ist das IAM-Instanzprofil für Knotenpool-VMs
  • NODE_VERSION: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. "1.29.3-gke.600")
  • 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önnen
  • GOOGLE_CLOUD_LOCATION: ist 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 darf keine Überschneidung zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetz-Netzwerk des Knotenpools geben. 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 den Knotenpool, z. B. node-pool-1.
  • CLUSTER_NAME: der Name Ihres Clusters
  • GOOGLE_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 den Knotenpool, z. B. node-pool-1.
  • CLUSTER_NAME: der Name Ihres Clusters
  • GOOGLE_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 den Knotenpool, z. B. node-pool-1.
  • CLUSTER_NAME: der Name Ihres Clusters
  • GOOGLE_CLOUD_LOCATION: die Google Cloud-Region, die Ihren Cluster verwaltet

Verlauf der Knotenreparatur

Mit dem folgenden Befehl können Sie den Verlauf der für einen Knotenpool ausgeführten Reparaturen aufrufen:

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-Projekt
  • CLUSTER_NAME: der Name Ihres Clusters
  • NODE_POOL_NAME: Ein eindeutiger Name für den Knotenpool, z. B. node-pool-1.

Zusammenfassung des Knotenpoolstatus

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 über 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 hilft Ihnen, den aktuellen Status des Knotenpools nachzuvollziehen. 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 den Reparaturprozess durchlaufen.