Cargas de IA estão forçando o autoscaling do Kubernetes a repensar a divisão entre scheduler e autoscaler
Aprofundamento CEVIU
Aprofundamento
O problema descrito pela CNCF é conhecido de quem opera GPU em cluster: o pod fica pending sem que a região tenha acabado de fato com a capacidade. O autoscaler responde à pergunta para a qual foi feito (adiciono um node?), mas o scheduler pode recusar o node que ele escolheu. Resultado: acelerador caro parado e job sem rodar.
O artigo aponta três frentes. Em reservations, o autoscaler precisa considerar capacidade já comprometida e paga. Em topology, o que importa é a ligação entre dispositivos (NUMA, PCIe, links entre aceleradores), não só a contagem. No sharing, partitionable devices e consumable capacity permitem entregar fração de um dispositivo em vez dele inteiro. O Dynamic Resource Allocation (DRA) dá ao scheduler claims estruturados, e autoscalers com suporte a DRA começam a usar a mesma informação, mas a adoção varia conforme a implementação.
Linguagem comum não resolve tudo. Em gang scheduling, o scheduler já aprende a tratar um grupo como unidade, via Workload e PodGroup (beta e desabilitados por padrão). O autoscaler ainda raciocina pod a pod. A ponte atual é o provisioning request, que com Kueue pede a capacidade do grupo inteiro de uma vez, em regime de melhor esforço e dependente do provedor.
O que mudou
A cobertura anterior do CEVIU acompanhou as peças separadas. Em 30 de março de 2026, a matéria sobre Alocação Dinâmica de Recursos mostrou o DRA como base para gerenciar GPUs e TPUs por solicitações. Em 15 de maio de 2026, a matéria sobre o Kubernetes v1.36 trouxe a divisão da API de Workload e o novo PodGroup para scheduling de workloads. Agora a discussão sobe um degrau: o lado do scheduler avançou, e o gargalo passa a ser o autoscaler acompanhar esse vocabulário. Há uma proposta pública na SIG-Autoscaling para APIs de integração entre os dois.
Por que isso importa
Para quem faz plataforma e FinOps, pod pending com GPU ociosa é custo direto. A dica prática do artigo: antes de concluir que a capacidade acabou, verifique se scheduler e autoscaler concordam sobre o que é um node utilizável. Em inferência, com carga em rajadas, um node frio custa caro.
Linha do tempo
CEVIU cobre a Alocação Dinâmica de Recursos do Kubernetes para GPUs e TPUs.
Kubernetes v1.36 divide a API de Workload e introduz o PodGroup para scheduling de workloads.
Artigo da CNCF discute como cargas de IA forçam scheduler e autoscaler a se integrarem.
Perguntas frequentes
Por que um pod com GPU fica pending mesmo havendo capacidade?
Porque o node que o autoscaler aceita adicionar pode não ser o que o scheduler aceita usar. Os dois laços decidem com informações diferentes sobre o hardware. O acelerador fica ocioso enquanto o pod espera.
O que o DRA muda nesse cenário?
Em vez de um número simples de GPUs, o workload registra um claim estruturado, como um acelerador junto com a placa de rede que o alimenta. O scheduler lê esse claim direto. Autoscalers com suporte a DRA começam a usá-lo ao simular capacidade, mas o suporte varia.
O que é gang scheduling e por que o autoscaler atrapalha?
É o modelo tudo ou nada: todos os pods de um job grande são agendados juntos ou nenhum. O scheduler já evolui para isso com Workload e PodGroup. O autoscaler ainda raciocina pod a pod e pode criar nodes para parte do grupo, desperdiçando capacidade se o job não inicia.
Como o provisioning request ajuda?
Ele permite pedir ao autoscaler a capacidade do grupo inteiro de uma vez. Com um admission check configurado, o Kueue reserva quota, cria o pedido, espera a capacidade ficar pronta e então admite o workload. O scale-up atômico é de melhor esforço e depende do provedor.
Fontes
- cncf.iofonte original
- Categoria
- CEVIU DevOps
- Publicado
- 21 de outubro de 2026
- Editoria
- CEVIU DevOps
