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 wird auch ein Kulanzzeitraum für die Pod-Beendigung von etwa 30 Minuten berücksichtigt. 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 azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.28.7-gke.1700 \
   --vm-size VM_SIZE \
   --max-pods-per-node 110 \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --azure-availability-zone AZURE_ZONE \
   --ssh-public-key SSH_PUBLIC_KEY" \
   --subnet-id SUBNET_ID \
   --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 GKE on Azure-Clusters
  • GOOGLE_CLOUD_LOCATION: der Google Cloud-Standort, der Ihren Cluster verwaltet
  • NODE_VERSION: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. "1.28.7-gke.1700")
  • VM_SIZE: eine unterstützte Azure-VM-Größe
  • MIN_NODES: die Mindestanzahl von Knoten im Knotenpool. Weitere Informationen finden Sie unter Cluster-Autoscaling.
  • MAX_NODES: die maximale Anzahl von Knoten im Knotenpool
  • AZURE_ZONE: die Azure-Verfügbarkeitszone, in der GKE on Azure den Knotenpool startet, z. B. 3
  • SSH_PUBLIC_KEY: der Text Ihres öffentlichen SSH-Schlüssels.
  • SUBNET_ID:die ID des Subnetzes des Knotenpools.

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 azure 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 azure 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 Azure die automatische Knotenreparatur ordnungsgemäß deaktiviert. Wenn Sie die automatische Knotenreparatur für einen vorhandenen Knotenpool deaktivieren, startet GKE on Azure einen Aktualisierungsvorgang für den Knotenpool. 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 azure 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 azure operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/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 azure 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.