Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 21, 2026

Escale los pods a partir de señales de tráfico real, no solo de CPU. Para lograrlo, conecte las métricas de Ingress de Simple Log Service (SLS) al escalado horizontal de pods (HPA) de Kubernetes mediante la External Metrics API. Esta guía muestra un ejemplo completo: desplegar una aplicación Nginx, exponerla a través de un Ingress y configurar el HPA para escalar según las consultas por segundo (QPS) y la latencia del percentil 99.99.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Un clúster de ACK con kubectl configurado.

  • Un controlador de Ingress con la recopilación de registros de SLS habilitada (se habilita de forma predeterminada al crear un clúster).

  • Permisos para instalar Helm charts y crear recursos de HPA.

Cómo funciona

El componente ack-alibaba-cloud-metrics-adapter conecta los servicios de monitoreo de Alibaba Cloud con la External Metrics API de Kubernetes. Una vez instalado, el HPA consulta las métricas de Ingress de SLS, como sls_ingress_qps y sls_ingress_latency_p9999, y ajusta el número de réplicas del Deployment en consecuencia.

Paso 1: Instalar ack-alibaba-cloud-metrics-adapter

El componente ack-alibaba-cloud-metrics-adapter permite que Kubernetes obtenga datos de monitoreo de los servicios de Alibaba Cloud (como ECS, SLB y RDS) a través de la External Metrics API.

Importante

Este componente no admite actualizaciones en el lugar. Para actualizarlo, desinstale primero la versión actual e instale después la más reciente. Durante la desinstalación y reinstalación, los HPA relacionados pausan el escalado porque se detiene la obtención de datos de monitoreo.

  1. Inicie sesión en la consola de administración de Container Service. En el panel de navegación, haga clic en Clusters.

  2. Haga clic en el nombre de su clúster. En el panel de navegación izquierdo, seleccione Applications > Helm.

  3. En la página Helm, haga clic en Create. Complete la configuración de Basic Information, seleccione ack-alibaba-cloud-metrics-adapter y haga clic en Next.

  4. En la página Parameter Settings, elija una Chart Version y haga clic en OK.

Paso 2: Desplegar una aplicación de prueba

  1. Cree el archivo nginx-test.yaml con el siguiente contenido:

    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 la configuración:

    kubectl apply -f nginx-test.yaml

Paso 3: Crear un Ingress

  1. En el panel de navegación izquierdo de la página de administración del clúster, seleccione Network > Ingress. En la página Ingress, haga clic en Create Ingress.

  2. Complete los campos obligatorios y haga clic en OK. La consola lo redirige a la página Ingress.

  3. En la columna Name, haga clic en el nombre del Ingress para consultar sus reglas de enrutamiento. Para obtener más información, consulte Gestionar Ingress.

Paso 4: Configurar el HPA

El HPA admite dos métricas de Ingress de SLS, cada una con una semántica de escalado distinta:

Métrica

Tipo de destino

Comportamiento de escalado

sls_ingress_qps

AverageValue

Las QPS se dividen entre la cantidad actual de pods antes de la comparación.

sls_ingress_latency_p9999

Value

El valor de latencia sin procesar se compara directamente.

  1. Cree el archivo ingress-hpa.yaml con el siguiente contenido:

    Parámetro

    Obligatorio

    Descripción

    sls.ingress.route

    Sí

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

    sls.logstore

    Sí

    El logstore en Simple Log Service. Valor predeterminado: nginx-ingress.

    sls.project

    Sí

    El Project en Simple Log Service. Valor predeterminado: k8s-log-<cluster-id>.

    sls.internal.endpoint

    No

    Indica si se accede a SLS por la red interna. Valor predeterminado: true. Establezca este parámetro en false para usar la red 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

    La tabla anterior describe los parámetros utilizados en la configuración del HPA.

  2. Aplique la configuración:

    kubectl apply -f ingress-hpa.yaml

Comprobar el escalado

Ejecute una prueba de carga de cinco minutos contra el dominio de su Ingress para activar el escalado vertical:

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

Consulte el estado del HPA en tiempo real:

kubectl get hpa ingress-hpa --watch

A continuación se muestra el resultado esperado cuando el escalado se completa correctamente (REPLICAS alcanza MAXPODS):

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

Cuando el tráfico cae por debajo del umbral, REPLICAS vuelve al valor mínimo.

Solución de problemas

Para iniciar la solución de problemas, ejecute kubectl describe hpa ingress-hpa y revise el campo Conditions. Utilice las columnas Type y Status para identificar el problema y siga los pasos descritos a continuación.

La columna target muestra unknown

  1. Ejecute kubectl describe hpa <hpa-name> y compruebe el campo Conditions:

    • Si AbleToScale es False: verifique que el Deployment esté en buen estado.

    • Si ScalingActive es False: continúe con el siguiente paso.

  2. Ejecute el siguiente comando para comprobar si la External Metrics API está disponible:

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

    Si la respuesta es Error from server (NotFound), compruebe el estado de inicio de alibaba-cloud-metrics-adapter. Si el adaptador se ejecuta con normalidad y las métricas del HPA están relacionadas con Ingress, despliegue primero el componente de SLS. Para obtener más información, consulte Recopilar y analizar registros de acceso de Nginx Ingress.

  3. Compruebe el formato de sls.ingress.route. El valor debe ser <namespace>-<svc>-<port>, donde:

    • namespace: el namespace donde reside el Ingress.

    • svc: el nombre del Service asociado al Ingress.

    • port: el nombre del puerto de ese Service.

Error al extraer la imagen de ack-alibaba-cloud-metrics-adapter (versión 1.3.7)

Al actualizar a la versión 1.3.7, es posible que aparezca el siguiente mensaje:

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

Esto ocurre porque el componente no admite actualizaciones directas. Para resolverlo, siga estos pasos:

  1. Genere una copia de seguridad de la configuración actual del componente.

  2. Desinstale la versión anterior.

  3. Instale la versión más reciente con la configuración de la copia de seguridad.

Preguntas frecuentes

¿Cómo consulto sls_ingress_qps desde la línea de comandos?

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

Reemplace {{SLS_Project}} por el nombre de su Project de SLS. Si no definió un nombre personalizado al crear el clúster, el valor predeterminado es k8s-log-{{ClusterId}}.

Una respuesta exitosa devuelve un elemento ExternalMetricValueList con las QPS actuales en el campo value. Si recibe un error ParameterInvalid, la métrica no tiene datos. Por lo general, esto significa que ALB Ingress no está configurado, pero se consultó sls_alb_ingress_qps en lugar de sls_ingress_qps.

¿Qué métricas admite el HPA?

Para consultar la lista completa, visite Métricas de HPA de Alibaba Cloud. A continuación se muestran las métricas de Ingress de SLS más comunes:

Métrica

Descripción

Parámetro obligatorio

sls_ingress_qps

QPS de la ruta de Ingress especificada.

sls.ingress.route

sls_alb_ingress_qps

QPS de la ruta de ALB Ingress.

sls.ingress.route

sls_ingress_latency_avg

Latencia promedio de todas las solicitudes.

sls.ingress.route

sls_ingress_latency_p50

Latencia en el percentil 50.

sls.ingress.route

sls_ingress_latency_p95

Latencia en el percentil 95.

sls.ingress.route

sls_ingress_latency_p99

Latencia en el percentil 99.

sls.ingress.route

sls_ingress_latency_p9999

Latencia en el percentil 99.99.

sls.ingress.route

sls_ingress_inflow

Ancho de banda entrante del Ingress.

sls.ingress.route

¿Cómo adapto el HPA después de personalizar el formato de registro de Nginx Ingress?

La recopilación de registros de SLS depende de la definición de recurso personalizado (CRD) AliyunLogConfig, que se despliega cuando se habilita SLS por primera vez. Este CRD está ajustado para el formato de registro predeterminado del controlador de Ingress de ACK. Si modificó el formato del registro de acceso del controlador de Ingress, actualice la sección processor_regex en la configuración del CRD para que coincida con su formato personalizado. Para obtener más información, consulte Recopilar registros de contenedores mediante un DaemonSet y un CRD.

Si SLS estaba deshabilitado cuando creó el clúster y necesita métricas de Ingress para el HPA, habilítelo o configúrelo primero. Para obtener más información, consulte Recopilar y analizar registros de acceso de Nginx Ingress.

Pasos siguientes