Compartir a través de


Detector de problemas de nodo (NPD) en nodos de Azure Kubernetes Service (AKS)

Detector de problemas de nodo (NPD) es un complemento de Kubernetes de código abierto que detecta problemas relacionados con el nodo e informa sobre ellos. Se ejecuta como un servicio de systemd en cada nodo del clúster y recopila diversas métricas e información del sistema, como el uso de la CPU, el uso del disco y la conectividad de red. Cuando detecta un problema, genera eventos o condiciones de nodo. Azure Kubernetes Service (AKS) usa NPD para supervisar y administrar nodos en un clúster de Kubernetes que se ejecuta en la plataforma en la nube de Azure. La extensión de LINUX de AKS habilita NPD de forma predeterminada.

Nota:

Las actualizaciones a NPD son independientes de la imagen de nodo y los procesos de actualización de la versión de Kubernetes. Si un grupo de nodos está en un estado no saludable (es decir, en un estado fallido), no se instalarán nuevas versiones de NPD.

Condiciones del nodo

Las condiciones del nodo indican un problema permanente que hace que el nodo no esté disponible. AKS usa las siguientes condiciones del nodo de NPD para exponer problemas permanentes en el nodo. NPD también emite los eventos de Kubernetes correspondientes.

Tipo de demonio del problema Condición del Nodo Motivo
CustomPluginMonitor ProblemaDeCorrupciónDelSistemaDeArchivos CorrupciónDelSistemaDeArchivosDetectada
CustomPluginMonitor KubeletProblem KubeletIsDown
CustomPluginMonitor Problema de tiempo de ejecución del contenedor ContainerRuntimeIsDown
CustomPluginMonitor VMEventScheduled VMEventScheduled
CustomPluginMonitor FrequentUnregisterNetDevice Anular el registroNetDevice
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart
CustomPluginMonitor FrequentContainerdRestart FrequentContainerdRestart
CustomPluginMonitor FrequentDockerRestart FrequentDockerRestart
SystemLogMonitor KernelDeadlock DockerHung
SystemLogMonitor SistemaDeArchivosSoloLectura FilesystemIsReadOnly

Eventos

NPD emite eventos con información relevante para ayudarle a diagnosticar problemas subyacentes.

Tipo de demonio del problema Motivo Frecuencia Descripción Acción
CustomPluginMonitor EgressBlocked 30 minutos Este evento comprueba si hay conectividad con puntos de conexión externos Compruebe si un firewall o un grupo de seguridad de red que bloquean la conectividad al punto de conexión se marcan
CustomPluginMonitor CorrupciónDelSistemaDeArchivosDetectada 5 minutos Esto comprueba si se producen daños en el sistema de archivos detectados por Docker.
CustomPluginMonitor KubeletIsDown 30 segundos Esto comprueba si el servicio kubelet se está ejecutando y en buen estado
CustomPluginMonitor ContainerRuntimeIsDown 30 segundos Este evento comprueba si el runtime de contenedores, por ejemplo, containerd, está en ejecución y en buen estado.
CustomPluginMonitor FreezeScheduled 1 minutos Este evento verifica si un Evento de Congelación está programado en el nodo. Consulte https://aka.ms/aks/scheduledevents para obtener más información
CustomPluginMonitor RebootScheduled 1 minutos Este evento comprueba si se programa un evento de reinicio en el nodo Comprobar https://aka.ms/aks/scheduledevents para obtener más información.
CustomPluginMonitor RedeployScheduled 1 minutos Este evento comprueba si se programa un evento de reimplementación en el nodo. Consulte https://aka.ms/aks/scheduledevents para obtener más información
CustomPluginMonitor TerminateScheduled 1 minutos Este evento comprueba si se programa un evento Terminate en el nodo. Consulte https://aka.ms/aks/scheduledevents para obtener más información
CustomPluginMonitor PreemptScheduled 2s Este evento comprueba si se programa un evento de adelantamiento en el nodo. Consulte https://aka.ms/aks/scheduledevents para obtener más información
CustomPluginMonitor DNSProblem
SystemLogMonitor OOMKilling
SystemLogMonitor TaskHung
SystemLogMonitor Anular el registroNetDevice
SystemLogMonitor KernelOops
SystemLogMonitor ErrorDockerSocketNoSePuedeConectar
SystemLogMonitor KubeletRPCDeadlineExceeded
SystemLogMonitor KubeletRPCNoSuchContainer
SystemLogMonitor CNICannotStatFS
SystemLogMonitor PLEGUnhealthy
SystemLogMonitor KubeletStart
SystemLogMonitor DockerStart
SystemLogMonitor ContainerdStart

En determinados casos, AKS acordona y purga automáticamente el nodo para minimizar la interrupción de las cargas de trabajo. Para obtener más información sobre los eventos y las acciones, vea Node autodrain.

EgressBlocked

A continuación se muestra la lista de puntos de conexión comprobados por EgressBlocked.

Nota:

Los puntos de conexión reales dependerán del tipo de clúster y de la ubicación donde se hospede (nube pública frente a nubes aisladas). Revise la documentación para obtener acceso saliente aquí. La documentación es para nubes públicas.

Tipo Ejemplo Nota:
MCR https://mcr.microsoft.com
Microsoft Entra ID https://login.microsoftonline.com"
Administrador de recursos https://management.azure.com
Paquetes https://packages.microsoft.com
Kube Binary https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz

Comprobar las condiciones y eventos del nodo

  • Compruebe las condiciones y eventos del nodo mediante el comando kubectl describe node.

    kubectl describe node my-aks-node
    

    El resultado debería ser similar a la siguiente salida reducida de ejemplo:

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

Estos eventos también están disponibles en Información sobre Container a través de KubeEvents.

Métricas

NPD también expone las métricas de Prometheus basadas en los problemas de nodo, que puede usar para la supervisión y las alertas. Estas métricas se exponen en el puerto 20257 de la dirección IP del nodo y se pueden extraer mediante Prometheus.

En el ejemplo siguiente, YAML muestra una configuración de extracción que puede usar con el complemento Prometheus administrado de Azure como 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']

En el ejemplo siguiente se muestran las métricas extraídas:

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

Pasos siguientes

Para más información sobre NPD, consulte kubernetes/node-problem-detector.