Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Implantando o AHPA

Última atualização: Jun 27, 2026

Container Service for Kubernetes oferece suporte ao Advanced Horizontal Pod Autoscaler (AHPA). O AHPA analisa dados históricos para prever a demanda futura de recursos e ajusta dinamicamente o número de réplicas de pods. Assim, escala horizontalmente e pré-aquece os recursos antes dos picos de tráfego, melhorando a capacidade de resposta e a estabilidade do sistema. Além disso, reduz a escala dos recursos em períodos de baixa demanda para diminuir custos.

Pré-requisitos

Etapa 1: Instalar o AHPA Controller

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

  2. Na página Clusters, clique no nome do cluster. Em seguida, no painel de navegação à esquerda, clique em Components and Add-ons.

  3. Na página Add-ons, localize o componente AHPA Controller. Clique em Install no cartão do componente e siga as instruções na tela para concluir a instalação.

Etapa 2: Configurar a fonte de dados do Prometheus

  1. Faça login no console do ARMS.

  2. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances.

  3. Na parte superior da página Instances, selecione a região da instância do Prometheus e clique no nome da instância (igual ao nome do cluster ACK).

  4. Na página Settings, na seção HTTP API Address (Grafana Read Address), anote os valores dos seguintes campos:

    • (Opcional) Se a autenticação baseada em token estiver ativada, anote o token de acesso.

    • Visualize e anote o endpoint de Internal Network (URL do Prometheus).

  5. Defina a URL de consulta do Prometheus no cluster ACK.

    1. Crie um arquivo chamado application-intelligence.yaml com o seguinte conteúdo.

      • prometheusUrl: Endpoint do Managed Service for Prometheus.

      • token: Token de acesso ao Prometheus.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: application-intelligence
        namespace: kube-system
      data:
        prometheusUrl: "http://cn-hangzhou-intranet.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou"
        token: "eyJhxxxxx"
      Nota

      Para visualizar o painel do AHPA no Managed Service for Prometheus, configure também os seguintes campos neste ConfigMap:

        Para mais informações, consulte Ativar o painel do Prometheus para AHPA.

      • Execute o comando a seguir para implantar o application-intelligence.

        kubectl apply -f application-intelligence.yaml

    Etapa 3: Implantar um serviço de teste

    O serviço de teste inclui um Deployment chamado fib-deployment, um Service chamado fib-svc e um gerador de carga chamado fib-loader para simular flutuações de tráfego. Implante também um recurso HorizontalPodAutoscaler (HPA) para estabelecer uma linha de base de comparação com o AHPA.

    Crie um arquivo chamado demo.yaml com o seguinte conteúdo.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-deployment
      namespace: default
      annotations:
        k8s.aliyun.com/eci-use-specs: "1-2Gi"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fib-deployment
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: fib-deployment
        spec:
          containers:
          - image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-server:20200820-171837
            imagePullPolicy: IfNotPresent
            name: user-container
            ports:
            - containerPort: 8080
              name: user-port
              protocol: TCP
            resources:
              limits:
                cpu: "1"
                memory: 2000Mi
              requests:
                cpu: "1"
                memory: 2000Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: fib-svc
      namespace: default
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: fib-deployment
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-loader
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: fib-loader
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: fib-loader
        spec:
          containers:
          - args:
            - -c
            - |
              /ko-app/fib-loader --service-url="http://fib-svc.${NAMESPACE}?size=35&interval=0" --save-path=/tmp/fib-loader-chart.html
            command:
            - sh
            env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
            imagePullPolicy: IfNotPresent
            name: loader
            ports:
            - containerPort: 8090
              name: chart
              protocol: TCP
            resources:
              limits:
                cpu: "8"
                memory: 16000Mi
              requests:
                cpu: "2"
                memory: 4000Mi
    ---
    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: fib-hpa
      namespace: default
    spec:
      maxReplicas: 50
      minReplicas: 1
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: fib-deployment
      targetCPUUtilizationPercentage: 50
    ---

    Etapa 4: Implantar o AHPA

    Para configurar uma política de dimensionamento, crie um recurso AdvancedHorizontalPodAutoscaler.

    1. Crie um arquivo chamado ahpa-demo.yaml com o seguinte conteúdo.

      apiVersion: autoscaling.alibabacloud.com/v1beta1
      kind: AdvancedHorizontalPodAutoscaler
      metadata:
        name: ahpa-demo
      spec:
        scaleStrategy: observer
        metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 40
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: fib-deployment 
        maxReplicas: 100
        minReplicas: 2
        stabilizationWindowSeconds: 300
        prediction:
          quantile: 95
          scaleUpForward: 180
        instanceBounds:
        - startTime: "2021-12-16 00:00:00"
          endTime: "2031-12-16 00:00:00"
          bounds:
          - cron: "* 0-8 ? * MON-FRI"
            maxReplicas: 15
            minReplicas: 4
          - cron: "* 9-15 ? * MON-FRI"
            maxReplicas: 15
            minReplicas: 10
          - cron: "* 16-23 ? * MON-FRI"
            maxReplicas: 20
            minReplicas: 15

      A tabela a seguir descreve alguns parâmetros.

      Parâmetro

      Obrigatório

      Descrição

      scaleTargetRef

      Sim

      Especifica o Deployment de destino.

      metrics

      Sim

      Configura as métricas de dimensionamento. Métricas suportadas: CPU, GPU, memória, QPS e RT.

      target

      Sim

      Limiar de destino. Por exemplo, averageUtilization: 40 define a utilização alvo da CPU em 40%.

      scaleStrategy

      Não

      Define o modo de dimensionamento. Valor padrão: observer.

      • auto: O AHPA executa operações de dimensionamento.

      • observer: O AHPA apenas observa, sem executar dimensionamento. Use este modo para validar o funcionamento do AHPA.

      • proactive: Apenas a previsão proativa entra em vigor.

      • reactive: Apenas o dimensionamento reativo entra em vigor.

      maxReplicas

      Sim

      Número máximo de réplicas para expansão horizontal.

      minReplicas

      Sim

      Número mínimo de réplicas para redução de escala.

      stabilizationWindowSeconds

      Não

      Janela de estabilização para operações de dimensionamento. Evita flutuações rápidas no número de réplicas. Valor padrão: 300 segundos.

      prediction.quantile

      Sim

      Quantil de previsão. Valores maiores resultam em previsões mais conservadoras. Intervalo válido: 0 a 100. Recomendado: 90 a 99. Padrão: 99.

      prediction.scaleUpForward

      Sim

      Tempo necessário para um novo pod ficar Ready. Também conhecido como tempo de cold start.

      instanceBounds

      Não

      Limites de réplicas para períodos específicos.

      • startTime: Hora de início.

      • endTime: Hora de término.

      instanceBounds.bounds.cron

      Não

      Configura uma tarefa agendada via expressão cron, que usa campos separados por espaços para definir horários. Exemplo: - cron: " 0-8 ? MON-FRI" executa a tarefa a cada minuto das 00:00 às 08:59, de segunda a sexta-feira.

      Os campos de uma expressão cron são descritos a seguir. Para mais informações, consulte Tarefas agendadas Cron.

      Campo

      Obrigatório

      Valores permitidos

      Caracteres especiais

      Minutos

      Sim

      0–59

      * / , -

      Horas

      Sim

      0–23

      * / , -

      Dia do mês

      Sim

      1–31

      * / , - ?

      Mês

      Sim

      1–12 ou JAN–DEC

      * / , -

      Dia da semana

      Sim

      0–6 ou SUN–SAT

      * / , - ?

      Nota
      • Os campos Mês e Dia da semana não diferenciam maiúsculas de minúsculas. Por exemplo, SUN, Sun e sun têm o mesmo efeito.

      • Se o campo Dia da Semana não for configurado, o padrão será *.

      • Caracteres especiais:

        • *: Corresponde a todos os valores possíveis no campo.

        • /: Especifica um incremento para um valor.

        • ,: Lista valores enumerados.

        • -: Especifica um intervalo.

        • ?: Indica ausência de valor específico. Use no campo Dia do mês ou Dia da semana quando o outro estiver especificado.

    2. Execute o comando a seguir para criar a política de dimensionamento do AHPA.

      kubectl apply -f ahpa-demo.yaml

    Etapa 5: Visualizar os resultados da previsão

    Para visualizar os resultados do dimensionamento preditivo do AHPA, ative o painel do Prometheus para AHPA.

    Nota

    Como a previsão requer sete dias de dados históricos, execute a aplicação de exemplo por sete dias após a implantação para ver os resultados. Caso tenha uma aplicação de produção existente, especifique-a diretamente no recurso AHPA.

    Este exemplo usa o modo de dimensionamento observer (modo observer) para comparar os resultados de previsão do AHPA com os de uma política HPA padrão. Os resultados do HPA servem como linha de base para os requisitos reais de recursos da aplicação, permitindo observar se as previsões do AHPA atendem às expectativas.

    image.png

    • Uso Real e Previsto de CPU: A linha verde representa o uso real de CPU gerenciado pelo HPA. A linha amarela representa o uso previsto pelo AHPA.

      • Curva amarela acima da verde indica capacidade de CPU prevista suficiente.

      • Curva amarela subindo antes da verde indica que o AHPA prepara os recursos necessários com antecedência.

    • Tendências de Pods: A linha verde representa o número real de pods dimensionados pelo HPA. A linha amarela representa a previsão do AHPA.

      • Uma curva amarela mais baixa pode indicar que o AHPA atinge o mesmo objetivo com menos pods.

      • A curva amarela é mais suave que a verde, indicando menor volatilidade nos eventos de dimensionamento gerenciados pelo AHPA, o que melhora a estabilidade do serviço.

    Os resultados indicam que a tendência de dimensionamento está conforme o esperado. Se a tendência atender às expectativas após o período de observação, defina o modo de dimensionamento como auto para permitir que o AHPA gerencie o dimensionamento automaticamente.

    Documentos relacionados