Como escalar horizontalmente uma aplicação no Kubernetes

Se você já se deparou com gargalos de performance ou custos exorbitantes na sua jornada com Kubernetes, prepare-se para conhecer seu novo melhor amigo: o Horizontal Pod Autoscaler (HPA). Neste post, vamos mergulhar no universo do HPA, desvendando seus segredos e te equipando com o conhecimento necessário para otimizar seus clusters.

O que é o HPA?

A função básica do HPA é monitorar sua aplicação em tempo real, e ajustar automaticamente o número de pods em ação para garantir a melhor experiência possível para seus usuários. Em outras palavras, esse recurso mágico do Kubernetes permite escalar horizontalmente seus workloads de forma inteligente e eficiente.

Benefícios de um HPA bem configurado:

  • Desempenho: O HPA garante que sua aplicação esteja sempre pronta, escalando recursos automaticamente sob demanda, evitando gargalos e lentidões.
  • Eficiência nos custos: Chega de pagar por recursos ociosos! O HPA te ajuda a otimizar seus gastos, reduzindo o número de pods quando a demanda diminui.
  • Alta disponibilidade: O HPA garante que sua aplicação esteja sempre disponível, mesmo em picos de tráfego, evitando indisponibilidades e frustrações para seus usuários.

Criando seu primeiro HPA

Para começar sua jornada com o HPA, vamos criar dois manifestos.

Exemplo 1

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: meu-hpa-simples
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: meu-deployment
  minReplicas: 2
  maxReplicas: 10
	metrics:
		- type: Resource
			resource:
			  name: cpu
			  target:
			    type: Utilization
			    averageUtilization: 60

Neste exemplo, definimos um HPA básico para o deployment “meu-deployment”. As configurações são as seguintes:

  • minReplicas: Define o número mínimo de pods que devem estar sempre em execução, mesmo que a demanda seja baixa. Neste caso, o valor é 2, garantindo que no mínimo 2 pods estejam sempre disponíveis.
  • maxReplicas: Define o número máximo de pods que o HPA pode criar para atender à demanda. O valor máximo é 10, permitindo que o HPA escale até 10 pods se necessário.
  • metrics: Um array com as definições de métricas que devem ser acompanhadas. No nosso exemplo, sempre que a CPU chegar em 60% de consumo, um novo pod será adicionado.

Exemplo 2

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: meu-hpa-avancado
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: meu-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
	  - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
        - type: Pods
          value: 2
          periodSeconds: 300
    scaleUp:
      stabilizationWindowSeconds: 0
      policies:
        - type: Percent
          value: 100
          periodSeconds: 30

Nesse segundo exemplo, além do monitoramento de memória, adicionamos também o atributo behavior, que nos permite controlar o comportamento de scale-up e scale-down dos pods.

  • scaleDown: Configurações específicas para a redução de pods.
    • stabilizationWindowSeconds: Tempo de espera antes de reduzir, garantindo estabilidade (300 segundos = 5 minutos).
    • policies: Define como a redução de pods será aplicada.
      • type: Pods – O tipo diz que a métrica é baseada no número de pods.
      • value: 2 – O número de pods é reduzido gradualmente até chegar ao valor mínimo configurado.
      • periodSeconds: 300 – Intervalo de tempo entre as reduções (300 segundos = 5 minutos)
  • scaleUp: Configurações específicas para scale-up (aumento de pods)
    • stabilizationWindowSeconds: 0 – Sem tempo de espera antes de escalar para cima (imediato).
    • policies: Define como será o aumento de pods.
      • type: Percent – Tipo diz que o aumento será baseado em porcentagem.
      • value: 100 – Duplica o número de pods quando as métricas indicam a necessidade.
      • periodSeconds: 30 – Intervalo de tempo entre escalonamentos (30 segundos).

Validando seu HPA

Para garantir que seu HPA esteja funcionando como um relógio, existem algumas dicas valiosas:

  • Monitore as métricas: Utilize ferramentas como o Prometheus para acompanhar as métricas de CPU, memória e pods da sua aplicação.
  • Verifique os logs: Analise os logs do HPA para identificar possíveis erros ou problemas de configuração.
  • Simule cenários de carga: Crie testes de carga para verificar como o HPA reage a diferentes picos de demanda.

Conclusão

O HPA é uma ferramenta poderosa, mas exige cuidado na configuração. Ajuste os parâmetros de acordo com as necessidades da sua aplicação e monitore de perto seu funcionamento para garantir o máximo de performance e eficiência.

Se você está começando agora no mundo Kubernetes e quer ver exemplos na prática, não deixe de conferir no curso de “Containers & Kubernetes”.

Inscreva-se na nossa newsletter para não perder nenhum post e ainda ganhar 20% de desconto em todos os cursos e imersão.


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre Kubernetes.

Deixe uma resposta