Automatische Knotenreparatur

Die automatische Knotenreparatur überwacht kontinuierlich den Zustand jedes Knotens in einem Knotenpool. Wenn ein Knoten fehlerhaft wird, wird er automatisch repariert. Diese Funktion verringert die Wahrscheinlichkeit von Cluster-Ausfällen 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. Beachten Sie, dass Sie diese Funktion für Knotenpools und nicht für einzelne Knoten aktivieren oder deaktivieren.

Fehlerhafte Knotenbedingungen

Die automatische Knotenreparatur prüft den Zustand jedes Knotens, um festzustellen, ob er repariert werden muss. Ein Knoten gilt als fehlerfrei, wenn er den Status Ready meldet. Andernfalls werden Reparaturen eingeleitet, wenn er für einen bestimmten Zeitraum hintereinander 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 durch einen erschöpften Speicherplatz auf dem Bootlaufwerk entstehen, der über einen Zeitraum von etwa 30 Minuten erkannt wird.

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

Strategien für die Knotenreparatur

Die automatische Knotenreparatur folgt bestimmten Strategien, um sowohl den allgemeinen Zustand des Clusters als auch die Verfügbarkeit von Anwendungen während des Reparaturvorgangs zu gewährleisten. In diesem Abschnitt wird beschrieben, wie die automatische Knotenreparatur PodDisruptionBudget Konfigurationen berücksichtigt, den Pod Termination Grace Period respektiert und andere Maßnahmen ergreift, um Cluster Störungen bei der Reparatur von Knoten zu minimieren.

PodDisruptionBudget 30 Minuten lang berücksichtigen

Wenn ein Knoten repariert werden muss, wird er nicht sofort geleert und neu erstellt. Stattdessen berücksichtigt die automatische 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 jederzeit verfügbar sein müssen.

Indem die automatische Knotenreparatur das PodDisruptionBudget etwa 30 Minuten lang berücksichtigt, haben Pods Zeit, sicher neu geplant und auf andere fehlerfreie Knoten im Cluster verteilt zu werden. So kann die gewünschte Verfügbarkeit der Anwendung während des Reparaturvorgangs aufrechterhalten werden.

Nach Ablauf der 30 Minuten wird die automatische Knotenreparatur mit dem Reparaturvorgang fortgesetzt, auch wenn dies gegen das PodDisruptionBudget verstößt. Ohne Zeitlimit könnte der Reparaturvorgang unbegrenzt verzögert werden, wenn die PodDisruptionBudget-Konfiguration die für eine Reparatur erforderlichen Entfernungen verhindert.

Kulanzzeitraum für die Pod-Beendigung berücksichtigen

Die automatische Knotenreparatur berücksichtigt auch einen Kulanzzeitraum für die Pod-Beendigung von etwa 30 Minuten. Der Pod-Beendigungs-Kulanzzeitraum gibt Pods Zeit 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 gibt dem Kubelet bis zu 30 Minuten Zeit, 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 für die Knotenreparatur

Die automatische Knotenreparatur implementiert auch die folgenden Strategien:

  • Wenn mehrere Knoten repariert werden müssen, werden sie einzeln repariert, um Clusterunterbrechungen 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 azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.35.3-gke.300 \
   --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 Ihren 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: die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll, z.B. „1.35.3-gke.300“
  • VM_SIZE: eine unterstützte Azure-VM-Größe
  • MIN_NODES: die Mindestanzahl von Knoten im Knoten pool. 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 Ihren 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 Ihren 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 die automatische Knotenreparatur in GKE on Azure ordnungsgemäß deaktiviert wird. Wenn Sie die automatische Knotenreparatur für einen vorhandenen Knotenpool deaktivieren, startet GKE on Azure 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 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 Ihren 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 Reparaturen auf einem Knotenpool 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 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 Knotenpoolzustands generieren:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Eine Zusammenfassung des Knotenpoolzustands 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 Knotenpoolzustands gibt Aufschluss über den aktuellen Zustand 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.