Partilhar via


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

O Node Problem Detetor (NPD) é um componente Kubernetes de código aberto que deteta problemas relacionados ao nó e relata sobre eles. É executado como um serviço que funciona em cada nó do cluster e recolhe várias métricas e informações do sistema, como utilização da CPU, utilização do disco e conectividade de rede. Quando deteta um problema, gera eventos e/ou condições de nós. O Azuere Kubernetes Service (AKS) utiliza o NPD para monitorizar e gerir nós em clusters do Kubernetes em execução na plataforma cloud do Azure. A extensão AKS Linux ativa o NPD por predefinição.

Nota

As atualizações para NPD são independentes da imagem do nó e dos processos de atualização da versão do Kubernetes. Se um pool de nós não estiver íntegro (ou seja, em um 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 torna o nó indisponível. AKS utiliza as seguintes condições de nó de NPD para identificar problemas permanentes no nó. O NPD também emite eventos Kubernetes correspondentes.

Tipo de problema de Daemon NodeCondition Razão
CustomPluginMonitor Problema de Corrupção do Sistema de Arquivos Corrupção_do_Sistema_de_Ficheiros_Detectada
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor ProblemaNoTempoDeExecuçãoDoContêiner ORuntimeDoContentorEstáIndisponível
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice Desregistar o dispositivo de rede
CustomPluginMonitor Reinício Frequente do Kubelet Reinício Frequente do Kubelet
Plugin Personalizado de Monitorização Reinício Frequente do Containerd Reinício Frequente do Containerd
CustomPluginMonitor Reinício Frequente do Docker Reinício Frequente do Docker
Monitor de Registos do Sistema KernelDeadlock DockerHung
Monitor de Registos do Sistema ReadonlyFilesystem O sistema de ficheiros está em modo de leitura apenas

eventos

O NPD emite eventos com informações relevantes para ajudá-lo a diagnosticar problemas subjacentes.

Tipo de problema de Daemon Razão Frequência Descrição Ação
CustomPluginMonitor EgressBlocked 30 minutos Este evento verifica a conectividade com pontos de extremidade externos Verifique se um firewall ou NSG está a bloquear a conectividade com o ponto de extremidade que está a ser assinalado.
CustomPluginMonitor Corrupção_do_Sistema_de_Ficheiros_Detectada 5 minutos Isso verifica se há corrupção no sistema de arquivos revelada pelo docker
CustomPluginMonitor (Monitor de Plugin Personalizado) KubeletIsDown década de 1930 Isso verifica se o serviço kubelet está em execução e íntegro
CustomPluginMonitor ORuntimeDoContentorEstáIndisponível década de 1930 Este evento verifica se o runtime do contentor, por exemplo: containerd, está a funcionar e está íntegro.
CustomPluginMonitor FreezeScheduled 1 minuto Este evento verifica se um Evento de Congelamento está agendado no nó. Consulte https://aka.ms/aks/scheduledevents para obter mais informações
CustomPluginMonitor ReinícioProgramado 1 minuto Este evento verifica se um evento de reinicialização está agendado no nó Verificar https://aka.ms/aks/scheduledevents se há mais informações
CustomPluginMonitor RedesdobramentoProgramado 1 minuto Este evento verifica se um Evento de Reimplantação está agendado no nó. Consulte https://aka.ms/aks/scheduledevents para obter mais informações
CustomPluginMonitor TerminarProgramado 1 minuto Esse evento verifica se um Evento de Encerramento está agendado no nó. Consulte https://aka.ms/aks/scheduledevents para obter mais informações
CustomPluginMonitor PreempçãoAgendada 2s Este evento verifica se um evento preemptivo está agendado no nó. Consulte https://aka.ms/aks/scheduledevents para obter mais informações
CustomPluginMonitor DNSProblem
Monitor de Registos do Sistema OOMKilling
Monitor de Registos do Sistema TaskHung
Monitor de Registos do Sistema Desregistar o dispositivo de rede
Monitor de Registos do Sistema KernelOops
Monitor de Registos do Sistema DockerSocketNãoConsegueConectar
Monitor de Registos do Sistema KubeletRPCDeadlineExceeded (Erro: Prazo Excedido)
Monitor de Registos do Sistema KubeletRPCNoSuchContainer
Monitor de Registos do Sistema CNICannotStatFS
Monitor de Registos do Sistema PLEGUnhealthy
Monitor de Registos do Sistema KubeletStart
Monitor de Registos do Sistema DockerStart
Monitor de Registos do Sistema ContainerdStart

Em certos casos, o AKS isola e drena automaticamente o nó para minimizar interrupções nas cargas de trabalho. Para obter mais informações sobre os eventos e ações, consulte Drenagem automática de nó.

EgressBlocked

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

Nota

Os pontos de extremidade reais dependerão do tipo de cluster e do local onde ele está hospedado (nuvem pública vs nuvens Airgaped). Consulte a documentação sobre acesso externo aqui. A documentação é para nuvens públicas

Tipo Exemplo Nota
MCR https://mcr.microsoft.com
Microsoft Entra ID (um serviço de identificação da Microsoft) https://login.microsoftonline.com"
Gestor de Recursos https://management.azure.com
Pacotes https://packages.microsoft.com
Kube Binário https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Verifique as condições dos nós e os eventos

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

    kubectl describe node my-aks-node
    

    Sua saída deve ser semelhante ao exemplo de saída condensada 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 no Container Insights por meio do KubeEvents.

Métricas

O NPD também expõe métricas do Prometheus baseadas nos problemas dos nós, que podem ser utilizadas para monitorização e alertas. Essas métricas são expostas na porta 20257 do IP do nó e o Prometheus pode recolhê-las.

O exemplo YAML a seguir mostra uma configuração de raspagem que você pode usar com o Azure Managed Prometheus add on 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óximos passos

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