Voltar
Featued image for: Why Kubernetes autoscalers keep fighting each other (and why the solution must be autonomous)

Por que os autoscalers do Kubernetes brigam entre si, segundo Nikhil Kurup

Aprofundamento CEVIU

Aprofundamento

O argumento de Nikhil Kurup parte de um exemplo concreto: o checkout-api tem no Helm replicas: 3, cpu: 1000m e memory: 2Gi. No cluster, o HPA escalou para 11 réplicas por CPU, o VPA recomenda cpu: 350m e memory: 3.1Gi, o KEDA pede 24 réplicas por lag no Kafka e o Karpenter subiu dois nodes dimensionados pelos requests declarados. Cinco fontes, cinco respostas.

O problema, segundo ele, é que HPA, VPA, KEDA e Karpenter rodam em loops de reconciliação independentes e mexem nos mesmos campos: .spec.replicas, .resources.requests e o node pool. Ele lista quatro modos de falha. Na death spiral, o VPA reduz os requests (o denominador da conta do HPA), o HPA escala para fora, o uso por pod cai e o VPA reduz de novo. Com KEDA e HPA no mesmo sub-recurso /scale, workers com muito I/O e pouca CPU são reduzidos pelo HPA enquanto a fila cresce. Com GitOps, o Argo CD marca o HPA como OutOfSync e, com auto-sync, devolve o baseline no pico. Já o Karpenter provisiona para demanda fantasma: o texto cita CPU média de cluster perto de 8% em frotas de produção.

A proposta é manter esses controllers como atuadores e adicionar uma camada central de decisão, preditiva e com decisões explicáveis, que otimize réplicas, requests, limits e thresholds contra SLOs de latência e custo.

Por que isso importa

Para quem opera plataforma, a leitura prática é auditar quem escreve em cada campo do workload. Combinar VPA e HPA no mesmo recurso, ou KEDA e HPA no mesmo deployment, merece revisão. O mesmo vale para o ignoreDifferences no GitOps, que resolve o ciclo de sync, mas tira do Git a fonte da verdade sobre réplicas. O texto é uma tese de opinião, não um produto pronto.

Perguntas frequentes

Por que HPA e VPA entram em conflito?

O HPA calcula a utilização como uso real dividido pelos requests declarados. Quando o VPA reduz os requests, o percentual sobe e o HPA escala para fora. Com mais pods, o uso por pod cai e o VPA reduz de novo, formando a death spiral descrita por Kurup.

O que acontece ao usar KEDA e HPA no mesmo deployment?

Os dois controllers atuam no sub-recurso /scale. Se a fila sobe, o KEDA escala para cima, mas se os workers usam pouca CPU o HPA conclui que há excesso e reduz. O resultado são eventos de rescale alternados e throughput parado.

Por que o GitOps atrapalha o autoscaling?

Quando o HPA muda as réplicas, o Argo CD marca a aplicação como OutOfSync. Com auto-sync ligado, ele restaura o baseline do Git e tira capacidade no pico. Ignorar a diferença de réplicas evita isso, mas o Git deixa de refletir a produção.

Qual é a solução proposta por Kurup?

Manter HPA, VPA, KEDA e Karpenter como executores e criar uma camada central de inteligência. Ela trataria dimensionamento horizontal e vertical como um problema único, com decisões preditivas e explicáveis, buscando SLOs de latência ao menor custo.

Fontes

Avalie este artigo:
Categoria
CEVIU DevOps
Publicado
28 de outubro de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser