Kueue - Bringing Order to Kubernetes Task Queues
Imagine o seguinte: seu cluster Kubernetes está rodando em plena capacidade. De um lado, modelos críticos de ML estão em treinamento, do outro, analistas lançaram processos ETL que consomem muitos recursos, e em algum lugar em segundo plano, dezenas de jobs de CI/CD estão em execução. Tudo isso requer GPU, CPU, memória e, é claro, todos querem os recursos "agora mesmo". Parece familiar? Como resultado, algumas tarefas ficam ociosas enquanto outras estão tirando recursos de tarefas de maior prioridade, e o cluster opera de forma ineficiente. Isso é uma dor de cabeça para qualquer pessoa que gerencia workloads em lote no Kubernetes.
Este é exatamente o problema que o Kueue foi projetado para resolver — um projeto do kubernetes-sigs, que literalmente se traduz como "fila". Não é apenas outro scheduler, mas um gerenciador de filas completo que se integra profundamente ao Kubernetes e permite gerenciar verdadeiramente de forma eficiente o ciclo de vida das suas tarefas.
O que é Kueue e quem precisa dele?
Kueue é um conjunto de APIs e um controller que atua como um dispatcher inteligente para suas tarefas Kubernetes. Seu trabalho principal é decidir quando uma tarefa pode ser admitida para execução (ou seja, quando os pods podem ser criados para ela) e quando vale a pena interrompê-la (removendo pods ativos) para liberar recursos para tarefas de maior prioridade.
Quem se beneficiaria disso? Em primeiro lugar, equipes que usam ativamente o Kubernetes para:
- Machine learning e processamento de dados: Engenheiros de ML e cientistas de dados frequentemente lançam numerosos jobs de treinamento que requerem grandes quantidades de GPU e CPU. Kueue ajuda a distribuir esses recursos caros de forma justa.
- Processos ETL: Tarefas de extração, transformação e carregamento de dados podem ser muito intensivas em recursos e requerem planejamento cuidadoso.
- Pipelines CI/CD: Builds e testes automatizados, especialmente em projetos grandes, podem gerar picos de carga no cluster.
- Qualquer outra tarefa em lote: Se você tem processos em segundo plano que são executados periodicamente e competem por recursos, Kueue é seu salvador.
Essencialmente, Kueue permite transformar um fluxo caótico de tarefas em uma fila ordenada e eficientemente gerenciada, onde os recursos são distribuídos de acordo com suas regras e prioridades.
Recursos-chave do Kueue que mudam o jogo
Kueue não apenas coloca tarefas em uma fila — ele oferece todo um arsenal de ferramentas para ajuste fino e otimização. Vamos olhar os mais interessantes.
1. Gerenciamento inteligente de tarefas e prioridades
Esqueça a alocação manual de recursos ou scripts que tentam simular uma fila. Kueue fornece mecanismos flexíveis de gerenciamento de tarefas:
- Prioridades: Você pode atribuir prioridades a várias tarefas. Por exemplo, uma tarefa para treinar um modelo crítico pode ter prioridade mais alta do que um relatório noturno.
- Estratégias de fila: Kueue suporta duas estratégias principais:
StrictFIFO: Fila clássica "primeiro a chegar, primeiro a ser atendido". Simples e direto.BestEffortFIFO: Uma abordagem mais flexível que tenta iniciar tarefas o mais cedo possível, mesmo que não estejam no topo da fila, desde que haja recursos livres. Isso previne tempo ocioso do cluster quando há recursos disponíveis, mas a "cabeça" da fila está esperando algo muito específico.
Imagine que você tem múltiplas equipes, cada uma lançando suas próprias tarefas. Kueue permite definir quem tem acesso ao cluster e quando, com base em regras predefinidas.
2. Gerenciamento avançado de recursos e distribuição justa
Este é talvez um dos aspectos mais poderosos do Kueue. Vai muito além do agendamento básico do Kubernetes, oferecendo:
- Intercambiabilidade de Flavors de Recursos: Digamos que você tenha GPUs de modelos diferentes (ex.: NVIDIA A100 e V100). Kueue pode ser configurado para que uma tarefa que requer uma GPU possa usar qualquer uma delas se estiver livre, em vez de esperar por um modelo específico. Isso maximiza a utilização do hardware.
- Compartilhamento Justo e Cohorts: Se você tem múltiplas equipes ou departamentos usando um cluster, Kueue pode garantir que nenhum deles monopolize recursos. Você pode combinar filas em "cohorts" e definir cotas para que os recursos sejam distribuídos de forma justa entre eles. Por exemplo, a equipe de ML pode obter 60% dos recursos, e a equipe de analytics — 40%.
- Preempção: Em situações críticas, Kueue pode preempter (interromper) tarefas de menor prioridade para liberar recursos para as mais importantes. Isso é especialmente valioso quando tarefas urgentes ou recuperação de falhas estão envolvidas.
3. Ampla integração com tipos populares de tarefas
Kueue não está vinculado a nenhum tipo único de tarefa. Ele tem suporte integrado para muitos workloads populares, tornando-o uma ferramenta versátil:
- Standard Kubernetes BatchJob: É claro, não podemos ficar sem eles.
- Jobs de treinamento Kubeflow: Perfeito para engenheiros de ML que usam Kubeflow para treinamento de modelos.
- RayJob e RayCluster: Suporte para computação distribuída baseada em Ray.
- JobSet: Para gerenciar grupos de jobs relacionados.
- Pods simples e Grupos de Pods: Até para pods simples e seus grupos.
- Deployments e StatefulSets: Curiosamente, Kueue pode gerenciar até workloads de serving, permitindo misturar treinamento e inferência, alocando recursos dinamicamente.
Isso significa que você não terá que reinventar a roda para cada tipo de tarefa — Kueue está pronto para trabalhar com sua stack fora da caixa.
4. Autoscaling e multi-cluster
No mundo moderno, clusters raramente são estáticos, e às vezes não se limitam a uma única localização geográfica. Kueue leva em conta essas realidades:
- Suporte avançado a autoscaling: Kueue pode se integrar com o Cluster Autoscaler, usando
provisioningRequestpara escalonamento de cluster mais inteligente, solicitando novos nodes apenas quando realmente necessário para tarefas na fila. - MultiKueue para dispatching multi-cluster: Isso é fantástico! Se você tem múltiplos clusters (ex.: em diferentes regiões ou nuvens), MultiKueue permite procurar capacidade livre e migrar tarefas entre eles. Isso proporciona flexibilidade e resiliência incríveis, permitindo o uso efetivo de recursos globais.
- Agendamento com consciência de topologia: Otimizando largura de banda de comunicação entre pods através de agendamento que considera a topologia do datacenter. Isso é crítico para computação de alto desempenho.
Detalhes técnicos: sob o capô do Kueue
Kueue é construído como um controller nativo do Kubernetes, o que significa integração profunda com o ecossistema. Ele estende o Kubernetes com suas próprias Custom Resource Definitions (CRD) para definir filas, cotas e workloads. Isso permite gerenciá-lo com comandos padrão kubectl, o que é muito conveniente.
O projeto está em desenvolvimento ativo sob kubernetes-sigs (Special Interest Group), o que garante conformidade com os padrões do Kubernetes e suporte de longo prazo. Atualmente, a API está na versão v1beta2, indicando sua maturidade e estabilidade. A equipe está trabalhando ativamente na transição para v1.
Fui pleasantly surprised pelo nível de testes do projeto: testes unitários extensivos, de integração e E2E para várias versões do Kubernetes (até 1.35) e casos de uso, incluindo MultiKueue e Agendamento com Consciência de Topologia. Isso transmite confiança na confiabilidade da solução.
Além disso, Kueue fornece métricas Prometheus, facilitando o monitoramento de estados de filas e recursos, e possui documentação detalhada para ajudá-lo a se familiarizar rapidamente.
Aplicação prática: como isso funciona na vida real
Vamos ver como Kueue pode mudar seu fluxo de trabalho:
- Plataforma de ML: Um cientista de dados submete uma tarefa de treinamento de modelo. Em vez de esperar por uma GPU específica ficar livre, Kueue coloca a tarefa em uma fila. Quando uma GPU adequada fica disponível (possivelmente após a conclusão de uma tarefa de menor prioridade ou até após preempção), Kueue inicia o treinamento. Se o cluster estiver sobrecarregado, MultiKueue pode redirecionar automaticamente a tarefa para outro cluster menos carregado.
- Processamento de big data: Um processo ETL noturno inicia, mas descobre que os recursos são limitados devido a consultas analíticas do dia. Kueue coloca-o em uma fila, e quando os recursos são liberados (ou tarefas de menor prioridade são preemptadas), o processo inicia. Neste caso, Kueue pode garantir que nenhuma equipe "consuma" todos os recursos, assegurando distribuição justa.
- CI/CD para microsserviços: Uma equipe de desenvolvimento está ativamente commitando código, lançando dezenas de builds e testes. Kueue gerencia essas tarefas, garantindo que builds críticos (ex.: para produção) tenham prioridade sobre branches de teste, e os recursos do cluster sejam usados da forma mais eficiente possível, sem tempo ocioso.
Instalar Kueue é bastante simples e requer Kubernetes 1.29 ou mais recente. Apenas um comando kubectl apply:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.15.2/manifests.yaml
Após isso, você pode configurar filas e lançar suas tarefas usando exemplos da documentação.
Vale a pena experimentar o Kueue?
Definitivamente sim, se você está enfrentando problemas de gerenciamento de tarefas em lote no Kubernetes. Kueue não é apenas uma ferramenta — é toda uma filosofia de utilização eficiente de recursos e distribuição justa de carga.
É especialmente adequado para:
- Administradores de cluster e engenheiros SRE: Para trazer ordem, otimizar a utilização de recursos e garantir estabilidade.
- Engenheiros MLOps e Cientistas de Dados: Para gerenciar eficientemente tarefas de treinamento, inferência e experimentos.
- Desenvolvedores que usam Kubernetes para CI/CD ou tarefas em segundo plano: Para acelerar processos e reduzir custos de infraestrutura.
Kueue é um projeto maduro, bem testado e em desenvolvimento ativo com uma forte comunidade. Já é usado em produção por muitas empresas, o que é a melhor prova de sua confiabilidade e valor prático. Se você quer aproveitar ao máximo seu cluster Kubernetes e esquecer o caos de tarefas, dê uma chance ao Kueue — ele não vai te decepcionar!
Confira a documentação do Kueue e junte-se à comunidade no Slack para saber mais e começar a usar esta poderosa ferramenta hoje mesmo.
Projetos relacionados