Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Implementar dimensionamento horizontal automático de pods

Última atualização: Jun 27, 2026

Configure o HPA para dimensionar automaticamente as réplicas de pods com base em CPU, memória ou outras métricas.

O HPA é ideal para serviços com demanda flutuante, necessidade frequente de dimensionamento ou múltiplas cargas de trabalho — cenários comuns em e-commerce, educação online e serviços financeiros.

Como o HPA funciona

O HPA opera como um loop de controle: a cada 15 segundos, o controlador consulta a Metrics API e compara o uso atual com as metas definidas. A Metrics API obtém dados do kubelet a cada 60 segundos, portanto, o HPA avalia as métricas efetivamente em um ciclo de 60 segundos.

A fórmula principal de dimensionamento:

desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue))

Por exemplo, se a utilização atual de CPU for de 80% e a meta for 50%, o HPA calcula ceil(currentReplicas * 80/50) e dimensiona o Deployment. Uma faixa de tolerância de 10% evita oscilações excessivas — o HPA não realiza dimensionamento quando a proporção estiver dentro de 0,1 em relação a 1,0.

Comportamento

Detalhe

Scale-out

Imediato. O HPA aumenta as réplicas assim que uma métrica ultrapassa a meta (mais a tolerância).

Scale-in

Período de resfriamento padrão de 5 minutos para evitar redução prematura durante quedas transitórias.

Múltiplas métricas

O dimensionamento ocorre quando qualquer métrica especificada excede seu limiar.

Solicitações de recursos obrigatórias

O HPA calcula a utilização como currentUsage / requests. Sem solicitações de recursos definidas, o cálculo de utilização fica impossibilitado.

Consulte Detalhes do algoritmo.

Pré-requisitos

Crie uma aplicação com HPA habilitado no console ACK

  1. Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, localize o cluster desejado e clique no nome dele ou em Details na coluna Actions.

  3. No painel de navegação à esquerda, escolha Workloads > Deployments.

  4. Na página Deployments, clique em Create from Image.

  5. Na página Create, configure as seguintes seções:

    • Basic Information: Defina o nome da aplicação e a quantidade de réplicas.

    • Container: Selecione a imagem e especifique os recursos de CPU e memória. > Importante: Defina as solicitações de recursos, caso contrário o HPA não entrará em vigor.

    • Advanced:

      • Na seção Access Control, clique em Create ao lado de Services para configurar o Service.

      • Na seção Scaling, defina HPA como Enable e configure os parâmetros de dimensionamento: | Parâmetro | Descrição | |-----------|-------------| | Metrics | Selecione CPU Usage ou Memory Usage. Deve corresponder ao tipo de recurso em Required Resources. Se ambos forem especificados, o HPA dimensionará quando qualquer um deles exceder seu limiar. | | Condition | Limiar de uso de recursos que aciona o dimensionamento. | | Max. Replicas | Quantidade máxima de réplicas. Deve ser superior ao mínimo. | | Min. Replicas | Quantidade mínima de réplicas. Valor inteiro, pelo menos 1. |

Consulte Crie uma aplicação stateless a partir de uma imagem.

Crie uma aplicação com HPA habilitado usando kubectl

Esta seção utiliza um Deployment NGINX para demonstrar a configuração do HPA com kubectl. Crie apenas um HPA por carga de trabalho.

Etapa 1: Crie um Deployment

Crie um arquivo chamado nginx.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # Replace with your actual image_name:tag.
        ports:
        - containerPort: 80
        resources:
          requests:       # Required for HPA to calculate utilization.
            cpu: 500m
Importante

Defina resources.requests para seus containers. O HPA calcula a utilização como currentUsage / requests — sem solicitações definidas, ele não consegue determinar a utilização e não realizará o dimensionamento.

Execute o Deployment:

kubectl apply -f nginx.yml

Etapa 2: Crie um HPA

Crie um arquivo chamado hpa.yml. O HPA usa scaleTargetRef para ter como alvo o Deployment nginx e dimensiona quando a utilização média de CPU excede 50%.

Para Kubernetes 1,24 e posterior (recomendado — usa autoscaling/v2):

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx                # Target Deployment name.
  minReplicas: 1               # Minimum replica count. Integer >= 1.
  maxReplicas: 10              # Maximum replica count. Must exceed minReplicas.
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50 # Target average CPU utilization (percentage of requests).

Para versões do Kubernetes anteriores à 1,24 (legado)

Use autoscaling/v2beta2 em vez disso:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
autoscaling/v2beta2 foi descontinuado no Kubernetes 1.23 e removido na versão 1,26. Atualize para autoscaling/v2 sempre que possível.

Execute o HPA:

kubectl apply -f hpa.yml

(Opcional) Usar múltiplas métricas

Para dimensionar com base em CPU e memória simultaneamente, especifique ambos os tipos de recursos no campo metrics de um único HPA — não crie HPAs separados para cada métrica. O dimensionamento será acionado quando qualquer métrica exceder seu limiar.

metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 50
- type: Resource
  resource:
    name: memory
    target:
      type: Utilization
      averageUtilization: 50

Verifique o status do HPA

Após aplicar o HPA, a coleta inicial de métricas leva alguns instantes. Durante esse período, o comando kubectl describe hpa pode exibir avisos como os seguintes:

Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

Esses avisos indicam que o HPA ainda está inicializando e as métricas ainda não estão disponíveis.

Verifique o status do HPA:

kubectl get hpa

Verifique os eventos de dimensionamento:

kubectl describe hpa nginx-hpa

Quando o HPA opera corretamente, a seção Events mostra uma saída semelhante a:

Type    Reason             Age   From                       Message
----    ------             ----  ----                       -------
Normal  SuccessfulRescale  5m6s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

Limpeza

Para remover os recursos criados neste tutorial:

kubectl delete hpa nginx-hpa
kubectl delete deployment nginx

Próximos passos