Delen via


Node Problem Detector (NPD) in AKS-knooppunten (Azure Kubernetes Service)

Node Problem Detector (NPD) is een open source Kubernetes-onderdeel dat knooppuntgerelateerde problemen detecteert en rapporteert. Dit wordt uitgevoerd als een systeemservice op elke node in het cluster en verzamelt verschillende metrische gegevens en systeeminformatie, zoals CPU-gebruik, schijfgebruik en netwerkverbinding. Wanneer er een probleem wordt gedetecteerd, worden gebeurtenissen en/of knooppuntvoorwaarden gegenereerd. Azure Kubernetes Service (AKS) maakt gebruik van NPD voor het bewaken en beheren van knooppunten in een Kubernetes-cluster dat wordt uitgevoerd op het Azure-cloudplatform. De AKS Linux-extensie schakelt standaard NPD in.

Notitie

Upgrades naar NPD zijn onafhankelijk van de knooppuntinstallatiekopieën en kubernetes-versie-upgradeprocessen. Als een knooppuntpool niet in orde is (bijvoorbeeld in een mislukte status), worden nieuwe NPD-versies niet geïnstalleerd.

Node-voorwaarden

Knooppuntvoorwaarden geven een permanent probleem aan waardoor het knooppunt niet beschikbaar is. AKS gebruikt de volgende knooppuntvoorwaarden van NPD om permanente problemen op het knooppunt weer te geven. NPD verzendt ook bijbehorende Kubernetes-gebeurtenissen.

Type probleemdaemon NodeCondition Reden
CustomPluginMonitor BestandssysteemCorruptionProblem FilesystemCorruptionDetected
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor ContainerRuntimeProblem ContainerRuntimeIsDown
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice RegistratienetDevice ongedaan maken
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor FrequentContainerdRestart FrequentContainerdRestart
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor ReadonlyFilesystem FilesystemIsReadOnly

gebeurtenis

NPD verzendt gebeurtenissen met relevante informatie om u te helpen bij het diagnosticeren van onderliggende problemen.

Type probleemdaemon Reden
CustomPluginMonitor EgressBlocked
CustomPluginMonitor FilesystemCorruptionDetected
CustomPluginMonitor KubeletIsDown
CustomPluginMonitor ContainerRuntimeIsDown
CustomPluginMonitor FreezeScheduled
CustomPluginMonitor RebootScheduled
CustomPluginMonitor Opnieuw implementerenScheduled
CustomPluginMonitor TerminateScheduled
CustomPluginMonitor PreemptScheduled
CustomPluginMonitor DNSProblem
CustomPluginMonitor PodIPProblem
SystemLogMonitor OOMKilling
SystemLogMonitor TaskHung
SystemLogMonitor RegistratienetDevice ongedaan maken
SystemLogMonitor KernelOops
SystemLogMonitor DockerSocketCannotConnect
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

In bepaalde gevallen zorgt AKS automatisch voor cordons en wordt het knooppunt leeg gemaakt om onderbrekingen van workloads te minimaliseren. Zie Automatisch leegmaken van knooppunten voor meer informatie over de gebeurtenissen en acties.

Controleer de voorwaarden en gebeurtenissen van de node

  • Controleer de voorwaarden en gebeurtenissen van het knooppunt met behulp van de kubectl describe node opdracht.

    kubectl describe node my-aks-node
    

    Uw uitvoer moet er ongeveer uitzien als in het volgende voorbeeld verkorte uitvoer:

    ...
    ...
    
    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
    

Deze gebeurtenissen zijn ook beschikbaar in Container Insights via KubeEvents.

Metrische gegevens

NPD maakt ook prometheus-metrische gegevens beschikbaar op basis van de knooppuntproblemen, die u kunt gebruiken voor bewaking en waarschuwingen. Deze metrische gegevens worden weergegeven op poort 20257 van het IP-adres van het knooppunt en Prometheus kunnen ze scrapen.

In het volgende voorbeeld van YAML ziet u een knipselconfiguratie die u kunt gebruiken met de Azure Managed Prometheus-invoegtoepassing als een DaemonSet:

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']

In het volgende voorbeeld ziet u de geschraapte metrische gegevens:

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

Volgende stappen

Zie kubernetes/node-problem-detector voor meer informatie over NPD.