Defina janelas de estabilização e políticas de dimensionamento no campo behavior para controlar a velocidade de dimensionamento dos pods.
Pré-requisitos
Certifique-se de que você tem:
Um cluster ACK executando Kubernetes 1.24 ou posterior. Consulte Atualizar clusters ACK manualmente
HPA ativado no cluster. Consulte Implementar dimensionamento horizontal automático de pods
Um cliente kubectl configurado com
autoscaling/v2ou posterior
Escolha um cenário de dimensionamento
Encontre a configuração que corresponde ao seu workload.
|
Objetivo |
Cenário |
Velocidade de scale-out |
Velocidade de scale-in |
|
Lidar com picos repentinos de tráfego |
Muito rápida (crescimento de 900% a cada 15 s) |
Padrão |
|
|
Escalar rapidamente para cima e lentamente para baixo |
Rápida (crescimento de 900% a cada 60 s) |
Lenta (1 pod a cada 10 min) |
|
|
Nunca remover pods automaticamente |
Moderada (crescimento de 100% a cada 60 s) |
Desativado |
|
|
Minimizar custos e evitar provisionamento excessivo |
Lenta (50% ou 2 pods a cada 2 min) |
Lenta (25% ou 3 pods a cada 10 min) |
|
|
Adaptar-se a tráfego imprevisível |
Moderada (50% ou 4 pods a cada 60 s) |
Lenta (20% ou 2 pods a cada 5 min) |
Comportamento padrão do HPA
Quando nenhuma seção behavior é especificada, o Kubernetes aplica os seguintes padrões:
behavior:
scaleUp:
stabilizationWindowSeconds: 0 # Scale out immediately
policies:
- type: Percent
value: 100 # Double the current pod count
periodSeconds: 15
- type: Pods
value: 4 # Or add 4 pods
periodSeconds: 15
selectPolicy: Max # Use whichever adds more pods
scaleDown:
stabilizationWindowSeconds: 300 # Wait 5 minutes before scaling in
policies:
- type: Percent
value: 100 # Remove up to 100% of pods
periodSeconds: 15
selectPolicy: Max
Com esses padrões:
O scale-out ocorre imediatamente. A cada 15 segundos, o controlador pode dobrar a quantidade de pods ou adicionar 4 pods, o que for maior.
O scale-in aguarda 5 minutos. O controlador seleciona a maior contagem de réplicas recomendada nos últimos 300 segundos para evitar remoções prematuras.
Especifique apenas os campos que diferem dos padrões — o Kubernetes mescla seus valores com os padrões.
Referência de campos
Todos os campos da seção behavior:
|
Campo |
Tipo |
Intervalo |
**Padrão ( |
**Padrão ( |
Descrição |
|
|
int32 |
0–3600 |
0 |
300 |
Janela de retrospecção (segundos) para recomendações de dimensionamento. O controlador escolhe a maior contagem de réplicas ( |
|
|
array |
1 ou mais entradas |
Ver acima |
Ver acima |
Uma ou mais políticas de dimensionamento. Cada política especifica um |
|
|
string |
|
-- |
-- |
Se o |
|
|
int32 |
> 0 |
-- |
-- |
Número de pods ou porcentagem das réplicas atuais a adicionar ou remover por período. |
|
|
int32 |
1–1800 |
15 |
15 |
Intervalo de tempo (segundos) ao qual o |
|
|
string |
|
|
|
Qual política usar quando há várias políticas. |
Exemplo completo de configuração do HPA
Um recurso HPA completo com uma seção behavior personalizada. Modifique os campos conforme necessário.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: optimized-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-application
minReplicas: 2
maxReplicas: 50
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 5
periodSeconds: 60
- type: Percent
value: 10
periodSeconds: 60
selectPolicy: Min
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
Neste exemplo:
scaleDownusa uma janela de estabilização de 300 segundos. Duas políticas — remover até 5 pods ou 10% a cada 60 segundos — são avaliadas, eselectPolicy: Minescolhe a que remove menos.scaleUpresponde imediatamente (stabilizationWindowSeconds: 0). Duas políticas — dobrar a quantidade de pods ou adicionar 4 pods a cada 15 segundos — são avaliadas, eselectPolicy: Maxescolhe a que adiciona mais.
Configurações por cenário
Scale-out rápido para workloads com picos
Para picos repentinos de tráfego, como promoções relâmpago, lançamentos de produtos ou campanhas promocionais.
behavior:
scaleUp:
policies:
- type: Percent
value: 900 # Increase the current pod count by 900%
periodSeconds: 15
Como funciona: A cada 15 segundos, o controlador tenta adicionar 900% da contagem atual de pods, o que escala o workload para 10 vezes suas réplicas atuais.
Progressão de dimensionamento a partir de 1 réplica:
1 -> 10 -> 100 -> 1000
A contagem final é limitada por maxReplicas.
Dimensionamento equilibrado com scale-in conservador
Escale rapidamente para cima ao enfrentar aumentos de tráfego e lentamente para baixo a fim de evitar a remoção prematura de pods.
behavior:
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 900 # 10x the current pod count
periodSeconds: 60
selectPolicy: Max
scaleDown:
stabilizationWindowSeconds: 600 # 10-minute evaluation window
policies:
- type: Pods
value: 1
periodSeconds: 600 # Remove 1 pod every 10 minutes
selectPolicy: Min
Como funciona:
Scale-out: Imediato. A cada 60 segundos, a contagem de pods pode crescer até 900% da contagem atual.
Scale-in: As métricas devem permanecer baixas por 10 minutos antes do scale-in. Em seguida, apenas 1 pod é removido a cada 10 minutos.
Progressão de scale-in a partir de 20 réplicas:
|
Tempo |
Ação |
Contagem de pods |
|
0:00 |
Métricas caem abaixo do alvo |
20 (janela de estabilização inicia) |
|
0:00–10:00 |
Controlador coleta recomendações, mas não age |
20 |
|
10:00 |
Janela de estabilização concluída. Remove 1 pod |
19 |
|
20:00 |
Remove 1 pod |
18 |
|
30:00 |
Remove 1 pod |
17 |
Desativar scale-in para aplicações críticas
Para aplicações stateful, jobs em lote ou services que processam transações de longa duração em que o scale-in pode interromper as operações.
behavior:
scaleDown:
selectPolicy: Disabled # Completely disable scale-in
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Percent
value: 100
periodSeconds: 60
selectPolicy: Max
Como funciona: selectPolicy: Disabled no scaleDown impede a remoção de pods. O workload cresce, mas nunca diminui automaticamente. O scale-out dobra a contagem de pods a cada 60 segundos, após um atraso de estabilização de 60 segundos.
Para fazer scale-in manualmente, exclua o HPA e executekubectl scalepara definir a contagem desejada de réplicas, ou altere temporariamenteselectPolicypara permitir o scale-in automático.
Dimensionamento otimizado para custo com crescimento controlado
Evite provisionamento excessivo durante picos de curta duração e reduza a capacidade somente após demanda baixa sustentada.
behavior:
scaleUp:
stabilizationWindowSeconds: 120 # Wait 2 minutes before scaling out
policies:
- type: Percent
value: 50 # 50% growth
periodSeconds: 120
- type: Pods
value: 2 # Or add 2 pods
periodSeconds: 120
selectPolicy: Min # Use whichever adds fewer pods
scaleDown:
stabilizationWindowSeconds: 900 # 15-minute evaluation window
policies:
- type: Percent
value: 25 # Remove 25% of pods
periodSeconds: 600
- type: Pods
value: 3 # Or remove 3 pods
periodSeconds: 600
selectPolicy: Min
Como funciona:
Scale-out: Uma janela de estabilização de 2 minutos filtra picos transitórios.
selectPolicy: Minadiciona o menor valor entre 50% ou 2 pods a cada 2 minutos, limitando o desperdício.Scale-in: Uma janela de avaliação de 15 minutos garante demanda baixa sustentada antes da remoção. Remove no máximo 25% ou 3 pods (o que for menor) a cada 10 minutos.
Progressão de scale-out a partir de 4 réplicas:
|
Etapa |
Pods atuais |
Política percentual (50%) |
Política de pods (+2) |
Selecionado (Min) |
Nova contagem de pods |
|
1 |
4 |
50% de 4 = 2 |
2 |
2 |
6 |
|
2 |
6 |
50% de 6 = 3 |
2 |
2 |
8 |
|
3 |
8 |
50% de 8 = 4 |
2 |
2 |
10 |
Com selectPolicy: Min, a política Pods limita o crescimento a 2 pods por período até que o cálculo percentual fique abaixo de 2.
Dimensionamento adaptativo para workloads imprevisíveis
Lide com padrões de tráfego variáveis com scale-out responsivo e scale-in cauteloso.
behavior:
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Pods
value: 4
periodSeconds: 60
- type: Percent
value: 50
periodSeconds: 60
selectPolicy: Max # Use whichever adds more pods
scaleDown:
stabilizationWindowSeconds: 600
policies:
- type: Pods
value: 2
periodSeconds: 300
- type: Percent
value: 20
periodSeconds: 300
selectPolicy: Min # Use whichever removes fewer pods
Como funciona:
Scale-out: Após um atraso de estabilização de 30 segundos, o controlador adiciona 4 pods ou 50% da contagem atual (o que for maior) a cada 60 segundos. O
selectPolicyassimétrico —Maxpara scale-out,Minpara scale-in — impulsiona crescimento agressivo e redução conservadora.Scale-in: Exige 10 minutos de métricas baixas sustentadas. Em seguida, remove 2 pods ou 20% dos pods atuais (o que for menor) a cada 5 minutos.
Monitorar o comportamento do HPA
Inspecione o status do HPA e os eventos de dimensionamento:
# View current HPA status and recent scaling events
kubectl describe hpa <hpa-name>
# Monitor HPA metrics and decisions
kubectl get hpa <hpa-name> -o yaml
# Check pod resource usage
kubectl top pods -l <label-selector>
Saída esperada do kubectl describe hpa:
Name: optimized-hpa
Namespace: default
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 35% (175m) / 70%
Min replicas: 2
Max replicas: 50
Behavior:
Scale Up:
Stabilization Window: 0 seconds
Select Policy: Max
Policies:
- Type: Percent Value: 100 Period: 15 seconds
- Type: Pods Value: 4 Period: 15 seconds
Scale Down:
Stabilization Window: 300 seconds
Select Policy: Min
Policies:
- Type: Pods Value: 5 Period: 60 seconds
- Type: Percent Value: 10 Period: 60 seconds
Deployment pods: 4 current / 4 desired
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulRescale 12m horizontal-pod-autoscaler New size: 4; reason: cpu resource utilization (percentage of request) above target
Verifique Events para decisões de dimensionamento e Behavior para confirmar que as políticas estão aplicadas.
Aplicar em produção
Teste em staging primeiro
Simule padrões de carga realistas em staging antes de aplicar em produção.
Valide que as métricas escolhidas refletem com precisão o desempenho da sua aplicação.
Teste casos extremos, incluindo picos rápidos de tráfego e utilização baixa sustentada.
Planeje os atrasos do Cluster Autoscaler
Quando o HPA faz scale-out rapidamente, o cluster pode não ter capacidade de nós suficiente. O Cluster Autoscaler provisiona novos nós para pods não agendáveis, mas isso leva de 1 a 3 minutos. Considere esse atraso nas suas expectativas. Consulte Dimensionamento de nós.
Combine com outras estratégias de dimensionamento automático
Use o Vertical Pod Autoscaler (VPA) junto com o HPA para workloads que precisam de dimensionamento horizontal e vertical.
Use métricas personalizadas e adaptadores externos para dimensionamento além de CPU e memória.
Referências
Se você encontrar problemas ao usar o HPA, consulte FAQ sobre dimensionamento de workloads.