Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Configure custom metrics using AHPA for application scaling

Última atualização: Jun 27, 2026

Em cargas de trabalho como serviços web ou processamento de mensagens, o dimensionamento baseado apenas em CPU ou memória frequentemente desperdiça recursos ou aumenta a latência, pois a carga real se correlaciona com sinais de negócio, como consultas por segundo (QPS) e profundidade de fila. Configure o AdvancedHorizontalPodAutoscaler (AHPA) para dimensionar automaticamente com base em métricas do Managed Service for Prometheus que correspondam ao tráfego real.

Como funciona

image

  1. Expor métricas: As aplicações expõem métricas de negócio, como requests_per_second, no formato Prometheus por meio de um endpoint HTTP, como /metrics.

  2. Coletar métricas: O agente do Managed Service for Prometheus no cluster descobre e coleta periodicamente os dados de métricas expostos pela aplicação e os armazena no Managed Service for Prometheus.

  3. Consultar métricas: O controlador do AHPA consulta periodicamente a API de métricas externas para obter o valor atual da métrica personalizada.

  4. Adaptar métricas: O ack-alibaba-cloud-metrics-adapter recebe a solicitação, traduz-a em uma consulta PromQL e a envia ao Managed Service for Prometheus.

  5. Retornar valor: Após executar a consulta, o Managed Service for Prometheus retorna o resultado ao adaptador.

  6. Reportar resultado: O adaptador de métricas reporta o resultado ao controlador do AHPA.

  7. Decisão de dimensionamento: O controlador do AHPA calcula o número desejado de réplicas de pod com base nos valores atuais das métricas e no limiar alvo predefinido. Em seguida, ajusta o número de replicas do Deployment alvo para dimensionar a aplicação horizontalmente.

Antes de começar

Etapa 1: Implantar a aplicação e o ServiceMonitor

Primeiro, implante uma aplicação de exemplo capaz de expor métricas personalizadas e configure um ServiceMonitor para que o Prometheus possa coletar o endpoint de métricas da aplicação.

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

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Deployments.

  3. Na página Deployments, clique em Create from YAML e siga as instruções na tela para implantar o yaml. Isso cria a aplicação sample-app, um Service para fornecer acesso interno ao cluster e um ServiceMonitor para coleta de métricas.

    • Deployment

      Este contêiner expõe a métrica personalizada requests_per_second no caminho /metrics na porta 8080, indicando o número de requisições por segundo.

      Conteúdo yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sample-app
        namespace: default
        labels:
          app: sample-app
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sample-app
        template:
          metadata:
            labels:
              app: sample-app
          spec:
            containers:
            - image: registry-cn-hangzhou.ack.aliyuncs.com/acs/ahpa-external-sample:v1
              name: metrics-provider
              ports:
              - name: http
                containerPort: 8080
              env:
              - name: NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
              - name: POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
    • Service

      Isso cria um endpoint estável dentro do cluster para o Deployment.

      Conteúdo yaml

      apiVersion: v1
      kind: Service
      metadata:
        name: sample-app
        namespace: default
        labels:
          app: sample-app
      spec:
        # Selects pods with the label app: sample-app.
        selector:
          app: sample-app
        ports:
        - name: http
          port: 8080
          targetPort: 8080
        type: ClusterIP
    • ServiceMonitor

      A coleta de métricas é iniciada após a criação deste recurso. O ServiceMonitor vem ativado por padrão. Para verificar seu status, consulte Ativar recursos .

      Conteúdo yaml

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: sample-app
        namespace: default
      spec:
        endpoints:
        - interval: 30s
          port: http
          path: /metrics
        namespaceSelector:
          any: true
        selector:
          matchLabels:
            # Associates with the previously created Service through this label.
            app: sample-app

Etapa 2: Implantar o adaptador de métricas

O adaptador de métricas atua como uma ponte entre o AHPA e o Prometheus. Após implantar o add-on, configure-o para conectar à sua instância do Managed Service for Prometheus.

  1. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Applications > Helm.

  2. Clique em Create, pesquise e implante o ack-alibaba-cloud-metrics-adapter.

    • Chart Version: Utilize a versão mais recente.

    • Configuração de parâmetros: No yaml do Chart, na seção Parameter, configure prometheus.url e prometheus.prometheusHeader e clique em OK.

      • prometheus.url: Endereço da API HTTP do Managed Service for Prometheus (endpoint de leitura do Grafana). Para mais informações, consulte Como obter a URL de solicitação de dados do Prometheus.

      • prometheus.prometheusHeader:

        Etapas detalhadas

        • Prometheus V1 (autenticação por token desativada por padrão): Se a autenticação por token estiver ativada, copie o token do console do Prometheus e defina-o na configuração do adaptador.

          image

          prometheus:
            prometheusHeader:
            - Authorization: {Token}
        • Prometheus V2 (autenticação por AccessKey ativada por padrão): Se o acesso sem senha não estiver ativado, codifique seu AccessKey ID e AccessKey secret em Base64 e defina-os na configuração do adaptador.

          1. Gere uma string codificada em Base64.

            Concatene o AccessKey ID e o AccessKey secret no formato AccessKey:AccessSecret e codifique o resultado em Base64.

            echo -n 'accessKey:secretKey' | base64
          2. Configure o componente.

            Insira a string gerada no formato Basic <encoded string> no campo Authorization de prometheusHeader.

            ...
                prometheus:
                  prometheusHeader:
                  - Authorization: Basic YWxxxxeQ==
            ...

Etapa 3: Configurar métricas personalizadas

  1. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Applications > Helm.

  2. Localize o ack-alibaba-cloud-metrics-adapter e clique em Actions na coluna Actions.

  3. Substitua os parâmetros correspondentes no modelo pelo conteúdo yaml a seguir e clique em Update.

    No exemplo, substitua requests_per_second pela métrica real de requisições por segundo no Prometheus.

      ......
      prometheus:
        adapter:
          rules:
            custom:
            - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>})
              name:
                as: requests_per_second
              resources:
                overrides:
                  namespace:
                    resource: namespace
              seriesQuery: requests_per_second # Set the metric name. Make sure this name matches the metric in Managed Service for Prometheus.
        ......
  4. Use a API de Métricas Personalizadas para visualizar detalhes sobre as métricas disponíveis.

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

    Saída esperada:

    {"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"requests_per_second","metricLabels":{},"timestamp":"2025-10-15T07:57:00Z","value":"1"}]}

Etapa 4: Criar uma regra do AHPA e verificar o dimensionamento

Em seguida, crie uma regra do AHPA para automatizar o dimensionamento e execute um teste de estresse para verificar seu comportamento.

  1. Crie um recurso do AHPA.

    Use o yaml a seguir para criar um recurso do AHPA. O AHPA escala horizontalmente quando o valor médio de requests_per_second por pod excede 10 e reduz a escala quando cai abaixo de 10.

    • Configure external.metric especificando o nome da métrica e matchLabels. O nome da métrica deve corresponder ao especificado em Configurar métricas personalizadas. Neste exemplo, a métrica personalizada está definida como requests_per_second.

    • Defina o limiar alvo. Por exemplo, defina AverageValue como 10. Isso significa que o dimensionamento horizontal começa se o número de requisições por segundo exceder 10.

    Conteúdo yaml

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      name: customer-deployment
      namespace: default
    spec:
      metrics:
      - external:
          metric:
            # This must match the name.as value in the metrics adapter rule.
            name: requests_per_second
            selector:
              matchLabels:
                # Filter the metric source by using labels.
                namespace: default
                service: sample-app
          target:
            # Indicates that the target value is an average per pod.
            type: AverageValue
            # Indicates that a scale-out is triggered when the average QPS per pod exceeds 10.
            averageValue: 10
        type: External
      # Minimum and maximum replica limits.
      minReplicas: 0
      maxReplicas: 50
      prediction:
        quantile: 95
        scaleUpForward: 180
      scaleStrategy: observer
      # Declare the target workload for AHPA to scale.
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
      instanceBounds:
      - startTime: "2023-08-01 00:00:00"
        endTime: "2033-08-01 00:00:00"
        bounds:
        - cron: "* 0-8 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 4
        - cron: "* 9-15 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 5
        - cron: "* 16-23 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 1
  2. Após o teste de estresse, verifique o status do objeto AHPA.

    kubectl get ahpa

    Saída esperada:

    NAME                  STRATEGY   PERIODICITY   REFERENCE               METRIC                TARGETS   DESIREDPODS   REPLICAS   MINPODS   MAXPODS   AGE
    customer-deployment   observer                 Deployment/sample-app   requests_per_second   16/10     2             1          1         50        102s
    • TARGETS: O valor atual da métrica é 16 e o valor alvo é 10.

    • DESIREDPODS: O AHPA calcula o número desejado de réplicas como 2 com base em Current Value (16) / Target Value (10) = 2.

    • REPLICAS: Exibe o número real de réplicas de sample-app.

      Como a STRATEGY atual do AHPA é observer , ele realiza apenas cálculos e observações, sem executar operações de dimensionamento. Portanto, mesmo que DESIREDPODS seja 2, REPLICAS permanece 1 .

    Execute o comando kubectl get deployment sample-app para verificar as alterações em tempo real na contagem de réplicas de pod.

Considerações de produção

Aspecto

Descrição

Seleção de métricas

Utilize métricas suavizadas que reflitam a carga de trabalho real em vez de valores instantâneos. Isso evita flutuações de dimensionamento causadas por picos de tráfego.

Configuração da política de dimensionamento

  • Defina limites de segurança explícitos (maxReplicas e minReplicas) para ações de dimensionamento, prevenindo esgotamento de recursos e custos descontrolados causados por ataques de tráfego ou anomalias nas métricas.

  • Configure uma janela de estabilização para redução de escala definindo um período de observação mais longo para a redução do que para a expansão. Isso evita uma redução prematura quando o tráfego cai, prevenindo flutuações caso o tráfego se recupere rapidamente.

Monitoramento e alertas

Configure alertas para o status operacional do AHPA a fim de identificar prontamente problemas potenciais, como gargalos de capacidade, políticas configuradas incorretamente ou tráfego upstream anormal.