Sdílet prostřednictvím


Detektor problémů uzlů (NPD) v uzlech Azure Kubernetes Service (AKS)

Detektor problémů uzlu (NPD) je opensourcová komponenta Kubernetes, která detekuje problémy související s uzly a hlásí je. Běží jako obslužný systém systemd na každém uzlu v clusteru a shromažďuje různé metriky a informace o systému, jako je využití procesoru, využití disku a síťové připojení. Když zjistí problém, vygeneruje události nebo podmínky uzlu. Azure Kubernetes Service (AKS) používá NPD k monitorování a správě uzlů v clusteru Kubernetes spuštěném na cloudové platformě Azure. Rozšíření AKS pro Linux ve výchozím nastavení umožňuje NPD.

Poznámka:

Upgrady na NPD jsou nezávislé na imagi uzlu a procesech upgradu verzí Kubernetes. Pokud fond uzlů není v pořádku (tj. ve stavu selhání), nebudou nainstalovány nové verze NPD.

Podmínky uzlu

Podmínky uzlu označují trvalý problém, kvůli kterému je uzel nedostupný. AKS používá následující podmínky uzlu z NPD k vystavení trvalých problémů na uzlu. NPD také generuje odpovídající události Kubernetes.

Typ démon problému NodeCondition Důvod
CustomPluginMonitor FilesystemCorruptionProblem FilesystemCorruptionDetected
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor ContainerRuntimeProblem ContainerRuntimeIsDown
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor ČastéUnregisterNetDevice Zrušení registrace SítěDevice
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor ČastéContainerdRestart ČastéContainerdRestart
CustomPluginMonitor Časté zprovoznění Dockeru Časté zprovoznění Dockeru
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor ReadonlyFilesystem FilesystemIsReadOnly

Událost

NPD vysílá události s relevantními informacemi, které vám pomůžou s diagnostikou hlubších problémů.

Typ démon problému Důvod
CustomPluginMonitor FilesystemCorruptionDetected
CustomPluginMonitor KubeletIsDown
CustomPluginMonitor ContainerRuntimeIsDown
CustomPluginMonitor FreezeScheduled
CustomPluginMonitor RebootScheduled
CustomPluginMonitor Znovu nasaditScheduled
CustomPluginMonitor TerminateScheduled
CustomPluginMonitor PreemptScheduled
CustomPluginMonitor DnsProblem
CustomPluginMonitor PodIPProblem
SystemLogMonitor OOMKilling
SystemLogMonitor TaskHung
SystemLogMonitor Zrušení registrace SítěDevice
SystemLogMonitor KernelOops
SystemLogMonitor DockerSocketCannot Připojení
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

V některých případech AKS automaticky kabeluje a vyprázdní uzel, aby se minimalizovalo přerušení úloh. Další informace o událostechach

Kontrola podmínek a událostí uzlu

  • Pomocí příkazu zkontrolujte podmínky a události kubectl describe node uzlu.

    kubectl describe node my-aks-node
    

    Výstup by měl vypadat podobně jako v následujícím příkladu zhuštěného výstupu:

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

Tyto události jsou také k dispozici v kontejneru Přehledy prostřednictvím KubeEvents.

Metriky

NPD také zveřejňuje metriky Prometheus na základě problémů uzlů, které můžete použít k monitorování a upozorňování. Tyto metriky jsou zpřístupněny na portu 20257 IP adresy uzlu a Prometheus je může škrábat.

Následující příklad YAML ukazuje konfiguraci výstřižku, kterou můžete použít s doplňkem Azure Managed Prometheus jako 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']

Následující příklad ukazuje metriky se šrotovanými daty:

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

Další kroky

Další informace o NPD najdete v tématu kubernetes/node-problem-detector.