Durante el entrenamiento de IA, una falla en un nodo GPU puede provocar que las tareas se bloqueen o finalicen de manera anómala. Alibaba Cloud Container Service for Kubernetes (ACS) supervisa los nodos GPU-HPN. Cuando un nodo falla, lo marca con un taint y notifica la falla mediante condiciones de Kubernetes y eventos de pods. Este tema describe los tipos de falla, cómo leer las señales de falla y el proceso de recuperación del nodo.
Proceso de gestión de fallas en nodos
ACS ejecuta comprobaciones de estado en los nodos GPU-HPN continuamente. Si un nodo falla, siga este proceso para repararlo mediante el mecanismo de autorrecuperación de ACS.
Notificación de falla ACS notifica la causa de la falla mediante eventos y condiciones del nodo. Además, agrega un taint para evitar que se programen nuevos pods en el nodo.
Drenar el nodo con errores Después de recibir la notificación de falla, expulse todos los pods del nodo con errores. Use acs-instance-helper para automatizar la expulsión de pods. Para obtener más información, consulte Configure automatic rotation for instances with hardware exceptions.
Reparar el nodo con errores Una vez expulsados todos los pods, ACS inicia automáticamente el proceso de reparación.
Autorrecuperación del nodo Una vez que ACS repara el nodo, los taints y las condiciones relacionados se restauran automáticamente a su estado normal. A partir de ese momento, se pueden programar nuevos pods en el nodo.
Tipos de falla
La tabla a continuación describe los tipos de falla notificados en las condiciones del nodo y los eventos de pods.
|
Tipo de falla |
Descripción |
|
|
Todo el nodo GPU-HPN está con errores. |
|
|
Se produjo una falla en una tarjeta GPU. |
|
|
El nodo GPU-HPN está en proceso de actualización del sistema o de operación y mantenimiento. |
Notificaciones de fallas
Asegúrese de atender oportunamente las fallas: configure condiciones de alerta mediante kube-eventer. Para obtener más información, consulte kube-eventer.
Cuando un nodo GPU-HPN presenta una falla, ACS proporciona información de la falla mediante condiciones del objeto Node y eventos de los pods afectados.
Condiciones del nodo
ACS usa dos tipos de condición en el objeto Node: NodeAnomaly y FaultHealing.
Condición NodeAnomaly
Cuando se detecta una falla, ACS:
-
Agrega una etiqueta al nodo para facilitar el filtrado:
metadata: labels: alibabacloud.com/node-anomaly: "true" -
Agrega un
NoScheduletaint para evitar que se programen nuevos pods en el nodo:spec: taints: - effect: NoSchedule key: alibabacloud.com/node-anomaly timeAdded: "2024-10-16T06:09:27Z" -
Registra información detallada de la falla en la condición
NodeAnomaly:status: conditions: - lastHeartbeatTime: "2024-10-16T06:09:31Z" lastTransitionTime: "2024-10-16T06:09:31Z" message: The node has encountered an anomaly. reason: NodeBroken status: "True" type: NodeAnomaly
Para consultar la condición NodeAnomaly en todos los nodos:
kubectl get nodes -o custom-columns='NAME:.metadata.name,ANOMALY:.status.conditions[?(@.type=="NodeAnomaly")].status,REASON:.status.conditions[?(@.type=="NodeAnomaly")].reason'
Para enumerar todos los nodos con la etiqueta de anomalía:
kubectl get nodes -l alibabacloud.com/node-anomaly=true
En la tabla a continuación se describen los campos de la condición NodeAnomaly.
|
Campo |
Descripción |
Cuándo se actualiza |
|
|
|
Campo estático. No cambia durante el ciclo de vida del nodo. |
|
|
Indica si existe una falla. |
Se actualiza cuando cambia el estado de falla del nodo. |
|
|
Tipo de falla. Consulte Tipos de falla para ver los valores posibles. |
Al cambiar el estado de falla del nodo. |
|
|
Información detallada de la falla. |
Cuando se modifica el estado de falla del nodo. |
|
|
Hora del último cambio del estado de falla. |
Cada vez que cambia el estado de falla del nodo. |
|
|
Hora de latido, que se actualiza periódicamente. |
Cuando cambia el estado de falla o si transcurrieron más de cinco minutos desde la última actualización. |
Condición FaultHealing
ACS registra el progreso de autorrecuperación en la condición FaultHealing. Esta condición se actualiza conforme avanza el proceso de reparación.
status:
conditions:
- lastHeartbeatTime: "2025-03-24T11:14:48Z"
lastTransitionTime: "2025-03-24T11:14:48Z"
message: node fault healing success
reason: Success
status: "False"
type: FaultHealing
Supervise el progreso de autorrecuperación:
kubectl get nodes -o custom-columns='NAME:.metadata.name,HEALING:.status.conditions[?(@.type=="FaultHealing")].status,REASON:.status.conditions[?(@.type=="FaultHealing")].reason,MESSAGE:.status.conditions[?(@.type=="FaultHealing")].message'
Los campos de la condición FaultHealing se describen en la tabla a continuación.
|
Campo |
Descripción |
|
|
|
|
|
Indica si la autorrecuperación está en curso. |
|
|
Estado de la autorrecuperación. |
|
|
Información detallada sobre el progreso de autorrecuperación. |
|
|
Se actualiza cuando cambia el progreso de autorrecuperación. |
|
|
Al cambiar el progreso de autorrecuperación. |
Eventos de pods
Después de recibir la notificación de falla, expulse los pods del nodo con errores lo antes posible. ACS inicia automáticamente el proceso de reparación una vez expulsados todos los pods. Use acs-instance-helper para automatizar la expulsión de pods. Para más detalles, consulte Configure automatic rotation for instances with hardware exceptions.
ACS genera un evento Warning para cada pod que se ejecuta en el nodo con errores.
reason: NodeBroken
type: Warning
message: 'The pod is proposed to be evicted at 2024-10-16 07:21:54 +0000 UTC, reason: xxx'
Consulte los eventos relacionados con fallas en un nodo específico:
kubectl get events --field-selector involvedObject.name=<node-name> | grep -i "NodeBroken\|GPUCardBroken\|NodeMaintenance"
La tabla a continuación describe los campos de los eventos de pods.
|
Campo |
Descripción |
|
|
Campo estático. El valor es |
|
|
Tipo de falla. Consulte Tipos de falla para ver los valores posibles. |
|
|
Información detallada sobre la expulsión propuesta. |