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 |
Consulte Detalhes do algoritmo.
Pré-requisitos
O Metrics Server deve estar instalado. Instale-o pela página Add-ons no console ACK.
Crie uma aplicação com HPA habilitado no console ACK
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster desejado e clique no nome dele ou em Details na coluna Actions.
No painel de navegação à esquerda, escolha Workloads > Deployments.
Na página Deployments, clique em Create from Image.
-
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
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/v2beta2foi descontinuado no Kubernetes 1.23 e removido na versão 1,26. Atualize paraautoscaling/v2sempre 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