El detector de problemas del nodo es una biblioteca de código abierto que supervisa el estado de los nodos y detecta problemas comunes de los nodos, como problemas de hardware, kernel o entorno de ejecución de contenedores. En GKE en Bare Metal, se ejecuta como un servicio systemd en cada nodo.
A partir de la versión 1.10.0 de GKE en Bare Metal, el detector de problemas de nodos está habilitado de forma predeterminada.
¿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).
Algunos de los problemas NodeConditions
que descubrió el detector de problemas de nodos son los siguientes:
KernelDeadlock
ReadonlyFilesystem
FrequentKubeletRestart
FrequentDockerRestart
FrequentContainerdRestart
FrequentUnregisterNetDevice
KubeletUnhealthy
ContainerRuntimeUnhealthy
CorruptDockerOverlay2
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.
Cómo ver los problemas detectados
Ejecuta el siguiente comando kubectl describe
en un nodo para buscar NodeConditions
y Events
:
kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME
En el comando, reemplaza las siguientes entradas por información específica de tu entorno:
KUBECONFIG_PATH
: Es la ruta al archivo kubeconfig del clúster de destino. (La ruta al archivo kubeconfig suele serbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. Sin embargo, si especificaste tu lugar de trabajo con la marca WORKSPACE_DIR, la ruta esWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
).NODE_NAME
: Es el nombre del nodo sobre el que deseas obtener información de estado.
Cómo habilitar o inhabilitar el Detector de problemas del nodo
Sigue estos pasos para habilitar el detector de problemas del nodo en un clúster específico:
Edita el archivo
ConfigMap
del clúster llamadonode-problem-detector-config
kubectl --kubeconfig=KUBECONFIG_PATH edit configmap \ node-problem-detector-config --namespace=CLUSTER_NAMESPACE
Este comando inicia de forma automática un editor de texto (como vim o nano) en el que puedes editar el archivo
node-problem-detector-config
. En el comando, reemplaza las siguientes entradas por información específica del entorno de tu clúster:- KUBECONFIG_PATH: Es la ruta al archivo kubeconfig del clúster de administrador. (La ruta al archivo kubeconfig suele ser
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. Sin embargo, si especificaste tu lugar de trabajo con la marca WORKSPACE_DIR, la ruta de acceso esWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. - CLUSTER_NAMESPACE: Es el espacio de nombres del clúster en el que deseas habilitar el detector de problemas del nodo.
- KUBECONFIG_PATH: Es la ruta al archivo kubeconfig del clúster de administrador. (La ruta al archivo kubeconfig suele ser
Inicialmente, el
ConfigMap
denode-problem-detector-config
no tiene un campodata
. Agrega el campodata
al mapa de configuración con el siguiente par clave-valor:data: enabled: "true"
Para inhabilitar el detector de problemas del nodo en un espacio de nombres del clúster, realiza los pasos 1 y 2 anteriores, pero en el paso 2, cambia el valor de la clave enabled
a “false”.
Cómo iniciar o detener el Detector de problemas del nodo
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
GKE on Bare Metal 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 Stackdriver o Prometheus.
- Personalizar qué
NodeConditions
oEvents
buscar. - Ejecutar secuencias de comandos de supervisión definidas por el usuario.