Detector de problemas del nodo

La biblioteca de código abierto Node Problem Detector te permite supervisar el estado de los nodos y detectar problemas comunes de hardware, kernel o entorno de ejecución de contenedores. En Google Distributed Cloud, se ejecuta como un servicio systemd en cada nodo y está habilitado de forma predeterminada en la versión 1.10.0 y posteriores. En la versión 1.32 y posteriores, el detector de problemas de nodos también puede reparar automáticamente algunos problemas de nodos.

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud. También puedes consultar Cómo obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:

  • Requisitos para abrir un caso de asistencia.
  • Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas.
  • Componentes compatibles.

¿Qué problemas detecta?

El detector de problemas del nodo puede detectar los siguientes tipos de problemas:

  • Problemas de entorno de ejecución del contenedor, como daemons de entorno de ejecución que no responden
  • Problemas de hardware, como fallas de CPU, memoria o disco
  • Problemas de kernel, como condiciones de interbloqueo de kernel o sistemas de archivos dañados

Se ejecuta en un nodo y, además, informa problemas al servidor de la API de Kubernetes como NodeCondition o como Event. (NodeCondition es un problema que hace que un nodo no pueda ejecutar Pods, mientras que Event es un problema temporal que tiene un efecto limitado en los Pods, pero se considera lo suficientemente importante como para informarlo).

En la siguiente tabla, se describen los NodeConditions que detecta el detector de problemas de nodos y si se pueden reparar automáticamente o no:

Condición Motivo Reparación automática admitida1
KernelDeadlock Los procesos del kernel se detienen mientras esperan que otros procesos del kernel liberen los recursos necesarios. No
ReadonlyFilesystem El clúster no puede escribir en el sistema de archivos debido a un problema, como que el disco esté lleno. No
FrequentKubeletRestart El kubelet se reinicia con frecuencia, lo que impide que el nodo ejecute Pods de manera eficaz. No
FrequentDockerRestart El daemon de Docker se reinició más de 5 veces en 20 minutos. No
FrequentContainerdRestart El entorno de ejecución de contenedores se reinició más de 5 veces en 20 minutos. No
FrequentUnregisterNetDevice El nodo experimenta cancelaciones de registro frecuentes de dispositivos de red. No
CorruptDockerOverlay2 Hay problemas o incoherencias en el sistema de archivos dentro del directorio del controlador de almacenamiento overlay2 de Docker. No
OrphanContainers2 Se borró un Pod específico de un contenedor, pero el contenedor correspondiente sigue existiendo en el nodo. No
ContainerRuntimeUnhealthy El entorno de ejecución de contenedores no funciona correctamente, lo que impide que los Pods se ejecuten o se programen en el nodo. Sí
FailedCgroupRemoval2 Algunos cgroups están en estado de inmovilización. Sí
KubeletUnhealthy El nodo no funciona correctamente o no responde al plano de control. Sí

1 En las versiones 1.32 y posteriores, se admite la capacidad de reparar automáticamente los problemas detectados en determinadas condiciones.

2 Compatible con las versiones 1.32 y posteriores.

Estos son algunos ejemplos de los tipos de problemas Events que informó el detector de problemas de nodos:

  • Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
  • Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.

¿Qué problemas repara?

A partir de la versión 1.32, cuando el detector de problemas de nodos descubre un NodeConditions seleccionado, puede reparar automáticamente el problema correspondiente en el nodo. Los siguientes NodeConditions admiten la reparación automática:

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

Cómo ver los problemas detectados

Ejecuta el siguiente comando kubectl describe para buscar NodeConditions y Events:

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

Reemplaza lo siguiente:

  • NODE_NAME: Es el nombre del nodo que estás verificando.

  • KUBECONFIG: Es la ruta del archivo kubeconfig del clúster.

Cómo habilitar o inhabilitar el Detector de problemas de nodos

De forma predeterminada, el detector de problemas de nodos está habilitado, pero se puede inhabilitar en el recurso ConfigMap node-problem-detector-config. A menos que lo inhabilites de forma explícita, el detector de problemas de nodos supervisa de forma continua los nodos en busca de condiciones específicas que indiquen problemas para el nodo.

Para inhabilitar el detector de problemas del nodo en un clúster específico, sigue estos pasos:

  1. Edita el recurso ConfigMap node-problem-detector-config:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Reemplaza lo siguiente:

    • KUBECONFIG: Es la ruta del archivo kubeconfig del clúster.

    • CLUSTER_NAMESPACE: Es el espacio de nombres del clúster en el que deseas habilitar el detector de problemas del nodo.

    Este comando inicia de forma automática un editor de texto en el que puedes editar el recurso node-problem-detector-config.

  2. Establece data.enabled como false en la definición del recurso node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "false"
    

    Inicialmente, el ConfigMap node-problem-detector-config no tiene un campo data, por lo que es posible que debas agregarlo.

  3. Para actualizar el recurso, guarda los cambios y cierra el editor.

Para volver a habilitar el detector de problemas de nodos, realiza los pasos anteriores, pero establece data.enabled en true en la definición del recurso node-problem-detector-config.

Cómo habilitar e inhabilitar la reparación automática

A partir de la versión 1.32, Node Problem Detector verifica si hay NodeConditions específicos y repara automáticamente el problema correspondiente en el nodo. De forma predeterminada, la reparación automática está habilitada para los NodeConditions compatibles, pero se puede inhabilitar en el recurso ConfigMap de node-problem-detector-config.

Para inhabilitar el comportamiento de reparación automática en un clúster determinado, sigue estos pasos:

  1. Edita el recurso ConfigMap node-problem-detector-config:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Reemplaza lo siguiente:

    • KUBECONFIG: Es la ruta del archivo kubeconfig del clúster.

    • CLUSTER_NAMESPACE: Es el espacio de nombres del clúster en el que deseas habilitar el detector de problemas del nodo.

    Este comando inicia de forma automática un editor de texto en el que puedes editar el recurso node-problem-detector-config.

  2. Establece data.check-only como true en la definición del recurso node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "true"
      check-only: "true"
    

    Inicialmente, el ConfigMap node-problem-detector-config no tiene un campo data, por lo que es posible que debas agregarlo. Si configuras check-only como "true", se inhabilita la reparación automática para todas las condiciones admitidas.

  3. Para actualizar el recurso, guarda los cambios y cierra el editor.

Para volver a habilitar la reparación automática en todos los NodeConditions que la admiten, establece data.check-only en "false" en el ConfigMap node-problem-detector-config.

Cómo detener y reiniciar el Detector de problemas de nodos

El detector de problemas del nodo se ejecuta como un servicio systemd en cada nodo. Si deseas administrar el detector de problemas del nodo de un nodo determinado, usa SSH para acceder al nodo y ejecuta los siguientes comandos de systemctl.

  • Para inhabilitar el detector de problemas del nodo, ejecuta el siguiente comando:

    systemctl stop node-problem-detector
    
  • Para reiniciar el detector de problemas del nodo, ejecuta el siguiente comando:

    systemctl restart node-problem-detector
    
  • Para comprobar si el detector de problemas del nodo se ejecuta en un nodo en particular, ejecuta el siguiente comando:

    systemctl is-active node-problem-detector
    

Características no compatibles

Google Distributed Cloud no admite las siguientes personalizaciones del detector de problemas de nodos:

  • Exportar informes del detector de problemas de nodos a otros sistemas de supervisión, como Cloud Monitoring o Prometheus.
  • Personalizar qué NodeConditions o Events buscar.
  • Ejecutar secuencias de comandos de supervisión definidas por el usuario.

¿Qué sigue?

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud. También puedes consultar Cómo obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:

  • Requisitos para abrir un caso de asistencia.
  • Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas.
  • Componentes compatibles.