Tous les produits
Search
Centre de documentation

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

Dernière mise à jour :Aug 11, 2026

Effectuez la mise à l'échelle des pods en vous basant sur des signaux de trafic réels plutôt que sur la seule utilisation du processeur. Pour ce faire, connectez les métriques Ingress de Simple Log Service (SLS) à la mise à l'échelle horizontale des pods Kubernetes (HPA) via l'API External Metrics. Ce guide présente un exemple complet : déploiement d'une application Nginx, exposition via un Ingress, puis configuration du HPA pour une mise à l'échelle fondée sur le nombre de requêtes par seconde (QPS) et la latence au 99,99e centile.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster ACK avec kubectl configuré

  • Un contrôleur Ingress avec la collecte de journaux SLS activée (activée par défaut lors de la création du cluster)

  • Les permissions nécessaires pour installer des charts Helm et créer des ressources HPA

Fonctionnement

Le composant ack-alibaba-cloud-metrics-adapter fait le lien entre les services de surveillance Alibaba Cloud et l'API External Metrics de Kubernetes. Une fois installé, le HPA peut interroger les métriques Ingress SLS, telles que sls_ingress_qps et sls_ingress_latency_p9999, et ajuster le nombre de réplicas de votre Deployment en conséquence.

Étape 1 : Installer ack-alibaba-cloud-metrics-adapter

Le composant ack-alibaba-cloud-metrics-adapter permet à Kubernetes de récupérer les données de surveillance des services Alibaba Cloud, y compris ECS, SLB et RDS, via l'API External Metrics.

Important

Ce composant ne prend pas en charge les mises à niveau sur place. Pour effectuer une mise à niveau, désinstallez d'abord la version actuelle, puis installez la dernière version. Pendant la désinstallation et la réinstallation, les HPA associés suspendent la mise à l'échelle, car la récupération des données de surveillance s'interrompt.

  1. Connectez-vous à la console Container Service Management. Dans le volet de navigation, cliquez sur Clusters.

  2. Cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, choisissez Applications > Helm.

  3. Sur la page Helm, cliquez sur Create. Renseignez la configuration des Basic Information, sélectionnez ack-alibaba-cloud-metrics-adapter, puis cliquez sur Next.

  4. Sur la page Parameter Settings, sélectionnez une Chart Version et cliquez sur OK.

Étape 2 : Déployer une application de test

  1. Créez le fichier nginx-test.yaml avec le contenu suivant :

    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. Appliquez la configuration :

    kubectl apply -f nginx-test.yaml

Étape 3 : Créer un Ingress

  1. Dans le volet de navigation de gauche de la page de gestion du cluster, choisissez Network > Ingress. Sur la page Ingress, cliquez sur Create Ingress.

  2. Renseignez les champs obligatoires et cliquez sur OK. La console vous redirige vers la page Ingress.

  3. Dans la colonne Name, cliquez sur le nom de l'Ingress pour afficher ses règles de routage. Pour plus de détails, consultez la rubrique Manage Ingress.

Étape 4 : Configurer le HPA

Le HPA prend en charge deux métriques Ingress SLS aux sémantiques de mise à l'échelle distinctes :

Metric Target type Scaling behavior
sls_ingress_qps AverageValue Le QPS est divisé par le nombre actuel de pods avant comparaison
sls_ingress_latency_p9999 Value La valeur brute de latence est comparée directement
  1. Créez le fichier ingress-hpa.yaml avec le contenu suivant :

    Parameter Required Description
    sls.ingress.route Oui Format : <namespace>-<svc>-<port>. Exemple : default-nginx-80
    sls.logstore Oui Le Logstore dans Simple Log Service. Valeur par défaut : nginx-ingress
    sls.project Oui Le Project dans Simple Log Service. Valeur par défaut : k8s-log-<cluster-id>
    sls.internal.endpoint Non Indique si l'accès à SLS s'effectue via le réseau interne. Valeur par défaut : true. Définissez cette valeur sur false pour utiliser le réseau public.
    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

    Le tableau suivant décrit les paramètres utilisés dans la configuration du HPA.

  2. Appliquez la configuration :

    kubectl apply -f ingress-hpa.yaml

Vérifier la mise à l'échelle

Exécutez un test de charge de 5 minutes sur le domaine de votre Ingress pour déclencher la montée en charge :

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

Surveillez les statuts du HPA en temps réel :

kubectl get hpa ingress-hpa --watch

Voici un exemple de sortie attendu lorsque la montée en charge réussit (REPLICAS atteint MAXPODS) :

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

Lorsque le trafic retombe sous le seuil, la valeur de REPLICAS revient au minimum.

Dépannage

Commencez le dépannage en exécutant kubectl describe hpa ingress-hpa et en vérifiant le champ Conditions. Utilisez les colonnes Type et Status pour identifier le problème, puis suivez les étapes ci-dessous.

La colonne target affiche unknown

  1. Exécutez kubectl describe hpa <hpa-name> et vérifiez le champ Conditions :

    • Si AbleToScale a la valeur False : vérifiez que le Deployment est sain.

    • Si ScalingActive a la valeur False : passez à l'étape suivante.

  2. Exécutez la commande suivante pour vérifier la disponibilité de l'API External Metrics :

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

    Si la réponse est Error from server (NotFound), vérifiez l'état de démarrage de alibaba-cloud-metrics-adapter. Si l'adaptateur fonctionne normalement et que les métriques HPA sont liées à Ingress, déployez d'abord le composant SLS. Pour plus de détails, consultez la rubrique Collect and analyze Nginx Ingress access logs.

  3. Vérifiez le format de sls.ingress.route. La valeur doit être <namespace>-<svc>-<port>, où :

    • namespace : le namespace où réside l'Ingress

    • svc : le nom du Service associé à l'Ingress

    • port : le nom du port de ce Service

Échec du téléchargement de l'image ack-alibaba-cloud-metrics-adapter (version 1.3.7)

Lors de la mise à niveau vers la version 1.3.7, le message d'erreur suivant peut s'afficher :

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

Ce problème survient car le composant ne prend pas en charge les mises à jour directes. Pour le résoudre :

  1. Sauvegardez la configuration actuelle du composant.

  2. Désinstallez l'ancienne version.

  3. Installez la dernière version en utilisant la configuration sauvegardée.

FAQ

Comment interroger sls_ingress_qps depuis la ligne de commande ?

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

Remplacez {{SLS_Project}} par le nom de votre Project SLS. Si vous n'avez pas défini de nom personnalisé lors de la création du cluster, la valeur par défaut est k8s-log-{{ClusterId}}.

Une réponse réussie renvoie une liste ExternalMetricValueList avec le QPS actuel dans le champ value. Si vous obtenez une erreur ParameterInvalid, cela signifie qu'il n'y a aucune donnée pour la métrique. Cela indique généralement que ALB Ingress n'est pas configuré, mais que sls_alb_ingress_qps a été interrogé au lieu de sls_ingress_qps.

Quelles métriques le HPA prend-il en charge ?

Pour la liste complète, consultez la rubrique Alibaba Cloud HPA Metrics. Métriques Ingress SLS courantes :

Metric Description Required parameter
sls_ingress_qps QPS pour la route Ingress spécifiée sls.ingress.route
sls_alb_ingress_qps QPS pour la route ALB Ingress sls.ingress.route
sls_ingress_latency_avg Latence moyenne pour toutes les requêtes sls.ingress.route
sls_ingress_latency_p50 Latence au 50e centile sls.ingress.route
sls_ingress_latency_p95 Latence au 95e centile sls.ingress.route
sls_ingress_latency_p99 Latence au 99e centile sls.ingress.route
sls_ingress_latency_p9999 Latence au 99,99e centile sls.ingress.route
sls_ingress_inflow Bande passante entrante pour Ingress sls.ingress.route

Comment adapter le HPA après personnalisation du format des journaux Nginx Ingress ?

La collecte des journaux SLS s'appuie sur la définition de ressource personnalisée (CRD) AliyunLogConfig déployée lors de la première activation de SLS. Cette CRD est optimisée pour le format de journal par défaut du contrôleur Ingress ACK. Si vous avez modifié le format des journaux d'accès du contrôleur Ingress, mettez à jour la section processor_regex dans la configuration de la CRD pour qu'elle corresponde à votre format personnalisé. Pour plus de détails, consultez la rubrique Collect container logs using a DaemonSet and a CRD.

Si SLS était désactivé lors de la création du cluster et que vous avez besoin des métriques Ingress pour le HPA, réactivez ou configurez d'abord SLS. Pour plus de détails, consultez la rubrique Collect and analyze Nginx Ingress access logs.

Étapes suivantes