Compartilhar via


Detector de Problemas de Nó (NPD) nos nós do Serviço Azure Kubernetes (AKS)

O Detector de Problemas de Nó (NPD) é um componente de código aberto do Kubernetes que detecta problemas relacionados a nós e os relata. Ele é executado como um serviço systemd em cada nó do cluster e coleta várias métricas e informações do sistema, como uso da CPU, uso do disco e conectividade de rede. Quando detecta um problema, ele gera eventos e/ou condições de nó. O Serviço de Kubernetes do Azure (AKS) usa o NPD para monitorar e gerenciar nós em um cluster do Kubernetes em execução na plataforma de nuvem do Azure. A extensão AKS Linux habilita o NPD por padrão.

Observação

As atualizações para o NPD são independentes dos processos de atualização da imagem de nó e da versão do Kubernetes. Se um pool de nós não estiver íntegro (ou seja, estiver em estado de falha), novas versões do NPD não serão instaladas.

Condições do nó

As condições do nó indicam um problema permanente que o torna indisponível. O AKS utiliza as seguintes condições de nó de NPD para expor problemas permanentes no nó. O NPD também emite eventos correspondentes do Kubernetes.

Tipo de Problema do Daemon NodeCondition Motivo Tipo de computação
CustomPluginMonitor Problema de Corrupção no Sistema de Arquivos DetectadaCorrupçãoNoSistemaDeArquivos Finalidade geral
CustomPluginMonitor KubeletProblem KubeletIsDown Finalidade geral
CustomPluginMonitor ContainerRuntimeProblem ContainerRuntimeIsDown Finalidade geral
CustomPluginMonitor VMEventScheduled VMEventScheduled Finalidade geral
CustomPluginMonitor FrequentUnregisterNetDevice UnregisterNetDevice Finalidade geral
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart Finalidade geral
CustomPluginMonitor FrequentContainerdRestart FrequentContainerdRestart Finalidade geral
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart Finalidade geral
CustomPluginMonitor GPUMissing A contagem de GPU observada não corresponde à contagem de GPU esperada Somente GPU
CustomPluginMonitor Status do NVLink: Inativo Status do NVLink: Inativo Somente GPU
CustomPluginMonitor XIDErrors Erros de XID presentes no log do kernel Somente GPU
CustomPluginMonitor IBLinkFlapping Conectividade intermitente do dispositivo InfiniBand Somente GPU
SystemLogMonitor KernelDeadlock DockerHung Finalidade geral
SystemLogMonitor ReadonlyFilesystem FilesystemIsReadOnly Finalidade geral

Observação

As condições do nó GPU only atualmente se aplicam aos pools de nós do AKS com tamanho de VMs Standard_ND96asr_v4 ou Standard_ND96isr_H100_v5 e têm suporte em pools de nós de GPU padrão e GPUs habilitados para MIG.

Eventos

O NPD emite eventos com informações relevantes para ajudar você a diagnosticar problemas subjacentes.

Tipo de Problema do Daemon Motivo Frequência Descrição Ação
CustomPluginMonitor EgressBlocked 30 minutos Esse evento verifica se há conectividade com pontos de extremidade externos Verifique se um firewall ou NSG está bloqueando a conectividade com o ponto de extremidade sinalizado
CustomPluginMonitor DetectadaCorrupçãoNoSistemaDeArquivos 5 minutos Isso verifica se o sistema de arquivos foi corrompido pelo docker
CustomPluginMonitor KubeletIsDown 30 s Isso verifica se o serviço kubelet está em execução e funcionando corretamente
CustomPluginMonitor ContainerRuntimeIsDown 30 s Esse evento verifica se o runtime do contêiner, como o containerd, está em execução e saudável.
CustomPluginMonitor FreezeScheduled 1min Esse evento verifica se um Evento de Congelamento está agendado no nó. Verifique https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor RebootScheduled 1min Esse evento verifica se um evento de reinicialização está agendado no nó Verificar https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor RedeployScheduled 1min Esse evento verifica se um Evento de Reimplantação está agendado no nó. Verifique https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor TerminateScheduled 1min Esse evento verifica se um Evento de Término está agendado no nó. Verifique https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor PreemptScheduled 2s Esse evento verifica se um Evento de Preempção está agendado no nó. Verifique https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor DNSProblem
SystemLogMonitor OOMKilling
SystemLogMonitor TaskHung
SystemLogMonitor UnregisterNetDevice
SystemLogMonitor KernelOops
SystemLogMonitor Falha na Conexão com DockerSocket
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

Em determinadas instâncias, o AKS automaticamente monitora e esvazia o nó para minimizar a interrupção das cargas de trabalho. Para obter mais informações sobre os eventos e ações, consulte Node autodrain.

EgressBlocked

A lista de pontos de extremidade verificados pelo EgressBlocked está listada abaixo

Observação

Os pontos finais reais dependerão do tipo do cluster e do local onde ele está hospedado (nuvem pública versus nuvens isoladas). Consulte a documentação sobre o acesso de saída aqui. A documentação é para nuvens públicas

Tipo Exemplo Observação
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com"
Resource Manager https://management.azure.com
Pacotes https://packages.microsoft.com
Binário do Kube https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Verificar as condições e eventos do nó

  • Verifique as condições e os eventos do nó usando o comando kubectl describe node.

    kubectl describe node my-aks-node
    

    Sua saída deve ser semelhante à saída condensada do exemplo a seguir:

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

Esses eventos também estão disponíveis nos Insights do Contêiner através do KubeEvents.

Métricas

O NPD também expõe as métricas do Prometheus com base nos problemas do nó, que você pode usar para monitoramento e alerta. Essas métricas são expostas na porta 20257 do Node IP e o Prometheus pode extraí-las.

O exemplo de YAML a seguir mostra uma configuração de extração que você pode usar com o complemento Azure Managed Prometheus como um 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']

O exemplo a seguir mostra as métricas extraídas:

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

Próximas etapas

Para obter mais informações sobre o NPD, consulte kubernetes/node-problem-detector.