Automatische Knotenreparatur und Systemdiagnosen

In Anthos-Cluster auf VMware (GKE On-Prem) sind regelmäßige Systemdiagnosen und automatische Knotenreparaturen standardmäßig aktiviert.

Die automatische Reparatur von Knoten erkennt intakte Knoten in einem Cluster kontinuierlich und repariert sie.

Regelmäßige Systemdiagnosen werden alle 15 Minuten ausgeführt. Die Prüfungen sind mit jenen identisch, die von gkectl diagnose cluster ausgeführt werden. Die Ergebnisse werden als Logs und Ereignisse für Clusterobjekte im Administratorcluster angezeigt.

Fehlerhafte Störungen

Die folgenden Bedingungen geben an, dass ein Knoten fehlerhaft ist:

  • Die Knotenbedingung NotReady beträgt ca. 10 Minuten true.

  • Der Maschinenstatus lautet Unavailable für etwa zehn Minuten nach dem Erstellen.

  • Der Maschinenstatus ist seit der VM-Erstellung etwa 30 Minuten lang nicht Available.

  • Es gibt kein Knotenobjekt (nodeRef ist nil), das einer Maschine im Status Available ungefähr 10 Minuten entspricht.

  • Die Knotenbedingung DiskPressure beträgt ca. 30 Minuten true.

Reparaturstrategie

Anthos-Cluster auf VMware initiieren eine Reparatur auf einem Knoten, wenn der Knoten mindestens eine der Bedingungen in der obigen Liste erfüllt.

Durch die Reparatur wird der fehlerhafte Knoten geleert und eine neue VM erstellt. Wenn der Knotensausgleich eine Stunde lang fehlschlägt, wird bei der Reparatur der Verbindungsausgleich erzwungen und die angehängten verwalteten Kubernetes-Laufwerke werden getrennt voneinander entfernt.

Wenn sich mehrere fehlerhafte Knoten im selben MachineDeployment befinden, wird die Reparatur nur auf einem dieser Knoten durchgeführt.

Die Anzahl der Reparaturen pro Stunde für einen Knotenpool ist auf Folgendes beschränkt:

  • Drei
  • 10 % der Anzahl der Knoten im Knotenpool

Knotenreparatur und Systemdiagnosen für einen neuen Cluster aktivieren

Legen Sie in der Clusterkonfigurationsdatei Admin oder User den Wert autoRepair.enabled auf true fest:

autoRepair:
  enabled: true

Fahren Sie mit den Schritten zum Erstellen eines Admin- oder Nutzerclusters fort.

Knotenreparatur und Systemdiagnosen für einen vorhandenen Nutzercluster aktivieren

Legen Sie in der Konfigurationsdatei für Nutzercluster autoRepair.enabled auf true fest:

Aktualisieren Sie den Cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Ersetzen Sie Folgendes:

  • ADMIN_CLUSTER_KUBECONFIG: Pfad der Datei "kubeconfig" Ihres Administratorclusters

  • USER_CLUSTER_CONFIG: Pfad Ihrer Nutzercluster-Konfigurationsdatei

Knotenreparatur und Systemdiagnosen für einen vorhandenen Administratorcluster aktivieren

Legen Sie in der Administrator-Clusterkonfigurationsdatei autoRepair.enabled auf true fest:

Aktualisieren Sie den Cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Ersetzen Sie ADMIN_CLUSTER_CONFIG durch den Pfad Ihrer Konfigurationsdatei für den Administratorcluster.

Logs einer Systemdiagnose aufrufen

Lassen Sie alle Pods der Systemdiagnose im Administratorcluster auflisten:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods --all-namespaces | grep cluster-health-controller

Die Ausgabe sieht etwa so aus:

kube-system       cluster-health-controller-6c7df455cf-zlfh7   2/2   Running
my-user-cluster   cluster-health-controller-5d5545bb75-rtz7c   2/2   Running

Rufen Sie die Logs für den Container cluster-health-controller in einem der Pods ab, um die Logs einer bestimmten Systemdiagnose aufzurufen. So rufen Sie beispielsweise die Logs für my-user-cluster in der vorherigen Ausgabe ab:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster logs \
    cluster-health-controller-5d5545bb75-rtz7c cluster-health-controller

Anzeigen von Ereignissen in der Systemdiagnose

Listen Sie alle Clusterobjekte in Ihrem Administratorcluster auf:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get clusters --all-namespaces

Die Ausgabe sieht etwa so aus:

default            gke-admin-ldxh7   2d15h
my-user-cluster    my-user-cluster   2d12h

Zum Aufrufen der Ereignisse für einen bestimmten Cluster führen Sie kubectl describe cluster mit dem Flag --show-events aus. So rufen Sie beispielsweise die Ereignisse für my-user-cluster in der vorherigen Ausgabe auf:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster \
    describe --show-events cluster my-user-cluster

Beispielausgabe:

Events:
  Type     Reason             Age   From                                 Message
  ----     ------             ----  ----                                 -------
  Warning  ValidationFailure  17s   cluster-health-periodics-controller  validator for Pod returned with status: FAILURE, reason: 1 pod error(s).

Knotenreparatur und Systemdiagnosen für einen Nutzercluster deaktivieren

Legen Sie in der Konfigurationsdatei für Nutzercluster autoRepair.enabled auf false fest:

Aktualisieren Sie den Cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Knotenreparatur und Systemdiagnosen für Administratorcluster deaktivieren

Legen Sie in der Administrator-Clusterkonfigurationsdatei autoRepair.enabled auf false fest:

Aktualisieren Sie den Cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Fehlerbehebung bei der automatischen Reparatur von Knoten

Sie können Probleme mit der automatischen Knotenreparatur untersuchen, indem Sie die Maschinen- und Knotenobjekte im Administratorcluster beschreiben. Beispiel:

Listen Sie die Maschinenobjekte auf:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

Beispielausgabe:

default     gke-admin-master-wcbrj
default     gke-admin-node-7458969ff8-5cg8d
default     gke-admin-node-7458969ff8-svqj7
default     xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt

Beschreiben Sie eines der Maschinenobjekte:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine gke-admin-master-wcbrj

Suchen Sie in der Ausgabe nach Ereignissen aus cluster-health-controller.

Ebenso können Sie Knotenobjekte auflisten und beschreiben. Beispiel:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe node gke-admin-master-wcbrj

Manuelle Knotenreparatur

Bei Knotenproblemen, die nicht durch die automatische Reparaturlogik abgedeckt sind oder die automatische Reparatur für Knoten nicht aktiviert ist, können Sie eine manuelle Reparatur durchführen. Dadurch wird der Knoten gelöscht und neu erstellt.

Rufen Sie den Namen des Maschinenobjekts ab, das dem Knoten entspricht:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Ersetzen Sie CLUSTER_KUBECONFIG durch den Pfad der Kubeconfig-Datei des Administrator- oder Nutzerclusters.

Fügen Sie dem Maschinenobjekt die Anmerkung repair hinzu:

kubectl annotate --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true

Ersetzen Sie MACHINE_NAME durch den Namen des Maschinenobjekts.

Löschen Sie das Maschinenobjekt:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME