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 (czyli w stanie niepowodzenia), nowe wersje serwera NPD nie są 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. NPD emituje również odpowiednie zdarzenia Kubernetes.

Typ demona problemu StanWęzła Przyczyna
CustomPluginMonitor ProblemUszkodzeniaSystemuPlików WykrytoUszkodzenieSystemuPlików
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor Problem z działaniem kontenera ŚrodowiskoUruchomienioweKontenerówNieDziała
MonitorWtyczekNiestandardowych ZaplanowaneZdarzenieVM ZaplanowaneZdarzenieVM
CustomPluginMonitor FrequentUnregisterNetDevice Wyrejestrowywanie urządzenia sieciowego
CustomPluginMonitor CzęsteRestartowanieKubeletu CzęsteRestartowanieKubeletu
CustomPluginMonitor CzęsteRestartowanieContainerd CzęsteRestartowanieContainerd
CustomPluginMonitor CzęsteRestartowanieDockera CzęsteRestartowanieDockera
MonitorLogówSystemowych KernelDeadlock DockerHung
MonitorLogówSystemowych ReadonlyFilesystem System plików jest tylko do odczytu

Zdarzenia

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

Typ demona problemu Przyczyna Częstotliwość Opis Akcja
MonitorWtyczekDostosowanych Ruch wychodzący zablokowany 30 minut To zdarzenie sprawdza łączność z zewnętrznymi punktami końcowymi Sprawdź, czy zapora lub sieciowa grupa zabezpieczeń blokuje łączność z punktem końcowym, który jest oznaczony
CustomPluginMonitor WykrytoUszkodzenieSystemuPlików 5 min Sprawdza, czy Docker wykrył uszkodzenie systemu plików.
CustomPluginMonitor KubeletIsDown 30 sekund To sprawdza, czy usługa kubelet jest uruchomiona i działa prawidłowo.
CustomPluginMonitor ŚrodowiskoUruchomienioweKontenerówNieDziała 30 sekund To zdarzenie sprawdza, czy środowisko uruchomieniowe kontenera, np. kontener jest uruchomiony i jest w dobrej kondycji
CustomPluginMonitor Zaplanowane zamrożenie 1 min To zdarzenie sprawdza, czy na węźle zaplanowano zdarzenie blokowania. Sprawdź https://aka.ms/aks/scheduledevents więcej informacji
CustomPluginMonitor Zaplanowane ponowne uruchomienie 1 min To zdarzenie sprawdza, czy zdarzenie ponownego rozruchu zostało zaplanowane w węźle. Sprawdź https://aka.ms/aks/scheduledevents dla uzyskania dodatkowych informacji
CustomPluginMonitor Ponowne wdrożenie zaplanowane 1 min To zdarzenie sprawdza, czy zdarzenie ponownego wdrażania jest zaplanowane w węźle. Sprawdź https://aka.ms/aks/scheduledevents więcej informacji
CustomPluginMonitor Zakończenie zaplanowane 1 min To zdarzenie sprawdza, czy zdarzenie zakończenia jest zaplanowane w węźle. Sprawdź https://aka.ms/aks/scheduledevents więcej informacji
MonitorWtyczekNiestandardowych PreemptScheduled 2 s To zdarzenie sprawdza, czy zdarzenie preempt jest zaplanowane w węźle. Sprawdź https://aka.ms/aks/scheduledevents więcej informacji
MonitorWtyczekNiestandardowych DnsProblem
MonitorLogówSystemowych OOMKilling
MonitorLogówSystemowych Zadanie
MonitorLogówSystemowych Wyrejestrowywanie urządzenia sieciowego
MonitorLogówSystemowych JądroOops
MonitorLogówSystemowych DockerSocketNieMożnaPołączyć
MonitorLogówSystemowych KubeletRPCDeadlineExceeded
MonitorLogówSystemowych KubeletRPCNoSuchContainer
MonitorLogówSystemowych CNICannotStatFS
MonitorLogówSystemowych PLEG w złym stanie
MonitorLogówSystemowych KubeletStart
MonitorLogówSystemowych DockerStart
MonitorLogówSystemowych ContainerdStart

W niektórych przypadkach usługa AKS automatycznie kordonuje i opróżnia węzeł w celu zminimalizowania zakłóceń w pracach. Aby uzyskać więcej informacji na temat akcji i zdarzeń, zobacz Node autodrain.

Ruch wychodzący zablokowany

Lista punktów końcowych sprawdzanych przez element EgressBlocked znajduje się poniżej

Uwaga

Rzeczywiste punkty końcowe będą zależeć od typu klastra i lokalizacji, w której są hostowane (chmura publiczna kontra chmury z ograniczonym dostępem). Zapoznaj się z dokumentacją dotyczącą dostępu wychodzącego tutaj. Dokumentacja dotyczy chmur publicznych

Typ Przykład Uwaga
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com"
Menedżer Zasobów https://management.azure.com
Pakiety https://packages.microsoft.com
Kube Binary https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Sprawdź warunki i wydarzenia węzła

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

    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 również udostępnia metryki Prometheus związane z problemami z węzłami, które można wykorzystać do monitorowania i generowania alertów. Te metryki są udostępniane na porcie 20257 IP węzła i Prometheus może je pobierać.

W poniższym przykładzie YAML znajduje się konfiguracja skrobania, której można użyć z dodatkiem 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']

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 NPD, zobacz kubernetes/node-problem-detector.