Condividi tramite


Rilevamento problemi di nodo (NPD) nei nodi del servizio Azure Kubernetes

Il rilevamento dei problemi di nodo (NPD) è un componente Kubernetes open source che rileva problemi relativi ai nodi e li segnala. Viene eseguito come servizio di sistema in ogni nodo del cluster e raccoglie varie metriche e informazioni sul sistema, ad esempio utilizzo della CPU, utilizzo del disco e connessione di rete. Quando rileva un problema, genera eventi e/o condizioni del nodo. Servizio Azure Kubernetes (servizio Azure Kubernetes) usa NPD per monitorare e gestire i nodi in un cluster Kubernetes in esecuzione nella piattaforma cloud di Azure. L'estensione Linux del servizio Azure Kubernetes abilita npd per impostazione predefinita.

Nota

Gli aggiornamenti alla diagnostica dei nodi sono indipendenti dall'immagine del nodo e dai processi di aggiornamento della versione di Kubernetes. Se un pool di nodi non è integro, ovvero in uno stato di errore, le nuove versioni npd non vengono installate.

Condizioni nodo

Le condizioni del nodo indicano un problema permanente che rende il nodo non disponibile. Il servizio Azure Kubernetes usa le condizioni del nodo seguenti dal server dei criteri di rete per esporre problemi permanenti nel nodo. NPD genera anche gli eventi Kubernetes corrispondenti.

Tipo di Daemon di problemi Condizione del Nodo Motivo
CustomPluginMonitor Problema di Corruzione del File System FilesystemCorruptionDetected
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor ContainerRuntimeProblem Il runtime del contenitore è inattivo
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice UnregisterNetDevice
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor FrequentContainerdRestart Riavvio frequente di Containerd
CustomPluginMonitor Riavvio Frequente di Docker FrequentDockerRestart
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor ReadonlyFilesystem IlFilesystemÈSoloLettura

Eventi

NPD genera eventi con informazioni pertinenti per diagnosticare i problemi sottostanti.

Tipo di Daemon di problemi Motivo Frequenza Descrizione Azione
CustomPluginMonitor EgressBlocked 30 minuti Questo evento verifica la connettività agli endpoint esterni Controllare se un firewall o un gruppo di sicurezza di rete blocca la connettività all'endpoint contrassegnato
CustomPluginMonitor RilevamentoCorruzioneDelFileSystem 5 minuti Questo controlla la corruzione del file system evidenziata da Docker.
CustomPluginMonitor KubeletIsDown 30 secondi In questo modo viene verificato se il servizio kubelet è in esecuzione e integro
CustomPluginMonitor Il runtime del contenitore non è attivo 30 secondi Questo evento controlla se il runtime del contenitore, ad esempio containerd, è in esecuzione e funzionante.
CustomPluginMonitor CongelaPianificato 1min Questo evento controlla se un evento Freeze è pianificato nel nodo. Per altre informazioni, vedere https://aka.ms/aks/scheduledevents
Monitor Personalizzato del Plugin Riavvio programmato 1min Questo evento controlla se è pianificato un evento di riavvio nel nodo Controlla https://aka.ms/aks/scheduledevents per altre informazioni
CustomPluginMonitor Ridistribuzione Programmata 1min Questo evento controlla se è pianificato un evento di ridistribuimento nel nodo. Per altre informazioni, vedere https://aka.ms/aks/scheduledevents
CustomPluginMonitor TerminaProgrammato 1min Questo evento controlla se un evento Terminate è pianificato nel nodo. Per altre informazioni, vedere https://aka.ms/aks/scheduledevents
CustomPluginMonitor PreemzioneProgrammata 2s Questo evento controlla se un evento Preempt è pianificato nel nodo. Per altre informazioni, vedere https://aka.ms/aks/scheduledevents
CustomPluginMonitor DNSProblem
SystemLogMonitor OOMKilling
Monitor di Registro di Sistema TaskHung
SystemLogMonitor UnregisterNetDevice
SystemLogMonitor KernelOops
Monitor dei Registro di Sistema DockerSocketCannotConnect
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
Monitor del Registro di Sistema CNICannotStatFS
Monitoraggio del Registro di Sistema PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
Monitor del Registro di Sistema ContainerdStart

In alcuni casi, il servizio Azure Kubernetes blocca e svuota automaticamente il nodo per ridurre al minimo le interruzioni dei carichi di lavoro. Per ulteriori informazioni sugli eventi e le azioni, vedere Autodrenaggio del nodo.

EgressBlocked

Di seguito è riportato l'elenco degli endpoint controllati da EgressBlocked

Nota

Gli endpoint effettivi dipendono dal tipo di cluster e dalla posizione in cui è ospitata (cloud pubblico e cloud Airgapped). Vedere la documentazione per l'accesso in uscita qui. La documentazione è per i cloud pubblici

TIPO Esempio Nota
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com"
Gestore delle Risorse https://management.azure.com
Pacchetti https://packages.microsoft.com
Kube Binary https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Controllare le condizioni e gli eventi del nodo

  • Controllare le condizioni e gli eventi del nodo usando il comando kubectl describe node.

    kubectl describe node my-aks-node
    

    L'output dovrebbe essere simile all'output condensato di esempio seguente:

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

Questi eventi sono disponibili anche in Informazioni dettagliate contenitore tramite KubeEvents.

Metrica

NPD espone anche le metriche di Prometheus in base ai problemi del nodo, che è possibile usare per il monitoraggio e l'invio di avvisi. Queste metriche vengono esposte sulla porta 20257 dell'indirizzo IP del nodo e Prometheus possono eliminarle.

L'esempio YAML seguente mostra una configurazione di scrape che è possibile usare con il componente aggiuntivo Prometheus gestito di Azure come 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']

L'esempio seguente illustra le metriche raschiate:

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

Passaggi successivi

Per altre informazioni sul server dei criteri di rete, vedere kubernetes/node-problem-detector.