Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Ajuste fino do comportamento de dimensionamento do HPA

Última atualização: Oct 12, 2026

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:

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

Scale-out rápido

Muito rápida (crescimento de 900% a cada 15 s)

Padrão

Escalar rapidamente para cima e lentamente para baixo

Dimensionamento equilibrado

Rápida (crescimento de 900% a cada 60 s)

Lenta (1 pod a cada 10 min)

Nunca remover pods automaticamente

Desativar scale-in

Moderada (crescimento de 100% a cada 60 s)

Desativado

Minimizar custos e evitar provisionamento excessivo

Otimizado para custo

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

Dimensionamento adaptativo

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 (scaleUp)**

**Padrão (scaleDown)**

Descrição

stabilizationWindowSeconds

int32

0–3600

0

300

Janela de retrospecção (segundos) para recomendações de dimensionamento. O controlador escolhe a maior contagem de réplicas (scaleDown) ou a menor (scaleUp) dentro dessa janela. Defina como 0 para dimensionamento imediato.

policies

array

1 ou mais entradas

Ver acima

Ver acima

Uma ou mais políticas de dimensionamento. Cada política especifica um type, um value e um periodSeconds.

policies[].type

string

Pods ou Percent

--

--

Se o value representa uma contagem absoluta de pods ou uma porcentagem das réplicas atuais.

policies[].value

int32

> 0

--

--

Número de pods ou porcentagem das réplicas atuais a adicionar ou remover por período.

policies[].periodSeconds

int32

1–1800

15

15

Intervalo de tempo (segundos) ao qual o value da política se aplica.

selectPolicy

string

Max, Min, Disabled

Max

Max

Qual política usar quando há várias políticas. Max: altera o maior número de pods (agressivo). Min: altera o menor número de pods (conservador). Disabled: impede todo dimensionamento nessa direção.

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:

  • scaleDown usa uma janela de estabilização de 300 segundos. Duas políticas — remover até 5 pods ou 10% a cada 60 segundos — são avaliadas, e selectPolicy: Min escolhe a que remove menos.

  • scaleUp responde imediatamente (stabilizationWindowSeconds: 0). Duas políticas — dobrar a quantidade de pods ou adicionar 4 pods a cada 15 segundos — são avaliadas, e selectPolicy: Max escolhe 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 execute kubectl scale para definir a contagem desejada de réplicas, ou altere temporariamente selectPolicy para 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: Min adiciona 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 selectPolicy assimétrico — Max para scale-out, Min para 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