Durante o treinamento de IA, falhas em nós GPU podem causar o travamento ou a terminação anormal de tarefas. O Alibaba Cloud Container Service for Kubernetes (ACS) monitora os nós GPU-HPN e, ao detectar uma falha, aplica um taint ao nó e relata o problema por meio de conditions do Kubernetes e eventos de pod. Este tópico descreve os tipos de falha, como interpretar os sinais de erro e o processo de recuperação do nó.
Processo de tratamento de falhas de nó
O ACS executa verificações de integridade contínuas nos nós GPU-HPN. Se um nó apresentar falha, siga este processo para repará-lo com o mecanismo de autocura do ACS.
Notificação de falha: O ACS relata a causa da falha por meio de eventos e conditions do nó e adiciona um taint para impedir o agendamento de novos pods nesse nó.
Drenagem do nó com falha: Após receber a notificação de falha, evite todos os pods do nó afetado. Use o acs-instance-helper para automatizar a evicção dos pods. Para mais informações, consulte Configure rotação automática para instâncias com exceções de hardware.
Reparo do nó com falha: Após a evicção de todos os pods, o ACS inicia automaticamente o processo de reparo.
Autorrecuperação do nó: Após o reparo do nó pelo ACS, os taints e as conditions associados retornam automaticamente ao estado normal, permitindo o agendamento de novos pods no nó.
Tipos de falha
A tabela a seguir descreve os tipos de falha relatados nas conditions do nó e nos eventos de pod.
|
Tipo de falha |
Descrição |
|
|
Falha total do nó GPU-HPN. |
|
|
Ocorreu uma falha no nível da placa GPU. |
|
|
O nó GPU-HPN está passando por uma atualização de sistema ou operação e manutenção (O&M). |
Notificações de falha
Para garantir o tratamento rápido das falhas, configure condições de alerta usando o kube-eventer. Para mais informações, consulte kube-eventer.
Quando um nó GPU-HPN apresenta falha, o ACS fornece informações sobre o problema por meio de conditions no objeto Node e eventos nos pods afetados.
Conditions do nó
O ACS utiliza dois tipos de condition no objeto Node: NodeAnomaly e FaultHealing.
Condition NodeAnomaly
Ao detectar uma falha, o ACS:
-
Adiciona um rótulo ao nó para filtragem:
metadata: labels: alibabacloud.com/node-anomaly: "true" -
Aplica um taint
NoSchedulepara evitar o agendamento de novos pods no nó:spec: taints: - effect: NoSchedule key: alibabacloud.com/node-anomaly timeAdded: "2024-10-16T06:09:27Z" -
Registra informações detalhadas sobre a falha na condition
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 a condition NodeAnomaly de todos os nós:
kubectl get nodes -o custom-columns='NAME:.metadata.name,ANOMALY:.status.conditions[?(@.type=="NodeAnomaly")].status,REASON:.status.conditions[?(@.type=="NodeAnomaly")].reason'
Para listar todos os nós com o rótulo de anomalia:
kubectl get nodes -l alibabacloud.com/node-anomaly=true
A tabela abaixo detalha os campos da condition NodeAnomaly.
|
Campo |
Descrição |
Momento da atualização |
|
|
|
Campo estático. Não muda durante o ciclo de vida do nó. |
|
|
Indica se há falha. |
Atualizado quando o status de falha do nó muda. |
|
|
Tipo da falha. Consulte Tipos de falha para visualizar os valores possíveis. |
Atualizado quando o status de falha do nó muda. |
|
|
Informações detalhadas sobre a falha. |
Atualizado quando o status de falha do nó muda. |
|
|
Horário da última alteração do status de falha. |
Atualizado quando o status de falha do nó muda. |
|
|
Horário do heartbeat atualizado periodicamente. |
Atualizado quando o status de falha muda ou se mais de cinco minutos se passaram desde a última atualização. |
Condition FaultHealing
O ACS registra o progresso da autocura na condition FaultHealing. Essa condition é atualizada conforme o processo de reparo avança.
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
Para monitorar o progresso da autocura:
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'
A tabela a seguir explica os campos da condition FaultHealing.
|
Campo |
Descrição |
|
|
|
|
|
Indica se a autocura está em andamento. |
|
|
Status da autocura. |
|
|
Informações detalhadas sobre o progresso da autocura. |
|
|
Atualizado quando o progresso da autocura muda. |
|
|
Atualizado quando o progresso da autocura muda. |
Eventos de pod
Após receber a notificação de falha, evacue os pods do nó defeituoso o mais rápido possível. O ACS inicia automaticamente o processo de reparo depois que todos os pods são evacuados. Use o acs-instance-helper para automatizar essa evicção. Para mais informações, consulte Configure rotação automática para instâncias com exceções de hardware.
O ACS gera um evento Warning para cada pod em execução no nó com falha.
reason: NodeBroken
type: Warning
message: 'The pod is proposed to be evicted at 2024-10-16 07:21:54 +0000 UTC, reason: xxx'
Para visualizar eventos relacionados a falhas em um nó específico:
kubectl get events --field-selector involvedObject.name=<node-name> | grep -i "NodeBroken\|GPUCardBroken\|NodeMaintenance"
A tabela abaixo descreve os campos dos eventos de pod.
|
Campo |
Descrição |
|
|
Campo estático. O valor é |
|
|
Tipo da falha. Consulte Tipos de falha para visualizar os valores possíveis. |
|
|
Informações detalhadas sobre a evicção sugerida. |