Node Problem Detector

Mit der Open-Source-Bibliothek Node Problem Detector können Sie den Knotenstatus überwachen und häufige Hardware-, Kernel- oder Container-Laufzeitprobleme erkennen. In Google Distributed Cloud wird er als systemd-Dienst auf jedem Knoten ausgeführt und ist ab Release 1.10.0 standardmäßig aktiviert. Ab Version 1.32 kann der Node Problem Detector auch bestimmte Knotenprobleme automatisch beheben.

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care. Weitere Informationen zu Supportressourcen finden Sie unter Support erhalten. Dazu gehören:

  • Anforderungen für das Erstellen einer Supportanfrage.
  • Tools zur Fehlerbehebung, z. B. Umgebungskonfiguration, Logs und Messwerte.
  • Unterstützte Komponenten.

Welche Probleme werden erkannt?

Der Node Problem Detector kann die folgenden Arten von Problemen erkennen:

  • Probleme mit der Containerlaufzeit, z. B. nicht reagierende Laufzeit-Daemons
  • Hardwareprobleme wie CPU-, Arbeitsspeicher- oder Laufwerksfehler
  • Kernel-Probleme wie Kernel-Deadlock-Bedingungen oder beschädigte Dateisysteme

Er wird auf einem Knoten ausgeführt und meldet die Probleme an den Kubernetes API-Server entweder als NodeCondition oder als Event. Ein NodeCondition ist ein Problem, das dazu führt, dass ein Knoten Pods nicht ausführen kann, während ein Event ein vorübergehendes Problem ist, das sich nur begrenzt auf Pods auswirkt, aber trotzdem als wichtig genug für eine Meldung angesehen wird.

In der folgenden Tabelle werden die vom Node Problem Detector erkannten NodeConditions beschrieben und ob sie automatisch repariert werden können:

Bedingung Grund Automatische Reparatur unterstützt1
KernelDeadlock Kernelprozesse warten darauf, dass andere Kernelprozesse erforderliche Ressourcen freigeben. Nein
ReadonlyFilesystem Der Cluster kann aufgrund eines Problems, z. B. weil das Laufwerk voll ist, nicht in das Dateisystem schreiben. Nein
FrequentKubeletRestart Das Kubelet wird häufig neu gestartet, was verhindert, dass der Knoten Pods effektiv ausführt. Nein
FrequentDockerRestart Der Docker-Daemon wurde in 20 Minuten mehr als fünfmal neu gestartet. Nein
FrequentContainerdRestart Die Containerlaufzeit wurde in 20 Minuten mehr als fünfmal neu gestartet. Nein
FrequentUnregisterNetDevice Auf dem Knoten werden Netzwerkgeräte häufig abgemeldet. Nein
CorruptDockerOverlay2 Es gibt Dateisystemprobleme oder Inkonsistenzen im Verzeichnis des Docker-Overlay2-Speichertreibers. Nein
OrphanContainers2 Ein für einen Container spezifischer Pod wurde gelöscht, der entsprechende Container ist jedoch noch im Knoten vorhanden. Nein
ContainerRuntimeUnhealthy Die Containerlaufzeit funktioniert nicht ordnungsgemäß, sodass Pods nicht auf dem Knoten ausgeführt oder geplant werden können. Ja
FailedCgroupRemoval2 Einige cgroups befinden sich im Status „Eingefroren“. Ja
KubeletUnhealthy Der Knoten funktioniert nicht ordnungsgemäß oder reagiert nicht auf die Steuerungsebene. Ja

1 Ab Version 1.32 wird die automatische Reparatur erkannter Probleme für ausgewählte Bedingungen unterstützt.

2 Unterstützt für Versionen 1.32 und höher.

Beispiele für Events, die vom Node Problem Detector gemeldet werden:

  • Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
  • Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.

Welche Probleme werden behoben?

Ab Version 1.32 kann der Node Problem Detector, wenn er bestimmte NodeConditions erkennt, das entsprechende Problem auf dem Knoten automatisch beheben. Die folgenden NodeConditions unterstützen die automatische Reparatur:

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

Erkannte Probleme aufrufen

Führen Sie den folgenden kubectl describe-Befehl aus, um nach NodeConditions und Events zu suchen:

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

Ersetzen Sie Folgendes:

  • NODE_NAME: der Name des Knotens, den Sie prüfen.

  • KUBECONFIG: der Pfad der kubeconfig-Datei des Clusters.

Node Problem Detector aktivieren und deaktivieren

Der Node Problem Detector ist standardmäßig aktiviert, kann aber in der ConfigMap-Ressource node-problem-detector-config deaktiviert werden. Sofern Sie ihn nicht explizit deaktivieren, überwacht der Node Problem Detector Knoten kontinuierlich auf bestimmte Bedingungen, die auf Probleme für den Knoten hinweisen.

Führen Sie die folgenden Schritte aus, um den Node Problem Detector auf einem bestimmten Cluster zu deaktivieren:

  1. Bearbeiten Sie die ConfigMap-Ressource node-problem-detector-config:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Ersetzen Sie Folgendes:

    • KUBECONFIG: Pfad der kubeconfig-Datei des Clusters

    • CLUSTER_NAMESPACE: Namespace des Clusters, in dem Sie den Node Problem Detector aktivieren möchten.

    Dieser Befehl startet automatisch einen Texteditor, in dem Sie die Ressource node-problem-detector-config bearbeiten können.

  2. Legen Sie in der Ressourcendefinition node-problem-detector-config für data.enabled den Wert false fest.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "false"
    

    Zu Beginn hat die ConfigMap node-problem-detector-config kein Feld data. Sie müssen es also möglicherweise hinzufügen.

  3. Speichern Sie die Änderungen und schließen Sie den Editor, um die Ressource zu aktualisieren.

Führen Sie die vorherigen Schritte aus, um den Node Problem Detector wieder zu aktivieren. Setzen Sie jedoch data.enabled in der Ressourcendefinition node-problem-detector-config auf true.

Automatische Reparatur aktivieren und deaktivieren

Ab Version 1.32 sucht der Node Problem Detector nach bestimmten NodeConditions und repariert das entsprechende Problem auf dem Knoten automatisch. Standardmäßig ist die automatische Reparatur für unterstützte NodeConditions aktiviert. Sie kann jedoch in der ConfigMap-Ressource node-problem-detector-config deaktiviert werden.

So deaktivieren Sie das automatische Reparaturverhalten für einen bestimmten Cluster:

  1. Bearbeiten Sie die ConfigMap-Ressource node-problem-detector-config:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Ersetzen Sie Folgendes:

    • KUBECONFIG: Pfad der kubeconfig-Datei des Clusters

    • CLUSTER_NAMESPACE: Namespace des Clusters, in dem Sie den Node Problem Detector aktivieren möchten.

    Dieser Befehl startet automatisch einen Texteditor, in dem Sie die Ressource node-problem-detector-config bearbeiten können.

  2. Legen Sie in der Ressourcendefinition node-problem-detector-config für data.check-only den Wert true fest.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "true"
      check-only: "true"
    

    Zu Beginn hat die ConfigMap node-problem-detector-config kein Feld data. Sie müssen es also möglicherweise hinzufügen. Wenn Sie check-only auf "true" setzen, wird die automatische Reparatur für alle unterstützten Bedingungen deaktiviert.

  3. Speichern Sie die Änderungen und schließen Sie den Editor, um die Ressource zu aktualisieren.

Wenn Sie die automatische Reparatur für alle NodeConditions, die sie unterstützen, wieder aktivieren möchten, setzen Sie data.check-only in der ConfigMap node-problem-detector-config auf "false".

Node Problem Detector anhalten und neu starten

Node Problem Detector wird als systemd-Dienst auf jedem Knoten ausgeführt. Wenn Sie Node Problem Detector für einen bestimmten Knoten verwalten möchten, verwenden Sie SSH, um auf den Knoten zuzugreifen, und führen Sie die folgenden systemctl-Befehle aus.

  • Führen Sie den folgenden Befehl aus, um Node Problem Detector zu deaktivieren:

    systemctl stop node-problem-detector
    
  • Führen Sie den folgenden Befehl aus, um den Node Problem Detector neu zu starten:

    systemctl restart node-problem-detector
    
  • Führen Sie den folgenden Befehl aus, um zu prüfen, ob der Node Problem Detector auf einem bestimmten Knoten ausgeführt wird:

    systemctl is-active node-problem-detector
    

Nicht unterstützte Funktionen

Google Distributed Cloud unterstützt die folgenden Anpassungen des Node Problem Detector nicht:

  • Exportieren von Node Problem Detector-Berichten in andere Monitoringsysteme wie Cloud Monitoring oder Prometheus.
  • Anpassen der Suche nach NodeConditions oder Events.
  • Benutzerdefinierte Monitoring-Skripts ausführen.

Nächste Schritte

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care. Weitere Informationen zu Supportressourcen finden Sie unter Support erhalten. Dazu gehören:

  • Anforderungen für das Erstellen einer Supportanfrage.
  • Tools zur Fehlerbehebung, z. B. Umgebungskonfiguration, Logs und Messwerte.
  • Unterstützte Komponenten.