Node Problem Detector

Node Problem Detector ist eine Open-Source-Bibliothek, die den Status von Knoten überwacht und häufige Knotenprobleme wie Hardware-, Kernel- oder Container-Laufzeitprobleme erkennt. In GDCV für Bare Metal wird es als systemd-Dienst auf jedem Knoten ausgeführt.

Ab GDCV für Bare-Metal-Version 1.10.0 ist der Knotenproblemerkennung standardmäßig aktiviert.

Welche Probleme werden erkannt?

Der Detektor für Knotenprobleme kann folgende 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.

Beispiele für NodeConditions, die vom Node Problem Detector erkannt werden:

  • KernelDeadlock
  • ReadonlyFilesystem
  • FrequentKubeletRestart
  • FrequentDockerRestart
  • FrequentContainerdRestart
  • FrequentUnregisterNetDevice
  • KubeletUnhealthy
  • ContainerRuntimeUnhealthy
  • CorruptDockerOverlay2

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.

Erkannte Probleme aufrufen

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

kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME

Ersetzen Sie im Befehl die folgenden Einträge durch Informationen, die für Ihre Clusterumgebung spezifisch sind:

  • KUBECONFIG_PATH: Der Pfad zur kubeconfig-Datei des Zielclusters. Der Pfad zur kubeconfig-Datei lautet normalerweise bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Wenn Sie jedoch Ihren Arbeitsbereich mit dem Flag WORKSPACE_DIR angegeben haben, lautet der Pfad WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

  • NODE_NAME: Name des Knotens, zu dem Sie Statusinformationen benötigen.

Node Problem Detector aktivieren/deaktivieren

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

  1. Bearbeiten Sie die ConfigMap-Datei des Clusters, die den Namen node-problem-detector-config hat.

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

    Dieser Befehl startet automatisch einen Texteditor (z. B. vim oder nano), in dem Sie die Datei node-problem-detector-config bearbeiten können. Ersetzen Sie im Befehl die folgenden Einträge durch Informationen, die für Ihre Clusterumgebung spezifisch sind:

    • KUBECONFIG_PATH: Pfad zur kubeconfig-Datei des Administratorclusters. Der Pfad zur kubeconfig-Datei lautet normalerweise bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Wenn Sie jedoch Ihren Arbeitsbereich mit dem Flag WORKSPACE_DIR angegeben haben, lautet der Pfad WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.
    • CLUSTER_NAMESPACE: Namespace des Clusters, in dem Sie den Node Problem Detector aktivieren möchten.
  2. Zu Beginn hat node-problem-detector-config ConfigMap kein Feld data. Fügen Sie der Konfigurationszuordnung das Feld data mit dem folgenden Schlüssel/Wert-Paar hinzu:

    data:
      enabled: "true"
    

Führen Sie zum Deaktivieren des Node Problem Detector in einem Cluster-Namespace die vorherigen Schritte 1 und 2 aus, aber in Schritt 2 ändern Sie den Wert des Schlüssels enabled in „false“.

Node Problem Detector anhalten/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

GDCV für Bare Metal unterstützt die folgenden Anpassungen der Knotenproblemerkennung nicht:

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