Freigeben über


Knotenproblemerkennung (NPD) in AKS-Knoten (Azure Kubernetes Service)

Die Knotenproblemerkennung (NPD) ist eine Open Source-Kubernetes-Komponente, die knotenbezogene Probleme erkennt und darüber berichtet. Sie wird als „systemd serviced“ auf jedem Knoten im Cluster ausgeführt und erfasst verschiedene Metriken und Systeminformationen, z. B. CPU-Auslastung, Datenträgernutzung und Netzwerkkonnektivität. Wenn ein Problem erkannt wird, werden Ereignisse und/oder Knotenbedingungen generiert. Azure Kubernetes Service (AKS) verwendet NPD, um Knoten in einem Kubernetes-Cluster zu überwachen und zu verwalten, der auf der Azure-Cloudplattform ausgeführt wird. Die AKS Linux-Erweiterung aktiviert NPD standardmäßig.

Hinweis

Upgrades auf NPD sind unabhängig vom Knotenimage und von Kubernetes-Versionsupgradeprozessen. Wenn ein Knotenpool fehlerhaft ist (d. h. in einem fehlerhaften Zustand), werden keine neuen NPD-Versionen installiert.

Knotenbedingungen

Knotenbedingungen weisen auf ein dauerhaftes Problem hin, das dazu führt, dass der Knoten nicht verfügbar ist. AKS verwendet die folgenden Knotenbedingungen der NPD, um dauerhafte Probleme auf dem Knoten offenzulegen. NPD gibt auch entsprechende Kubernetes-Ereignisse aus.

Problem-Daemontyp NodeCondition Grund
CustomPluginMonitor FilesystemCorruptionProblem Dateisystembeschädigung erkannt
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor Problem mit der Container-Laufzeit ContainerRuntimeIsDown
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice UnregisterNetDevice
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor FrequentContainerdRestart FrequentContainerdRestart
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor Nur-Lese-Dateisystem FilesystemIsReadOnly

Ereignisse

NPD gibt Ereignisse mit relevanten Informationen aus, die Ihnen bei der Diagnose zugrunde liegender Probleme helfen.

Problem-Daemontyp Grund Frequenz BESCHREIBUNG Maßnahme
CustomPluginMonitor EgressBlocked 30 Minuten Dieses Ereignis sucht nach Konnektivität mit externen Endpunkten. Überprüfen, ob eine Firewall oder NSG die Verbindung mit dem Endpunkt blockiert, der gekennzeichnet wird
CustomPluginMonitor Dateisystembeschädigung erkannt 5 Minuten Diese prüft auf Dateisystembeschädigungen, die von Docker aufgedeckt werden.
CustomPluginMonitor KubeletIsDown 30 Sek. Dadurch wird überprüft, ob der Kubelet-Dienst läuft und funktionsfähig ist.
CustomPluginMonitor ContainerRuntimeIsDown 30 Sek. Dieses Ereignis überprüft, ob die Containerruntime, z. B. containerd, läuft und fehlerfrei funktioniert.
CustomPluginMonitor FreezeScheduled 1 Minuten Dieses Ereignis überprüft, ob ein Einfrierenereignis auf dem Knoten geplant ist. Unter https://aka.ms/aks/scheduledevents finden Sie weitere Informationen.
CustomPluginMonitor Neustart Geplant 1 Minuten Dieses Ereignis überprüft, ob ein Neustartereignis auf dem Knoten geplant ist. Unter https://aka.ms/aks/scheduledevents finden Sie weitere Informationen.
CustomPluginMonitor RedeployScheduled 1 Minuten Dieses Ereignis überprüft, ob ein Neubereitstellungsereignis auf dem Knoten geplant ist. Unter https://aka.ms/aks/scheduledevents finden Sie weitere Informationen.
CustomPluginMonitor TerminateScheduled 1 Minuten Dieses Ereignis überprüft, ob ein Beendenereignis auf dem Knoten geplant ist. Unter https://aka.ms/aks/scheduledevents finden Sie weitere Informationen.
CustomPluginMonitor PreemptScheduled 2 Sekunden Dieses Ereignis überprüft, ob ein Preempt-Ereignis auf dem Knoten geplant ist. Unter https://aka.ms/aks/scheduledevents finden Sie weitere Informationen.
CustomPluginMonitor DNSProblem
SystemLogMonitor OOMKilling
SystemLogMonitor TaskHung
SystemLogMonitor UnregisterNetDevice
SystemLogMonitor KernelOops
SystemLogMonitor DockerSocketCannotConnect
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

In bestimmten Fällen sperrt und entleert AKS den Knoten automatisch, um die Unterbrechung der Workloads zu minimieren. Weitere Informationen zu den Ereignissen und Aktionen finden Sie unter Node autodrain.

EgressBlocked

Die Liste der Endpunkte, die vom EgressBlocked überprüft werden, sind unten aufgeführt.

Hinweis

Die tatsächlichen Endpunkte hängen vom Typ des Clusters und vom Speicherort ab, an dem er gehostet wird (Öffentliche Cloud im Vergleich zu Airgapped Clouds). Lesen Sie die Dokumentation für ausgehenden Zugriff hier. Die Dokumentation richtet sich an öffentliche Clouds

Typ Beispiel Hinweis
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com"
Ressourcen-Manager https://management.azure.com
Pakete https://packages.microsoft.com
Kube Binary https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Überprüfen der Knotenbedingungen und -ereignisse

  • Überprüfen Sie die Knotenbedingungen und -ereignisse mithilfe des Befehls kubectl describe node.

    kubectl describe node my-aks-node
    

    Ihre Ausgabe sollte der folgenden gekürzten Beispielausgabe entsprechen:

    ...
    ...
    
    Conditions:
      Type                          Status  LastHeartbeatTime                 LastTransitionTime                Reason                          Message
      ----                          ------  -----------------                 ------------------                ------                          -------
      VMEventScheduled              False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoVMEventScheduled              VM has no scheduled event
      FrequentContainerdRestart     False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentContainerdRestart     containerd is functioning properly
      FrequentDockerRestart         False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentDockerRestart         docker is functioning properly
      FilesystemCorruptionProblem   False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   FilesystemIsOK                  Filesystem is healthy
      FrequentUnregisterNetDevice   False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentUnregisterNetDevice   node is functioning properly
      ContainerRuntimeProblem       False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:40 +0000   ContainerRuntimeIsUp            container runtime service is up
      KernelDeadlock                False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   KernelHasNoDeadlock             kernel has no deadlock
      FrequentKubeletRestart        False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentKubeletRestart        kubelet is functioning properly
      KubeletProblem                False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   KubeletIsUp                     kubelet service is up
      ReadonlyFilesystem            False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   FilesystemIsNotReadOnly         Filesystem is not read-only
      NetworkUnavailable            False   Thu, 01 Jun 2023 03:58:39 +0000   Thu, 01 Jun 2023 03:58:39 +0000   RouteCreated                    RouteController created a route
      MemoryPressure                True    Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 19:16:50 +0000   KubeletHasInsufficientMemory    kubelet has insufficient memory available
      DiskPressure                  False   Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:22 +0000   KubeletHasNoDiskPressure        kubelet has no disk pressure
      PIDPressure                   False   Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:22 +0000   KubeletHasSufficientPID         kubelet has sufficient PID available
      Ready                         True    Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:23 +0000   KubeletReady                    kubelet is posting ready status. AppArmor enabled
    ...
    ...
    ...
    Events:
      Type    Reason                   Age                  From     Message
      ----    ------                   ----                 ----     -------
      Normal  NodeHasSufficientMemory  94s (x176 over 15h)  kubelet  Node aks-agentpool-40622340-vmss000009 status is now: NodeHasSufficientMemory
    

Diese Ereignisse sind auch in Container Insights über KubeEvents verfügbar.

Metriken

NPD stellt auch Prometheus-Metriken zur Verfügung, die auf den Knotenproblemen basieren und für Überwachung und Warnung verwendet werden können. Diese Metriken werden an Port 20257 der Knoten-IP-Adresse verfügbar gemacht, und Prometheus kann sie abfragen.

Das folgende YAML-Beispiel zeigt eine Scrape-Konfiguration, die Sie mit dem Azure Managed Prometheus-Add-On als DaemonSet verwenden können:

kind: ConfigMap
apiVersion: v1
metadata:
  name: ama-metrics-prometheus-config-node
  namespace: kube-system
data:
  prometheus-config: |-
    global:
      scrape_interval: 1m
    scrape_configs:
    - job_name: node-problem-detector
      scrape_interval: 1m
      scheme: http
      metrics_path: /metrics
      relabel_configs:
      - source_labels: [__metrics_path__]
        regex: (.*)
        target_label: metrics_path
      - source_labels: [__address__]
        replacement: '$NODE_NAME'
        target_label: instance
      static_configs:
      - targets: ['$NODE_IP:20257']

Das folgende Beispiel zeigt die ausgelesenen Metriken:

problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0

Nächste Schritte

Weitere Informationen zu NPD finden Sie unter kubernetes/node-problem-detector.