Resolución de problemas de nodos trabajadores en estado Critical o NotReady
Los nodos trabajadores del clúster pasan a un estado Critical o NotReady cuando dejan de comunicarse con el nodo maestro del clúster. Cuando esto ocurre, los nodos de trabajo se marcan como Critical en la
IBM Cloud interfaz de usuario o al ejecutar ibmcloud oc worker comandos, y como NotReady en los Red Hat OpenShift paneles de control y al ejecutar oc get nodes. Existen varias razones por las que la comunicación
se detiene entre los nodos trabajadores y el nodo maestro del clúster. Siga estos pasos para resolver problemas de los nodos trabajadores en estos estados.
Comprueba el panel de IBM Cloud control de estado y salud para ver si hay notificaciones o actualizaciones de mantenimiento que puedan ser relevantes para tus nodos de trabajo. Estas notificaciones o actualizaciones pueden ayudar a determinar la causa de las anomalías del nodo trabajador.
Comprobar las causas comunes de las anomalías de nodo trabajador
Existen varias razones por las que la comunicación se detiene entre los nodos trabajadores y el nodo maestro del clúster. Compruebe si los siguientes problemas comunes están causando la interrupción.
- El trabajador se ha suprimido, recargado, actualizado, sustituido o reiniciado
- Los nodos trabajadores pueden mostrar temporalmente un estado
CriticaloNotReadycuando se suprimen, se vuelven a cargar, se actualizan o se sustituyen. Si alguna de estas acciones se ha iniciado en el nodo trabajador, ya sea manualmente o como parte de una configuración de automatización como, por ejemplo, el programa de escalado automático de clústeres, espere a que se completen las acciones. A continuación, vuelva a comprobar el estado de los nodos trabajadores. Si alguno de los trabajadores permanece en el estadoCriticaloNotReady, vuelva a cargar o sustituya los trabajadores afectados. - Si un nodo trabajador se ha recargado o sustituido e inicialmente funciona correctamente, pero después de algún tiempo vuelve a un estado
CriticaloNotReady, es probable que alguna carga de trabajo o componente del trabajador esté causando el problema. Consulte Depuración de nodos trabajadores para aislar la carga de trabajo del problema.
Un nodo trabajador puede terminar en un estado Critical o NotReady si se ha rearrancado sin que se haya acordonado y vaciado antes. Si este es el caso, la espera de que se complete el rearranque no resuelve el problema.
Volver a cargar o sustituir el trabajador afectado. Si el problema
persiste, continúe con los pasos de resolución de problemas.
- El nodo trabajador se ha apagado involuntariamente
- Clústeres clásicos En lalista de recursos de la consola deIBM Cloud, los nodos trabajadores de la infraestructura
clásica se clasifican como recursos de cálculo o máquinas virtuales. A veces, es posible que un usuario no se dé cuenta de que estos recursos funcionan como nodos trabajadores de clúster y que pueden apagar los nodos trabajadores
de forma involuntaria. Los nodos trabajadores que están apagados pueden aparecer en el estado
CriticaloNotReady. Asegúrese de que los nodos trabajadores afectados no estén apagados.
Pasos de resolución de problemas
Si los nodos trabajadores permanecen en el estado Critical o NotReady después de direccionar las causas comunes, continúe con los siguientes pasos de resolución de problemas.
Si un nodo trabajador que ha recargado o sustituido anteriormente está en estado deploy_failed o provision_failed al ejecutar ibmcloud ks workers, siga los pasos de la sección Todos los nodos trabajadores de un clúster se ven afectados,
aunque no todos los nodos se vean afectados. Si se indica un estado diferente, consulte Estados de nodo trabajador para ver los pasos para resolver los problemas del
nuevo trabajador. No sustituya ni vuelva a cargar ningún nodo trabajador adicional.
Si uno o algunos nodos de trabajador se ven afectados
Si sólo algunos, pero no todos, de los nodos trabajadores del clúster están en un estado Critical o NotReady, siga estos pasos para determinar la causa de la interrupción y resolver el problema. Si los nodos trabajadores
afectados son todos de la misma zona, subred o VLAN, continúe en la sección siguiente.
-
Consulta los detalles del nodo específico.
oc describe node <node-IP-address> -
En la salida, compruebe la sección Condiciones para determinar si el nodo está experimentando problemas de memoria, disco o PID. Esta información puede indicar que el nodo se está quedando sin ese tipo de recurso. Esta situación puede producirse por alguna de las siguientes razones:
- Agotamiento de memoria o CPU causado por una falta de solicitudes y límites adecuados en los pods.
- Los discos de trabajador están llenos, a veces debido a registros de pod grandes o a la salida de pod en el propio nodo.
- Pérdidas de memoria lentas que se acumulan con el tiempo, lo que puede causar problemas a los trabajadores que no se han actualizado en más de un mes.
- Errores y bloqueos que afectan al kernel de Linux.
-
Si puede determinar la causa del problema a partir de la información de la sección Condiciones, siga los pasos de Depuración de nodos trabajadores para aislar la carga de trabajo del problema.
-
Si los pasos anteriores no resuelven el problema, vuelva a cargar o sustituya los trabajadores afectados de uno en uno.
Si todos los nodos trabajadores de una sola zona, subred o VLAN se ven afectados
Si todos los nodos trabajadores de una zona, subred o VLAN se encuentran en un estado Critical o NotReady, pero todos los demás nodos trabajadores del clúster funcionan con normalidad, es posible que haya un problema
con un componente de red. Siga los pasos de Si todos los nodos trabajadores de un clúster están afectados, especialmente los pasos relacionados con los componentes de red que pueden afectar a
la zona, subred o VLAN, como por ejemplo reglas de cortafuegos o pasarela, ACL o rutas personalizadas, o políticas de red de Calico y Kubernetes.
Si ha seleccionado los componentes de red y todavía no puede resolver el problema, recopile los datos del nodo trabajador y abra una incidencia de soporte.
Si todos los nodos trabajadores de un clúster se ven afectados
Si todos los nodos trabajadores del clúster muestran Critical o NotReady al mismo tiempo, es posible que haya un problema con el clúster apiserver o la vía de acceso de red entre los nodos trabajadores
y el apiserver. Siga estos pasos de resolución de problemas para determinar la causa y resolver el problema.
Algunos pasos son específicos de un área especializada, como la red o la automatización. Consulte con el administrador o equipo correspondiente de su organización antes de completar estos pasos.
-
Compruebe si se han producido cambios recientes en el clúster, entorno o cuenta que puedan afectar a los nodos trabajadores. Si es así, revierta los cambios y, a continuación, compruebe el estado del nodo trabajador para determinar si los cambios han causado el problema.
- Para los clústeres clásicos, compruebe cualquier cortafuegos o pasarela, como por ejemplo Virtual Router Appliance, Vyatta o Juniper que gestiona el tráfico para los trabajadores del clúster. Busque cambios o problemas que puedan descartar o redireccionar el tráfico de los trabajadores del clúster.
- Para los clústeres de VPC, compruebe si se han realizado cambios en el grupo de seguridad predeterminado y las ACL en la VPC o en los nodos trabajadores. Si se han realizado modificaciones, asegúrese de que está permitiendo todo el tráfico necesario desde los nodos trabajadores del clúster al maestro del clúster, al registro de contenedor y a otros servicios críticos. Para obtener más información, consulte Comprensión de las redes VPC de clúster seguras por defecto y Creación y gestión de grupos de seguridad VPC y Control del tráfico con ACL.
- Para los clústeres de VPC, compruebe si hay cambios en las reglas de direccionamiento personalizadas que puedan estar bloqueando el tráfico del clúster
apiserver. - Compruebe las políticas de red de Calico o Kubernetes que se aplican al clúster y asegúrese de que no bloquean el tráfico desde el nodo trabajador al clúster
apiservice, el registro de contenedor u otros servicios críticos.
-
Compruebe si las aplicaciones, la seguridad o los componentes de supervisión del clúster están sobrecargando el clúster
apiservercon solicitudes, lo que puede provocar interrupciones para los nodos trabajadores. -
Si ha añadido recientemente algún componente al clúster, elimínelo. Si ha realizado cambios en algún componente existente del clúster, revierta los cambios. A continuación, compruebe el estado de los nodos trabajadores para ver si los nuevos componentes o cambios estaban causando el problema.
-
Compruebe si hay cambios en los webhooks del clúster, lo que puede interrumpir las solicitudes de
apiservero bloquear la capacidad de un nodo trabajador para conectarse con elapiserver. Comprueba si hay webhooks que rechazan peticiones. Ejecute el siguiente comando para obtener una lista de webhooks que están rechazando peticiones.kubectl get --raw /metrics | grep apiserver_admission_webhook_admission_duration_seconds -
Revise la salida para los webhooks que tienen el estado '
rejected="true". -
Elimine y vuelva a generar los secretos de extracción de Docker personalizados, que, si están mal configurados, pueden impedir que los nodos trabajadores extraigan imágenes de los registros de Docker.
- Ejecute los mandatos
oc delete secret -n openshift pull-secretyoc delete secret -n openshift-config pull-secretpara suprimir los secretos de extracción de Docker personalizados.
oc delete secret -n openshift pull-secret ``` ```sh {: pre} oc delete secret -n openshift-config pull-secret ``` 1. Espere a que el clúster vuelva a generar los secretos de extracción de Docker personalizados. Los componentes mal configurados ya no están presentes en los secretos de extracción regenerados. - Ejecute los mandatos
-
Comprueba el estado de tus nodos de trabajo. Si están en un estado
Normal, añada de nuevo los componentes suprimidos y vuelva a crear los cambios revertidos, uno por uno, hasta que pueda determinar qué configuración o componente ha causado la interrupción del nodo trabajador. -
Si el problema sigue sin resolverse, siga los pasos para recopilar los datos del nodo trabajador y abrir una incidencia de soporte.
Si los nodos trabajadores conmutan entre los estados normal y crítico
Si los nodos trabajadores conmutan entre un estado Normal y Critical o NotReady, compruebe los siguientes componentes para ver si hay problemas o cambios recientes que puedan interrumpir los nodos trabajadores.
-
Para clústeres clásicos, compruebe los cortafuegos o las pasarelas. Si hay un límite de ancho de banda o cualquier tipo de mal funcionamiento, resuelva el problema. A continuación, vuelva a comprobar los nodos trabajadores.
-
Compruebe si las aplicaciones, la seguridad o los componentes de supervisión del clúster están sobrecargando el clúster
apiservercon solicitudes, lo que puede provocar interrupciones para los nodos trabajadores. -
Si ha añadido recientemente algún componente al clúster, elimínelo. Si ha realizado cambios en algún componente existente del clúster, revierta los cambios. A continuación, compruebe el estado de los nodos trabajadores para ver si los nuevos componentes o cambios estaban causando el problema.
-
Compruebe si hay cambios en los webhooks del clúster, lo que puede interrumpir las solicitudes de
apiservero bloquear la capacidad de un nodo trabajador para conectarse con elapiserver. Comprueba si hay webhooks que rechazan peticiones. Ejecute el siguiente comando para obtener una lista de webhooks que están rechazando peticiones.kubectl get --raw /metrics | grep apiserver_admission_webhook_admission_duration_seconds -
Revise la salida para los webhooks que tienen el estado '
rejected="true". -
Si el problema sigue sin resolverse, siga los pasos para recopilar los datos del nodo trabajador y abrir una incidencia de soporte.
Recopilación de datos para un caso de soporte
Si no puede resolver el problema con los pasos de resolución de problemas, recopile información sobre los nodos trabajadores. A continuación, abra una incidencia de soporte e incluya la información del nodo trabajador que ha recopilado.
Antes de abrir una incidencia de soporte, revise la información y siga los pasos de resolución de problemas en Depuración de nodos trabajadores, Estados de nodo trabajador y Resolución de problemas de nodos trabajadores en estado Critical o NotReady.
Si todos los nodos trabajadores de un clúster, o de una región, subred o VLAN están afectados, puede abrir un ticket de soporte inicial sin recopilar datos. Sin embargo, es posible que posteriormente se le solicite que recopile los datos relevantes. Si solo uno o algunos de los nodos trabajadores se ven afectados, debe recopilar los datos relevantes para incluirlos en la incidencia de soporte.
Antes de empezar
Compruebe las condiciones de los nodos trabajadores y el clúster antes de recopilar datos.
-
Compruebe el nivel de CPU y memoria de los nodos. Si algún nodo está por encima del 80% en uso de CPU o de memoria, considere la posibilidad de suministrar más nodos o reducir la carga de trabajo.
oc top nodeSalida de ejemplo
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% 10.001.1.01 640m 16% 6194Mi 47% 10.002.2.02 2686m 68% 4024Mi 30% 10.003.3.03 2088m 53% 10735Mi 81% -
Compruebe si hay cambios en los webhooks del clúster, lo que puede interrumpir las solicitudes de
apiservero bloquear la capacidad de un nodo trabajador para conectarse con elapiserver. Comprueba si hay webhooks que rechazan peticiones. Ejecute el siguiente comando para obtener una lista de webhooks que están rechazando peticiones.kubectl get --raw /metrics | grep apiserver_admission_webhook_admission_duration_seconds -
Revise la salida para los webhooks que tienen el estado '
rejected="true".
Recopilando datos
Siga los pasos para recopilar los datos de nodo trabajador relevantes.
-
Obtenga los detalles de cada nodo. Guarde los detalles de salida para incluirlos en la incidencia de soporte.
oc describe node <node-ip-address> -
Mostrar que no hay ningún webhooks añadido que mute o valide que permanezcan en el clúster obteniendo los detalles del webhook. Guarde la salida del mandato para incluirla en la incidencia de soporte. Tenga en cuenta que los siguientes webhooks mutantes pueden permanecer y no es necesario suprimirlos:
alertmanagerconfigs.openshift,managed-storage-validation-webhooks,multus.openshift.io,performance-addon-operator,prometheusrules.openshift.io,snapshot.storage.k8s.io.kubectl get mutatingwebhookconfigurationskubectl get validatingwebhookconfigurations -
Clústeres clásicos: acceda a la consola de KVM para uno de los trabajadores afectados. A continuación, recopile los registros y la salida relevantes.
- Siga los pasos para acceder a la consola de KVM.
- Recopile y guarde los registros siguientes. Revise los registros para ver las posibles causas de la interrupción del nodo trabajador, como la falta de memoria o espacio de disco, el disco que entra en modalidad de sólo lectura y otros
problemas.
- /var/log/boot.log
- /var/log/calico/cni/cni.log
- /var/log/crio.log
- /var/log/cron
- /var/log/messages
- /var/log/secure
- Ejecute los mandatos siguientes y guarde la salida para adjuntarla a la incidencia de soporte.
ps -aux# Volcar proceso en ejecucióndf -H# Volcar información de uso de discovmstat# Volcar información de uso de memorialshw# Volcar información de hardwarelast -Fxn2 shutdown reboot# determinar si el último reinicio ha sido graceful o nomount | grep -i "(ro"# para descartar un problema de sólo lectura de disco. NOTA:tmpfsestarroestá bientouch /this# para descartar un problema de sólo lectura de disco
-
Clusters VPC: Recopila el uso de recursos de los nodos trabajadores utilizando el comando
kubectl topcomo en el siguiente ejemplo.kubectl top nodesLa salida de ejemplo muestra el uso de CPU en milicores (m) y el uso de memoria en megabytes (Mi).
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-node-1 250m 12% 800Mi 40% k8s-node-2 180m 9% 600Mi 30% k8s-node-3 250m 22% 700Mi 50%- NOMBRE
- Nombre del nodo.
- CPU (núcleos)
- El uso actual de la CPU en milicores (m). 1000m equivale a 1 núcleo.
- CPU
- Porcentaje de la capacidad total de la CPU utilizada en el nodo.
- Memoria (bytes)
- El uso actual de memoria en MiB (megabytes) o GiB (gigabytes).
- MEMORIA
- Porcentaje de la capacidad total de memoria utilizada.
Un nodo con un alto % de CPU o % de MEMORIA (por encima del 80%) podría estar sobrecargado y requerir recursos adicionales. Un nodo con un CPU% o MEMORY% bajo (por debajo del 20%) podría estar infrautilizado, lo que indica que hay margen para redistribuir la carga de trabajo. Si un nodo alcanza el 100% de uso de CPU o memoria, las nuevas cargas de trabajo podrían no programarse o experimentar una degradación del rendimiento.
-
Recopile el uso de recursos de los pods mediante el siguiente comando.
kubectl top pods --all-namespacesSalida de ejemplo
NAMESPACE NAME CPU(cores) MEMORY(bytes) default my-app-564bc58dad-hk5gn 120m 256Mi default my-db-789d9c6c4f-tn7mv 300m 512Mi- NOMBRE
- Nombre del pod.
- CPU (núcleos)
- La CPU total utilizada por el pod en todos sus contenedores.
- Memoria (bytes)
- La memoria total utilizada por el pod en todos sus contenedores.
Si el uso de la CPU de un pod es elevado, es posible que esté experimentando un estrangulamiento de la CPU, lo que afecta al rendimiento. Si el uso de memoria de un pod se acerca a su límite, podría correr el riesgo de sufrir errores OOM (Out of Memory), en los que Kubernetes termina los procesos para liberar memoria. Un pod con bajo uso de recursos podría tener peticiones sobreasignadas, lo que llevaría a un desperdicio de recursos.
-
Compruebe las métricas a nivel de contenedor ejecutando el comando
top pod.kubectl top pod pod-a --containers -n appns ```sh {: pre} Example output ```sh NAME CONTAINER CPU(cores) MEMORY(bytes) pod-a app-container 100m 300Mi pod-a db-container 50m 200Mi ```sh {: screen} -
El comando
kubectl topsólo muestra el uso real, no los recursos solicitados o limitados. Para comparar y analizar la salida del comandotop, compruebe la especificación del pod mediante el siguiente comando.kubectl describe pod <pod-name> -n <namespace>Salida de ejemplo
Containers: app-container: Requests: cpu: 250m memory: 512Mi Limits: cpu: 500m memory: 1GiSi el uso de la CPU o de la memoria supera las peticiones, podría indicar un aprovisionamiento insuficiente, lo que provocaría problemas de rendimiento. Si el uso está cerca de los límites, el contenedor puede ser estrangulado o terminado cuando los recursos son limitados. Si el uso es significativamente inferior a las solicitudes, es posible que el pod esté sobreaprovisionado, desperdiciando recursos.
-
Identifique los pods que consumen más CPU.
kubectl top pod --all-namespaces | sort -k3 -nr | head -10 -
Identificar los pods que consumen mucha memoria.
kubectl top pod --all-namespaces | sort -k4 -nr | head -10 -
Monitoriza el uso de recursos del demonio del sistema. DaemonSets, como
kube-proxyo agentes de supervisión, pueden consumir recursos inesperados.kubectl top pod -n kube-system ```sh {: pre} -
Si determinados pods del sistema consumen demasiada CPU o memoria, puede ser necesario ajustar las solicitudes y los límites. Para realizar un seguimiento continuo de los cambios en los recursos, utilice el comando
watch.watch -n 5 kubectl top pod --all-namespaces ```sh {: pre} This command updates the output every 5 seconds, helping to spot spikes or anomalies in resource usage. -
Consulte los eventos en
OOMKilled. Cuando Kubernetes informa aOOMKilled, el pod excedió su límite de memoria y fue terminado. El estado del pod cambia acrashloopbackoff.kubectl get events --field-selector involvedObject.name=your-pod-name -n your-namespace -
Busque mensajes
OOMen los registros.kubectl logs your-pod-name -n your-namespace | grep -i "out of memory" -
Compruebe el último estado del contenedor para
OOMterminación.kubectl describe pod your-pod-name -n your-namespace | grep -A 10 "Last State"
Recopilación de registros de nodos trabajadores
Siga los pasos para acceder al trabajador y recopilar los registros del nodo trabajador.
-
Reúna y guarde los siguientes archivos de registro. Revise los registros para ver las posibles causas de la interrupción del nodo trabajador, como la falta de memoria o espacio de disco, el disco que entra en modalidad de sólo lectura y otros problemas.
/var/log/containerd.log/var/log/kern.log/var/log/kube-proxy.log/var/log/syslog/var/log/kubelet.log
-
Ejecute los mandatos siguientes y guarde la salida para adjuntarla a la incidencia de soporte.
Obtener estadísticas del contenedor (requiere acceso SSH al nodo).
crictl statsObtenga estadísticas detalladas de un contenedor específico.
crictl stats --id <container-id> --output jsonEjecute el comando para volcar los procesos en ejecución.
ps -auxObtenga una vista dinámica y en tiempo real de los procesos en ejecución y de las tareas gestionadas por el kernel, así como de la utilización de los recursos, incluido el uso de la CPU y la memoria.
topObtener el estado actual del sistema.
htopObtenga un informe de seguimiento completo con datos históricos.
atopObtenga información en tiempo real sobre los procesos del sistema.
btopObtener detalles de la conexión de red.
netstatObtener información sobre el uso del disco.
df -HEjecute
vmstatpara obtener informes sobre procesos, memoria, paginación, IO en bloque, traps y actividad de la CPU. Este comando obtiene la información a intervalos de 2 segundos, 5 veces.vmstat 2 5Ejecute
iostatpara recopilar estadísticas de uso del disco que cubran el rendimiento, la utilización, la longitud de las colas, las tasas de transacción, etc.iostat -x 1 5Recopila información sobre el hardware.
lshwAverigua si el último reinicio fue graceful o no utilizando el comando que aparece a continuación.
last -Fxn2 shutdown rebootPara descartar el problema del disco, verifique que el disco es grabable.
mount | grep -i "(ro" touch /this -
Si los problemas persisten, abra un ticket de soporte y adjunte todos los resultados guardados en los pasos anteriores.