Uma das características fundamentais da infraestrutura moderna em nuvem é sua capacidade de se adaptar dinamicamente a mudanças em tempo real. O escalonamento automático horizontal de cargas de trabalho garante resiliência, alta disponibilidade e uso eficiente dos recursos. No ecossistema do Kubernetes, esse papel é desempenhado pelo Horizontal Pod Autoscaler (HPA) — um controlador nativo que ajusta automaticamente o número de pods com base em métricas como uso de CPU, consumo de memória ou até métricas personalizadas de desempenho. Isso permite que os aplicativos respondam a picos de carga sem intervenção manual, garantindo o equilíbrio entre desempenho e custo.
O Horizontal Pod Autoscaler (HPA) é um controlador do Kubernetes que altera automaticamente a quantidade de pods em um Deployment, ReplicaSet ou StatefulSet com base em métricas (como uso de CPU, memória ou métricas personalizadas).
Pré-requisitos
Antes de configurar o HPA, você precisa:
- Ter o Kubernetes 1.6 ou superior instalado
- Ativar a coleta de métricas:
- Instalar o metrics-server:
- Verificar se as métricas estão sendo coletadas corretamente:
Exemplo de configuração do HPA
Suponha que você já tenha um deployment chamado my-app, com uma imagem de contêiner escalável.
1. Criar o Deployment:
kind: Deployment
metadata:
name: web-service
labels:
environment: production
spec:
replicas: 1
selector:
matchLabels:
app: web-service
template:
metadata:
labels:
app: web-service
spec:
containers:
- name: web-container
image: your-image:latest
ports:
- name: http
containerPort: 80
resources:
requests:
cpu: "100m"
limits:
cpu: "500m"
Aplicar a configuração:
Explicação:
- apiVersion: apps/v1 — versão da API do Kubernetes para Deployment.
- kind: Deployment — tipo de recurso criado.
- metadata.name — nome do Deployment.
- labels — rótulos usados para organização e filtragem.
- spec.replicas — número de réplicas desejadas.
- selector.matchLabels — seletor para identificar quais pods este deployment gerencia.
- template — modelo para os pods criados.
- containers— especificações do contêiner (nome, imagem, portas expostas, limites e requisições de CPU).
Um diagrama que ilustra a relação entre Deployment, ReplicaSet e Pod no Kubernetes:
2. Criar o HPA:
--cpu-percent=50
--min=1
--max=5
Esse comando cria um HPA que visa manter o uso da CPU em torno de 50%, ajustando a quantidade de pods entre 1 e 5.
Verificando o status do HPA
Exemplo de saída:
Testando o escalonamento
Você pode gerar carga nos pods para testar o escalonamento. Por exemplo, usando o stress dentro do contêiner:
Após alguns minutos, o HPA deverá aumentar a quantidade de réplicas automaticamente.
Uso de métricas personalizadas (opcional)
Para cenários avançados, é possível configurar o HPA com métricas personalizadas utilizando o Prometheus Adapter ou a External Metrics API.
Recomendações
- Sempre defina requests e limits de recursos nos contêineres — o HPA depende dessas configurações.
- Verifique os logs do metrics-server se o HPA não estiver funcionando corretamente.
- Use ferramentas como Grafana para monitorar o comportamento do escalonamento.
- Combine o HPA com o Cluster Autoscaler para escalonar também os nós do cluster, além dos pods.
Conclusão
O Horizontal Pod Autoscaler é uma ferramenta poderosa e flexível que permite ao Kubernetes adaptar automaticamente o número de réplicas dos pods com base na carga real do sistema. Sua adoção é essencial para construir aplicações resilientes, escaláveis e economicamente eficientes em ambientes de nuvem. O HPA reduz a necessidade de ajustes manuais durante picos de carga, otimizando o uso dos recursos computacionais e garantindo desempenho estável.
Para quem deseja começar rapidamente com Kubernetes e HPA, plataformas em nuvem com infraestrutura pronta são ideais. Por exemplo, na Serverspace, você pode alugar um cluster Kubernetes com pré-instalação, permitindo que você se concentre em suas aplicações imediatamente.
Vantagens do Kubernetes na Serverspace:
- Risco mínimo: atualizações automáticas de todos os componentes reduzem falhas humanas.
- Arquitetura flexível: suporte para desde testes locais até soluções corporativas em grande escala.
- Alta disponibilidade: os pods são distribuídos entre vários nós, garantindo continuidade mesmo em falhas.
- Escalabilidade real: execute milhares de contêineres por segundo sem aumentar a equipe.