A implantação de várias instâncias aumenta a estabilidade da aplicação, mas pode resultar em recursos ociosos e custos mais altos para o cluster. O dimensionamento manual exige muito trabalho e frequentemente apresenta atrasos. Utilize as métricas de um Nginx Ingress para orientar o Horizontal Pod Autoscaler (HPA), que ajusta dinamicamente o número de réplicas de pods conforme a carga de trabalho. Essa abordagem garante estabilidade e respostas rápidas à aplicação, além de otimizar o uso de recursos e reduzir custos. Este tópico descreve como usar métricas de tráfego do Nginx Ingress para dimensionar automaticamente múltiplas aplicações.
Um Ingress encaminha requisições externas para um Service dentro do cluster, e o Service então roteia essas requisições para um pod. Em ambientes de produção, configure o dimensionamento automático com base no volume de requisições. O Nginx Ingress Controller expõe esse volume por meio da métrica nginx_ingress_controller_requests, utilizável como fonte de métrica para o HPA. Nos clusters ACK, o Nginx Ingress Controller é uma versão aprimorada da edição da comunidade e oferece uma experiência de usuário mais simplificada.
Pré-requisitos
Antes de configurar o dimensionamento automático das aplicações com base no tráfego do Nginx Ingress, configure o componente ack-alibaba-cloud-metrics-adapter para expor as métricas do Alibaba Cloud Prometheus ao HPA.
O componente de monitoramento Alibaba Cloud Prometheus deve estar implantado. Para mais informações, consulte Usar o Alibaba Cloud Prometheus para monitoramento.
-
O componente ack-alibaba-cloud-metrics-adapter deve estar implantado e seu campo
prometheus.urlconfigurado. -
A ferramenta de teste de estresse Apache Benchmark deve estar instalada.
Neste tutorial, você criará dois Deployments e seus respectivos Services. Em seguida, configurará um Ingress com diferentes caminhos de acesso para rotear o tráfego externo. Por fim, definirá um HPA para as aplicações com base na métrica nginx_ingress_controller_requests e utilizará o campo selector.matchLabels.service do HPA para filtrar a métrica. Isso permite que os pods sejam dimensionados automaticamente conforme o tráfego.
Etapa 1: Criar aplicações e services
Utilize os manifestos YAML abaixo para criar os Deployments das aplicações e seus respectivos Services.
-
Crie um arquivo chamado
nginx1.yamle copie o seguinte conteúdo para ele.Execute o comando a seguir para criar a aplicação
test-appe seu respectivo Service.kubectl apply -f nginx1.yaml -
Crie um arquivo chamado
nginx2.yamle copie o seguinte conteúdo para ele.Execute o comando a seguir para criar a aplicação
sample-appe seu respectivo Service.kubectl apply -f nginx2.yaml
Etapa 2: Criar um Ingress
-
Crie um arquivo chamado
ingress.yamle copie o seguinte conteúdo para ele.Execute o comando a seguir para implantar o recurso de Ingress.
kubectl apply -f ingress.yaml -
Execute o comando a seguir para obter o recurso de Ingress.
kubectl get ingress -o wideSaída esperada:
NAME CLASS HOSTS ADDRESS PORTS AGE test-ingress nginx test.example.com 10.XX.XX.10 80 55sApós uma implantação bem-sucedida, acesse o endereço do Host usando os caminhos
/e/home. Com base na configuração anterior, o Nginx Ingress Controller roteia o tráfego para sample-app e test-app, respectivamente. Consulte a métricanginx_ingress_controller_requestsno Alibaba Cloud Prometheus para obter informações sobre as requisições de cada aplicação.
Etapa 3: Converter métricas do Prometheus para o HPA
Configurar o adaptador de métricas
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Helm, clique em ack-alibaba-cloud-metrics-adapter. Na seção Resource, clique em adapter-config e, em seguida, clique em Edit YAML no canto superior direito da página.
-
Substitua as regras existentes na configuração pelo conteúdo a seguir. Depois, clique em OK na parte inferior da página.
Para mais informações, consulte Dimensionamento automático horizontal de pods com base em métricas do Alibaba Cloud Prometheus .
rules: - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) name: as: ${1}_per_second matches: ^(.*)_requests resources: namespaced: false seriesQuery: nginx_ingress_controller_requestsapiVersion: v1 data: config.yaml: > rules: - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) name: as: ${1}_per_second matches: ^(.*)_requests resources: namespaced: false seriesQuery: nginx_ingress_controller_requests
Visualizar a saída da métrica
Execute o comando a seguir para visualizar a saída da métrica.
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/nginx_ingress_controller_per_second" | jq .
O resultado da consulta é o seguinte:
{
"kind": "ExternalMetricValueList",
"apiVersion": "external.metrics.k8s.io/v1beta1",
"metadata": {},
"items": [
{
"metricName": "nginx_ingress_controller_per_second",
"metricLabels": {},
"timestamp": "2025-07-25T07:56:04Z",
"value": "0"
}
]
}
Etapa 4: Criar HPAs
-
Crie um arquivo chamado
hpa.yamle copie o seguinte conteúdo para ele.Execute o comando a seguir para implantar os HPAs para as aplicações
sample-appetest-app.kubectl apply -f hpa.yaml -
Execute o comando a seguir para verificar o status da implantação do HPA.
kubectl get hpaSaída esperada:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 0/30 (avg) 1 10 1 74s test-hpa Deployment/test-app 0/30 (avg) 1 10 1 59m
Etapa 5: Verificar os resultados
Após a implantação dos HPAs, utilize a ferramenta Apache Benchmark para executar um teste de estresse e confirmar se os pods da aplicação escalam horizontalmente à medida que o volume de requisições aumenta.
-
Execute o comando a seguir para realizar um teste de estresse no caminho
/homedo host.ab -c 50 -n 5000 test.example.com/home -
Execute o comando a seguir para verificar o status do HPA.
kubectl get hpaSaída esperada:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 0/30 (avg) 1 10 1 22m test-hpa Deployment/test-app 22096m/30 (avg) 1 10 3 80m -
Execute o comando a seguir para testar a carga no caminho raiz do host.
ab -c 50 -n 5000 test.example.com/ -
Execute o comando a seguir para verificar o status do HPA.
kubectl get hpaSaída esperada:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE sample-hpa Deployment/sample-app 27778m/30 (avg) 1 10 2 38m test-hpa Deployment/test-app 0/30 (avg) 1 10 1 96mOs resultados demonstram que as aplicações escalaram horizontalmente com sucesso quando o volume de requisições ultrapassou o limiar definido.
Documentos relacionados
O balanceamento multizona é um método comum de implantação para serviços intensivos em dados em cenários de alta disponibilidade. Quando a carga de trabalho aumenta, as aplicações que usam uma política de agendamento balanceado entre zonas devem escalar instâncias automaticamente em várias zonas para atender às demandas de agendamento do cluster. Para mais informações, consulte Implementar dimensionamento elástico rápido e simultâneo em múltiplas zonas.
É possível criar imagens personalizadas de sistema operacional para simplificar o dimensionamento elástico em cenários complexos. Para mais informações, consulte Otimização elástica com imagens personalizadas.