Dela via


Node Problem Detector (NPD) i noder i Azure Kubernetes Service (AKS)

Nodproblemidentifiering (NPD) är en öppen källkod Kubernetes-komponent som identifierar nodrelaterade problem och rapporter om dem. Den körs som en systemdelad tjänst på varje nod i klustret och samlar in olika mått och systeminformation, till exempel CPU-användning, diskanvändning och nätverksanslutning. När ett problem identifieras genereras händelser och/eller nodvillkor. Azure Kubernetes Service (AKS) använder NPD för att övervaka och hantera noder i ett Kubernetes-kluster som körs på Azure-molnplattformen. AKS Linux-tillägget aktiverar NPD som standard.

Anteckning

Uppgraderingar till NPD är oberoende av nodavbildningen och Uppgraderingsprocesserna för Kubernetes-versionen. Om en nodpool inte är felfri (det vill säga i ett misslyckat tillstånd) installeras inte nya NPD-versioner.

Nodvillkor

Nodvillkor anger ett permanent problem som gör noden otillgänglig. AKS använder följande nodvillkor från NPD för att exponera permanenta problem på noden. NPD genererar även motsvarande Kubernetes-händelser.

Problem med daemontyp NodeCondition Anledning Typ av beräkning
CustomPluginMonitor Problem med fillsystemskorrumpering Detekterad filsystemkorruption Allmänt ändamål
CustomPluginMonitor KubeletProblem KubeletIsDown Allmänt ändamål
CustomPluginMonitor Problem med containerkörning Containertidsmiljön är nere Allmänt ändamål
CustomPluginMonitor VMEventScheduled VMEventScheduled Allmänt ändamål
CustomPluginMonitor FrequentUnregisterNetDevice AvregistreraNätenhet Allmänt ändamål
CustomPluginMonitor FrekventKubeletOmstart FrekventKubeletOmstart Allmänt ändamål
CustomPluginMonitor Frekventa omstarter av Containerd Frekventa omstarter av Containerd Allmänt ändamål
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart Allmänt ändamål
CustomPluginMonitor GPU saknas Observerat GPU-antal matchar inte förväntat GPU-antal Endast GPU
CustomPluginMonitor NVLinkStatusInaktiv NVLinkStatusInaktiv Endast GPU
CustomPluginMonitor XIDErrors XID-fel som finns i kernelloggen Endast GPU
CustomPluginMonitor IBLinkFlapping Tillfällig InfiniBand-enhetsanslutning Endast GPU
Systemloggövervakare KernelDeadlock DockerHung Allmänt ändamål
Systemloggövervakare Skrivskyddat Filsystem Filsystemet är skrivskyddat Allmänt ändamål

Anteckning

Nodvillkoren GPU only gäller för närvarande för AKS-nodpooler med Standard_ND96asr_v4 eller Standard_ND96isr_H100_v5 VM-storlek och stöds i GPU-standard- och MIG-aktiverade GPU-nodpooler.

Händelser

NPD genererar händelser med relevant information som hjälper dig att diagnostisera underliggande problem.

Problem med daemontyp Anledning Frekvens Beskrivning Åtgärd
CustomPluginMonitor Utgång blockerad 30 minuter Den här händelsen söker efter anslutning till externa slutpunkter Kontrollera om en brandvägg eller NSG blockerar anslutningen till slutpunkten som flaggas
CustomPluginMonitor Detekterad filsystemkorruption 5 min Detta kontrollerar filsystemsskada som upptäcks av Docker
CustomPluginMonitor KubeletIsDown 30-talet Detta kontrollerar om kubelet-tjänsten körs och är felfri
CustomPluginMonitor Containertidsmiljön är nere 30-talet Den här händelsen kontrollerar om containerkörningen t.ex. containerd körs och är felfri
CustomPluginMonitor FreezeScheduled 1 min Den här händelsen kontrollerar om en frysningshändelse har schemalagts på noden. Se https://aka.ms/aks/scheduledevents för mer information
CustomPluginMonitor Omstart Schemalagd 1 min Den här händelsen kontrollerar om en omstartshändelse har schemalagts på noden Sök efter https://aka.ms/aks/scheduledevents mer information
CustomPluginMonitor Omdistribuera planerad 1 min Den här händelsen kontrollerar om en omdistribueringshändelse har schemalagts på noden. Se https://aka.ms/aks/scheduledevents för mer information
CustomPluginMonitor AvslutaSchemalagd 1 min Den här händelsen kontrollerar om en Avsluta händelse har schemalagts på noden. Se https://aka.ms/aks/scheduledevents för mer information
CustomPluginMonitor SchemalagdPreemption 2 sek Den här händelsen kontrollerar om en Preempt-händelse har schemalagts på noden. Se https://aka.ms/aks/scheduledevents för mer information
CustomPluginMonitor DNSProblem
Systemloggövervakare OOM-dödande
Systemloggövervakare TaskHung
Systemloggövervakare AvregistreraNätenhet
Systemloggövervakare KernelOops
Systemloggövervakare DockerSocketKanInteAnsluta
Systemloggövervakare KubeletRPCDeadlineExceeded
Systemloggövervakare KubeletRPCNoSuchContainer
Systemloggövervakare CNICannotStatFS
Systemloggövervakare PLEGOhälsosam
Systemloggövervakare KubeletStart
Systemloggövervakare DockerStart
Systemloggövervakare ContainerdStart

I vissa fall spärrar OCH tömmer AKS automatiskt noden för att minimera störningar i arbetsbelastningar. Mer information om händelser och åtgärder finns i Autodrain för Nod.

Utgång blockerad

Listan över slutpunkter som kontrolleras av EgressBlocked visas nedan

Anteckning

De faktiska slutpunkterna beror på typen av kluster och den plats där det finns (offentliga moln jämfört med Airgapped-moln). Läs dokumentationen för utgående åtkomst här. Dokumentationen gäller offentliga moln

Typ Exempel Anteckning
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com
Resurshanterare https://management.azure.com
Paket https://packages.microsoft.com
Kube Binary https://acs-mirror.azureedge.net/acs-mirror/healthz
https://packages.aks.azure.com/acs-mirror/healthz

Kontrollera nodvillkoren och händelserna

  • Kontrollera nodvillkoren och -händelserna med kommandot kubectl describe node .

    kubectl describe node my-aks-node
    

    Dina utdata bör se ut ungefär som i följande exempel på komprimerade utdata:

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

Dessa händelser är också tillgängliga i Container Insights via KubeEvents.

Mått

NPD exponerar även Prometheus-mått baserat på nodproblem, som du kan använda för övervakning och aviseringar. Dessa mått exponeras på port 20257 för nodens IP och Prometheus kan inhämta dem.

I följande exempel visar YAML en skrapkonfiguration som du kan använda med Azure Managed Prometheus-tillägget som en 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']

I följande exempel visas de skrapade metrikerna.

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

Nästa steg

Mer information om NPD finns i kubernetes/node-problem-detector.