Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Scale pods based on Nginx Ingress metrics

Última atualização: Sep 21, 2026

Dimensione pods com base em sinais reais de tráfego — e não apenas na cpu — conectando as métricas de Ingress do Simple Log Service (SLS) ao dimensionamento automático horizontal de pods (HPA) do Kubernetes por meio da External Metrics api. Este guia apresenta um exemplo completo: implante uma aplicação Nginx, exponha-a por meio de um Ingress e, em seguida, configure o HPA para dimensionar com base em consultas por segundo (QPS) e na latência do percentil 99,99.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um cluster ACK com o kubectl configurado

  • Um controlador de Ingress com a coleta de logs do SLS ative (ative por padrão ao crie um cluster)

  • Permissões para instale charts do Helm e crie recursos do HPA

Como funciona

O componente ack-alibaba-cloud-metrics-adapter faz a ponte entre os service de monitoramento da Alibaba Cloud e a External Metrics api do Kubernetes. Após a instalação, o HPA pode consultar métricas de Ingress do SLS — como sls_ingress_qps e sls_ingress_latency_p9999 — e ajustar a contagem de réplicas do seu Deployment de acordo.

Etapa 1: instale o ack-alibaba-cloud-metrics-adapter

O componente ack-alibaba-cloud-metrics-adapter permite que o Kubernetes obtenha dados de monitoramento dos service da Alibaba Cloud — incluindo ECS, SLB e RDS — por meio da External Metrics api.

Importante

Este componente não oferece suporte a atualize no local. Para atualize, desinstale primeiro a versão atual e, em seguida, instale a versão mais recente. Durante a desinstalação e a reinstalação, os HPAs relacionados pausam o dimensionamento porque a obtenção de dados de monitoramento é interrompida.

  1. Faça logon no Container Service Management Console. No painel de navegação, clique em Clusters.

  2. clique em nome do seu cluster. No painel de navegação à esquerda, escolha Applications > Helm.

  3. Na página Helm, clique em Create. Conclua a configuração de Basic Information, selecione ack-alibaba-cloud-metrics-adapter e clique em Next.

  4. Na página Parameter Settings, selecione uma Chart Version e clique em OK.

Etapa 2: Implantar uma aplicação de teste

  1. crie o arquivo nginx-test.yaml com o seguinte conteúdo:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
  2. Aplique a configuração:

    kubectl apply -f nginx-test.yaml

Etapa 3: crie um Ingress

  1. No painel de navegação à esquerda da página de gerencie do cluster, escolha Network > Ingress. Na página Ingress, clique em Create Ingress.

  2. Preencha os campos obrigatórios e clique em OK. O console redireciona você para a página Ingress.

  3. Na coluna Name, clique em nome do Ingress e visualize suas regras de roteamento. Para mais detalhes, consulte gerencie Ingress.

Etapa 4: configure o HPA

O HPA oferece suporte a duas métricas de Ingress do SLS com semânticas de dimensionamento diferentes:

Métrica

Tipo de destino

Comportamento de dimensionamento

sls_ingress_qps

AverageValue

O QPS é dividido pela contagem atual de pods antes da comparação

sls_ingress_latency_p9999

Value

O valor bruto de latência é comparado diretamente

  1. crie o arquivo ingress-hpa.yaml com o seguinte conteúdo:

    Parâmetro

    Obrigatório

    Descrição

    sls.ingress.route

    Sim

    Formato: <namespace>-<svc>-<port>. Exemplo: default-nginx-80

    sls.logstore

    Sim

    O Logstore no Simple Log Service. Padrão: nginx-ingress

    sls.project

    Sim

    O Project no Simple Log Service. Padrão: k8s-log-<cluster-id>

    sls.internal.endpoint

    Não

    Define se o acesso ao SLS será pela rede interna. Padrão: true. defina como false para usar a rede pública.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic
      minReplicas: 2
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: sls_ingress_qps
              selector:
                matchLabels:
                  sls.project: "<your-sls-project>"      # Default: k8s-log-<cluster-id>
                  sls.logstore: "nginx-ingress"           # Default SLS Logstore for Nginx Ingress logs
                  sls.ingress.route: "default-nginx-80"  # Format: <namespace>-<svc>-<port>
            target:
              type: AverageValue
              averageValue: 10   # Scale up when average QPS per pod exceeds 10
        - type: External
          external:
            metric:
              name: sls_ingress_latency_p9999
              selector:
                matchLabels:
                  sls.project: "<your-sls-project>"
                  sls.logstore: "nginx-ingress"
                  sls.ingress.route: "default-nginx-80"
                  # sls.internal.endpoint: "true"         # true = internal network (default); false = public network
            target:
              type: Value
              value: 10   # Scale up when 99.99th-percentile latency exceeds 10 ms

    A tabela a seguir descreve os parâmetros usados na configuração do HPA.

  2. Aplique a configuração:

    kubectl apply -f ingress-hpa.yaml

verifique o dimensionamento

execute um teste de carga de 5 minutos no seu domínio do Ingress para acionar o scale-up:

# Send 10 concurrent requests for 300 seconds
ab -t 300 -c 10 <domain-name-configured-for-the-ingress>

Acompanhe o status do HPA em tempo real:

kubectl get hpa ingress-hpa --watch

Saída esperada quando o scale-up é bem-sucedido (REPLICAS atinge MAXPODS):

NAME            REFERENCE                              TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
ingress-hpa     Deployment/nginx-deployment-basic      21/10 (avg)       2         10        10         7m49s

Quando o tráfego cai abaixo do limiar, REPLICAS retorna ao valor mínimo.

Solução de problemas

Comece a solução de problemas execute kubectl describe hpa ingress-hpa e verifique o campo Conditions. Use as colunas Type e Status para identificar o problema e, em seguida, siga as etapas abaixo.

A coluna target mostra unknown

  1. execute kubectl describe hpa <hpa-name> e verifique o campo Conditions:

    • Se AbleToScale for False: confirme se o Deployment está íntegro.

    • Se ScalingActive for False: prossiga para a próxima etapa.

  2. execute o seguinte comando para verifique se a External Metrics api está disponível:

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/"

    Se a resposta for Error from server (NotFound), verifique o status de inicialização do alibaba-cloud-metrics-adapter. Se o adaptador estiver executando normalmente e as métricas do HPA forem relacionadas ao Ingress, implante primeiro o componente SLS. Para mais detalhes, consulte Collect and analyze Nginx Ingress access logs.

  3. verifique o formato de sls.ingress.route. O valor deve ser <namespace>-<svc>-<port>, onde:

    • namespace: o namespace onde o Ingress reside

    • svc: o nome do Service associado ao Ingress

    • port: o nome da porta desse Service

Falha ao fazer pull da imagem do ack-alibaba-cloud-metrics-adapter (versão 1.3.7)

Ao atualize para a versão 1.3.7, você pode ver:

Failed to pull image "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".

Isso acontece porque o componente não oferece suporte a atualize diretas. Para resolver isso:

  1. Faça backup da configuração atual do componente.

  2. Desinstale a versão antiga.

  3. instale a versão mais recente usando a configuração de backup.

Perguntas frequentes

Como consulto sls_ingress_qps a partir da linha de comando?

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress"

Substitua {{SLS_Project}} pelo nome do seu Project do SLS. Se você não defina um nome personalizado ao crie o cluster, o padrão é k8s-log-{{ClusterId}}.

Uma resposta bem-sucedida retorna um ExternalMetricValueList com o QPS atual no campo value. Se você receber um erro ParameterInvalid, a métrica não tem dados — isso geralmente significa que o ALB Ingress não está configurado, mas sls_alb_ingress_qps foi consultado em vez de sls_ingress_qps.

Quais métricas o HPA suporta?

Para a lista completa, consulte Alibaba Cloud HPA Metrics. Métricas comuns de Ingress do SLS:

Métrica

Descrição

Parâmetro obrigatório

sls_ingress_qps

QPS para a rota de Ingress especificada

sls.ingress.route

sls_alb_ingress_qps

QPS para a rota do ALB Ingress

sls.ingress.route

sls_ingress_latency_avg

Latência média para todas as requisições

sls.ingress.route

sls_ingress_latency_p50

Latência no percentil 50

sls.ingress.route

sls_ingress_latency_p95

Latência no percentil 95

sls.ingress.route

sls_ingress_latency_p99

Latência no percentil 99

sls.ingress.route

sls_ingress_latency_p9999

Latência no percentil 99,99

sls.ingress.route

sls_ingress_inflow

Largura de banda de entrada para o Ingress

sls.ingress.route

Como adapto o HPA após personalizar o formato de log do Nginx Ingress?

A coleta de logs do SLS depende da definição de recurso personalizado (CRD) AliyunLogConfig implantada quando o SLS é ative pela primeira vez. Esse CRD é ajustado para o formato de log padrão do ACK Ingress Controller. Se você modificou o formato de log de acesso do Ingress Controller, atualize a seção processor_regex na configuração do CRD para corresponder ao seu formato personalizado. Para mais detalhes, consulte Collect container logs using a DaemonSet and a CRD.

Se o SLS estava ative quando você crie o cluster e você precisa de métricas de Ingress para o HPA, ative ou configure o SLS primeiro. Para mais detalhes, consulte Collect and analyze Nginx Ingress access logs.

Próximos passos