Recentemente, a empresa onde trabalho tem buscado maneiras de reduzir custos, e uma das soluções em pauta é o uso do Karpenter, um autoscaler gerenciado pela AWS. Com isso, comecei a estudar mais a fundo sobre o assunto e percebi que, ao trabalhar com Kubernetes, temos várias formas de escalar tanto as aplicações/PODs quanto os nós (nodes) do cluster, conforme a demanda. Ao longo dessa pesquisa, notei que existem duas abordagens principais para fazer isso: uma utilizando o Karpenter e outra com o Autoscaler nativo da AWS.
Neste post, compartilho o básico dos testes que realizei, com o objetivo de ajudar na compreensão das diferenças entre essas soluções e oferecer insights sobre qual delas pode ser mais adequada para a sua jornada de otimização de custos e escalabilidade.
Cluster Autoscaler
O que é?
O Cluster Autoscaler é uma ferramenta nativa do Kubernetes que ajusta automaticamente o número de nós em um cluster com base na demanda dos pods.
Como funciona?
- Escalonamento para cima: Quando não há recursos suficientes para agendar novos pods, o Cluster Autoscaler adiciona nós ao cluster.
- Escalonamento para baixo: Quando há nós subutilizados, ele os remove para economizar custos.
Vantagens:
- Integração nativa: Funciona bem com provedores de nuvem populares como AWS, GCP e Azure.
- Configuração simples: Fácil de configurar e usar em clusters Kubernetes existentes.
Desvantagens:
- Latência: Pode haver um atraso na adição de novos nós, especialmente em grandes clusters.
- Limitações de personalização: Menos flexível em termos de personalização de políticas de escalonamento.
Exemplo de uso:
apiVersion: autoscaling.k8s.io/v1
kind: ClusterAutoscaler
metadata:
name: my-cluster-autoscaler
spec:
scaleDown:
enabled: true
delayAfterAdd: 10m
delayAfterDelete: 10s
delayAfterFailure: 3m
Karpenter
O que é?
Karpenter é uma solução de escalonamento automático mais recente, projetada para ser mais eficiente e flexível do que o Cluster Autoscaler.
Como funciona?
- Escalonamento dinâmico: Karpenter provisiona nós com base em requisitos específicos de pods, como CPU, memória e GPU.
- Integração com AWS: Atualmente, tem suporte nativo para AWS, mas está se expandindo para outros provedores.
Vantagens:
- Eficiência: Provisão de nós mais rápida e eficiente, reduzindo o tempo de espera para escalonamento.
- Flexibilidade: Suporte para diferentes tipos de instâncias e requisitos de recursos.
Desvantagens:
- Suporte limitado: Principalmente focado em AWS, com suporte limitado para outros provedores.
- Complexidade: Pode ser mais complexo de configurar e gerenciar em comparação com o Cluster Autoscaler.
Exemplo de uso:
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: default
spec:
requirements:
- key: "node.kubernetes.io/instance-type"
operator: In
values: ["m5.large", "m5.xlarge"]
limits:
resources:
cpu: "1000"
memory: "4000Gi"
Benefícios do Autoscaling de Nodes
Eficiência de Recursos:
- Otimização de Custos: O autoscaling ajusta automaticamente o número de nós com base na carga de trabalho atual, garantindo que você pague apenas pelos recursos que realmente está usando.
- Redução de Desperdício: Evita a alocação excessiva de recursos, reduzindo o desperdício de capacidade ociosa.
Escalabilidade:
- Resposta a Picos de Demanda: Permite que o cluster responda rapidamente a aumentos repentinos na carga de trabalho, adicionando nós conforme necessário.
- Flexibilidade: Facilita o crescimento do cluster sem intervenção manual, suportando cargas de trabalho variáveis.
Confiabilidade:
- Alta Disponibilidade: Garante que os pods tenham sempre os recursos necessários para serem agendados, melhorando a disponibilidade dos serviços.
- Resiliência: Em caso de falhas de nós, o autoscaling pode rapidamente substituir nós problemáticos, mantendo a integridade do cluster.
Gerenciamento Simplificado:
- Menos Intervenção Manual: Reduz a necessidade de ajustes manuais na infraestrutura, permitindo que as equipes se concentrem em tarefas de maior valor.
- Automação: Automatiza o processo de ajuste de capacidade, integrando-se com políticas de escalonamento definidas.
Desempenho Otimizado:
- Alocação Adequada de Recursos: Garante que os pods tenham os recursos necessários para operar de forma eficiente, melhorando o desempenho geral das aplicações.
- Redução de Latência: Minimiza o tempo de espera para a provisão de novos recursos, especialmente em cargas de trabalho críticas.
O Karpenter foi criado pela (AWS). Ele é um projeto de código aberto que visa melhorar o gerenciamento de clusters Kubernetes ao fornecer uma forma automatizada de provisionar e dimensionar recursos de computação. O Karpenter otimiza o uso de nós em um cluster, alocando instâncias de máquinas virtuais de forma eficiente e sob demanda para atender às necessidades das cargas de trabalho.
O Karpenter foi lançado pela AWS em 2020 e tem sido desenvolvido com a colaboração de outros engenheiros da comunidade open-source, mas é mantido principalmente pela AWS, mas pode ser usado em uma infraestrutura on-premises (local), mas com algumas limitações e desafios.

Site oficial: https://karpenter.sh/