Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Scale applications by ALB Ingress QPS with HPA

Última atualização: Sep 12, 2026

Se sua aplicação precisar ajustar dinamicamente os recursos computacionais conforme o volume de requisições, use as métricas de QPS do ALB Ingress no Log Service para dimensionar automaticamente os pods da aplicação com HPA.

Pré-requisitos

Certifique-se de que:

Como funciona

  1. Crie um Deployment e um Service para sua aplicação.

  2. Configure um ALB Ingress para rotear o tráfego externo para o Service.

  3. Defina um Horizontal Pod Autoscaler (HPA) que monitore a métrica sls_alb_ingress_qps do Log Service.

  4. Quando o QPS ultrapassar o limiar definido por pod, o HPA expandirá o Deployment. Se o QPS diminuir, o HPA reduzirá a escala automaticamente.

Etapa 1: Crie uma aplicação e um Service

  1. Crie um arquivo chamado tea.yaml:

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

    kubectl apply -f tea.yaml

Etapa 2: Crie um ALB Ingress

Crie um objeto AlbConfig

  1. Localize o projeto do Log Service associado ao seu cluster. No console ACK, abra a página de detalhes do cluster, selecione a aba Cluster Information, encontre Log Service Project e anote o nome do projeto. Crie um arquivo chamado alb-test.yaml:

    Campo

    Descrição

    zoneMappings

    Pelo menos dois IDs de vSwitch de zonas distintas na mesma VPC.

    logProject

    Nome do projeto do Log Service.

    logStore

    Nome do Logstore. Deve começar com alb_. Será criado automaticamente caso não exista.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test
        addressType: Internet        # Internet-facing ALB
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****   # Replace with your first vSwitch ID
        - vSwitchId: vsw-uf6nun9tql5t8nh15****   # Replace with your second vSwitch ID (different zone)
        accessLogConfig:
          logProject: "****"         # Replace with your Log Service project name
          logStore: "alb_****"       # Replace with your Logstore name; must start with alb_
  2. Aplique o manifesto:

    kubectl apply -f alb-test.yaml

Crie um IngressClass

  1. Crie um arquivo chamado alb.yaml:

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo              # Must match the AlbConfig metadata.name above
  2. Aplique o manifesto:

    kubectl apply -f alb.yaml

Crie o Ingress

  1. Crie um arquivo chamado tea-ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.ingress.top
         http:
          paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
  2. Aplique o manifesto:

    kubectl apply -f tea-ingress.yaml
  3. Obtenha o endereço do ALB atribuído ao Ingress:

    kubectl get ingress

    Saída esperada:

    NAME          CLASS   HOSTS              ADDRESS                                            PORTS   AGE
    tea-ingress   alb     demo.ingress.top   alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com   80      7m5s

    Anote o valor de ADDRESS para usar no teste de carga da Etapa 4.

Etapa 3: Crie um HPA

  1. Crie um arquivo chamado hpa.yaml:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic   # The Deployment to scale
      minReplicas: 2                   # Minimum number of pods
      maxReplicas: 10                  # Maximum number of pods
      metrics:
        - type: External
          external:
            metric:
              name: sls_alb_ingress_qps   # ALB QPS metric from Log Service
              selector:
                matchLabels:
                  sls.project: "****"              # Replace with your Log Service project name
                  sls.logstore: "alb_****"         # Replace with your Logstore name
                  sls.ingress.route: "default-tea-svc-80"
                  # Format: <namespace>-<service-name>-<port>
                  # Example: default-nginx-80
            target:
              type: AverageValue        # Scale based on average QPS per pod
              averageValue: 2           # Scale out when average QPS per pod exceeds 2

    Este HPA dimensiona o nginx-deployment-basic entre 2 e 10 pods. A expansão ocorre quando o QPS médio por pod supera 2; a redução acontece quando o QPS cai.

  2. Aplique o manifesto:

    kubectl apply -f hpa.yaml
  3. Verifique se o HPA foi criado:

    kubectl get hpa

    Saída esperada:

    NAME          REFERENCE                           TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)   2         10        2          4h34m

    O QPS está em 0 porque ainda não há tráfego para a aplicação. A quantidade de pods encontra-se no mínimo (2).

  4. (Opcional) Inspecione os detalhes do HPA:

    kubectl describe hpa ingress-hpa

    Saída esperada:

    Name:                                            ingress-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               Tue, 31 Jan 2023 11:35:01 +0800
    Reference:                                       Deployment/nginx-deployment-basic
    Metrics:                                         ( current / target )
    "sls_alb_ingress_qps" (target average value):    0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

Etapa 4: Verifique o dimensionamento automático

Verifique a expansão (scale-out)

  1. Execute um teste de carga no endereço do ALB obtido na Etapa 2. Substitua o placeholder pelo seu endereço real.

    ab -c 5 -n 5000 -H Host:demo.ingress.top http://alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com/tea
  2. Durante a execução do teste, acompanhe o status do HPA em tempo real:

    kubectl get hpa ingress-hpa --watch

    À medida que o QPS ultrapassa o limiar, o número de réplicas aumenta. Pressione Ctrl+C para interromper.

  3. Após o teste de carga, confirme a expansão:

    kubectl get hpa

    Saída esperada:

    NAME          REFERENCE                           TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   12500m/2 (avg)   2         10        10         15m

    O campo REPLICAS exibe 10, confirmando que o Deployment atingiu a escala máxima.

Verifique a redução (scale-in)

Ao término do teste de carga, o QPS cai para 0 e o HPA reduz a escala do Deployment. Esse processo possui uma janela de estabilização de aproximadamente 5 minutos; portanto, aguarde antes de verificar.

kubectl get hpa

Saída esperada:

NAME          REFERENCE                           TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)    2         10        2          60m

O valor de REPLICAS retornou para 2, confirmando a redução da escala do Deployment.

Próximos passos