Udostępnij za pośrednictwem


Narzędzie do wykrywania problemów węzła (NPD) w węzłach usługi Azure Kubernetes Service (AKS)

Narzędzie do wykrywania problemów z węzłem (NPD) to składnik kubernetes typu open source, który wykrywa problemy związane z węzłami i zgłasza je. Działa jako system serwisowany w każdym węźle w klastrze i zbiera różne metryki i informacje o systemie, takie jak użycie procesora CPU, użycie dysku i łączność sieciowa. Gdy wykryje problem, generuje zdarzenia i/lub warunki węzła. Usługa Azure Kubernetes Service (AKS) używa NPD do monitorowania węzłów w klastrze Kubernetes działającego na platformie Azure w chmurze i zarządzania nimi. Rozszerzenie AKS dla systemu Linux domyślnie włącza NPD.

Uwaga

Uaktualnienia do serwera NPD są niezależne od obrazu węzła i procesów uaktualniania wersji platformy Kubernetes. Jeśli pula węzłów jest w złej kondycji (tj. w stanie niepowodzenia), nowe wersje serwera NPD nie zostaną zainstalowane.

Warunki węzła

Warunki węzła wskazują stały problem, który sprawia, że węzeł jest niedostępny. Usługa AKS używa następujących warunków węzła z serwera NPD do uwidaczniania stałych problemów w węźle. Serwer NPD emituje również odpowiednie zdarzenia kubernetes.

Typ demona problemu NodeCondition Przyczyna
CustomPluginMonitor FilesystemCorruptionProblem FilesystemCorruptionDetected
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor ContainerRuntimeProblem ContainerRuntimeIsDown
CustomPluginMonitor VmEventScheduled VmEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice WyrejestrowywanieNetDevice
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor FrequentContainerdRestart FrequentContainerdRestart
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor ReadonlyFilesystem System plikówIsReadOnly

Zdarzenia

NpD emituje zdarzenia z odpowiednimi informacjami, aby ułatwić diagnozowanie podstawowych problemów.

Typ demona problemu Przyczyna
CustomPluginMonitor Ruch wychodzącyBlocked
CustomPluginMonitor FilesystemCorruptionDetected
CustomPluginMonitor KubeletIsDown
CustomPluginMonitor ContainerRuntimeIsDown
CustomPluginMonitor Zamrożenie zablokowania
CustomPluginMonitor Ponowne uruchomienieSchedulowane
CustomPluginMonitor Ponowne wdrażanieScheduleduled
CustomPluginMonitor Zakończenieschedulowane
CustomPluginMonitor PreemptScheduleded
CustomPluginMonitor DnsProblem
CustomPluginMonitor PodIPProblem
SystemLogMonitor OOMKilling
SystemLogMonitor Zadanie
SystemLogMonitor WyrejestrowywanieNetDevice
SystemLogMonitor JądraOops
SystemLogMonitor DockerSocketCannotConnect
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEG w złej kondycji
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

W niektórych przypadkach usługa AKS automatycznie kordonuje i opróżnia węzeł w celu zminimalizowania zakłóceń w obciążeniach. Aby uzyskać więcej informacji na temat zdarzeń i akcji, zobacz Automatyczne opróżnianie węzła.

Sprawdzanie warunków i wydarzeń węzła

  • Sprawdź warunki i zdarzenia węzła kubectl describe node przy użyciu polecenia .

    kubectl describe node my-aks-node
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych skondensowanych danych wyjściowych:

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

Te zdarzenia są również dostępne w usłudze Container Insights za pośrednictwem rozwiązania KubeEvents.

Metryki

NpD uwidacznia również metryki Rozwiązania Prometheus na podstawie problemów z węzłem, których można użyć do monitorowania i zgłaszania alertów. Te metryki są widoczne na porcie 20257 adresu IP węzła, a rozwiązanie Prometheus może je zeskrobać.

W poniższym przykładzie YAML przedstawiono konfigurację zeskropka, której można użyć z dodatkiem Prometheus zarządzanym przez platformę Azure jako element 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']

W poniższym przykładzie przedstawiono metryki zezłomowane:

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

Następne kroki

Aby uzyskać więcej informacji na temat serwera NPD, zobacz kubernetes/node-problem-detector.