Tous les produits
Search
Centre de documentation

Container Compute Service:Déployer AHPA pour la prédiction intelligente des ressources

Dernière mise à jour :Sep 17, 2026

Alibaba Cloud Container Compute Service (ACS) prend en charge Advanced Horizontal Pod Autoscaler (AHPA). AHPA analyse les données historiques issues de Prometheus afin de prévoir la demande future en ressources et d'ajuster dynamiquement le nombre de réplicas de pods. Cette approche garantit que les ressources sont mises à l'échelle et préchargées avant les pics de trafic, améliorant ainsi la réactivité et la stabilité du système. Lors des creux de trafic prévus, AHPA réduit également les ressources pour optimiser les coûts.

Informations générales

Le contrôleur AHPA s'intègre à Managed Service for Prometheus pour obtenir et traiter les données de métriques historiques de votre application. Ces données constituent la base des décisions de mise à l'échelle prédictive. Grâce à des algorithmes d'apprentissage automatique, le contrôleur AHPA prévoit le nombre d'instances de pod nécessaires pour les 24 heures suivantes, ce qui s'avère particulièrement utile pour gérer les charges de travail présentant des schémas cycliques. En combinant des stratégies de prédiction proactive et passive, le contrôleur AHPA ajuste le nombre d'instances de pod afin de garantir que les ressources soient préchargées pour les pics de trafic à venir. Cette méthode améliore la réactivité et les performances des applications tout en vous aidant à maîtriser les coûts et à maintenir la stabilité des services. Pour plus d'informations sur AHPA, consultez la rubrique Présentation d'AHPA.

Prérequis

Étape 1 : Installer le contrôleur AHPA

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, cliquez sur Add-ons.

  3. Sur la page Add-ons, recherchez le composant AHPA controller dans la catégorie Others et cliquez sur Install.

Étape 2 : Configurer Prometheus et intégrer AHPA

  1. Connectez-vous à la console ARMS.

  2. Dans le volet de navigation de gauche, accédez à Managed Service for Prometheus > Instances.

  3. En haut de la page Instances, sélectionnez la région où votre instance Prometheus est déployée. Cliquez sur le nom de l'instance cible, qui porte le même nom que votre cluster ACS et dont le Instance Type est General. Dans le volet de navigation de gauche, cliquez sur Settings. Dans la section HTTP API Address (Grafana Read Address), notez les valeurs des paramètres suivants.

    • Si un jeton est activé, notez le jeton d'accès.

    • Consultez et notez le point de terminaison Internal Network (URL Prometheus).

  4. Définissez l'URL de requête Prometheus dans le cluster ACS.

    1. Créez un fichier nommé application-intelligence.yaml avec le contenu suivant.

      • prometheusUrl : le point d'accès de l'instance ARMS Prometheus.

      • token : le jeton d'accès de l'instance 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"
      Remarque

      Pour afficher le tableau de bord AHPA dans Managed Service for Prometheus, vous devez également configurer les champs suivants dans ce ConfigMap :

      • prometheus_writer_url : définissez cette valeur sur le point de terminaison interne d'écriture distante.

      • prometheus_writer_ak : définissez cette valeur sur l'ID AccessKey de votre compte Alibaba Cloud.

      • prometheus_writer_sk : définissez cette valeur sur le secret AccessKey de votre compte Alibaba Cloud.

    2. Exécutez la commande suivante pour déployer application-intelligence.

      kubectl apply -f application-intelligence.yaml
  5. Intégrez AHPA.

    1. Connectez-vous à la console ARMS.

    2. Dans le volet de navigation de gauche, accédez à Managed Service for Prometheus > Instances.

    3. Dans la barre de navigation supérieure, cliquez sur Integrate Other Components. Dans le Integration Center, recherchez AHPA et cliquez sur la carte AHPA.

    4. Intégrez le composant AHPA.

      1. Sur la page ACK AHPA, choisissez Select Container Service Cluster > Select Cluster, puis sélectionnez le cluster à intégrer dans la liste déroulante.

      2. Configurez les paramètres de la section Configuration Information en vous basant sur le tableau suivant. Cliquez sur OK.

        Parameter

        Description

        Exporter name

        Nom unique pour l'exportateur AHPA.

        Metrics collection interval (seconds)

        Intervalle de collecte des données de surveillance.

    5. Une fois la vérification de l'Integration Status Check terminée, cliquez sur Integration Management.

Étape 3 : Déployer un service de test

Les services de test incluent fib-deployment, fib-svc et fib-loader, un service qui simule les pics et les creux de requêtes, ainsi qu'une ressource HPA pour comparer les résultats avec AHPA.

  1. Créez un fichier nommé demo.yaml avec le contenu suivant.

    Contenu YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-deployment
      namespace: default
    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
    ---
  2. Exécutez la commande suivante pour déployer le service de test.

    kubectl apply -f demo.yaml

Étape 4 : Créer une ressource AHPA

Soumettez une ressource AdvancedHorizontalPodAutoscaler pour configurer la politique de mise à l'échelle.

  1. Créez un fichier nommé ahpa-demo.yaml avec le contenu suivant.

    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

    Le tableau suivant décrit certains des paramètres.

    Parameter

    Required

    Description

    scaleTargetRef

    Yes

    Spécifie le Deployment cible.

    metrics

    Yes

    Configure les métriques pour la mise à l'échelle. Les métriques prises en charge incluent le CPU, le GPU, la mémoire, les QPS et le RT.

    target

    Yes

    Le seuil cible. Par exemple, averageUtilization: 40 signifie que l'utilisation cible du CPU est de 40 %.

    scaleStrategy

    No

    Spécifie le mode de mise à l'échelle. La valeur par défaut est observer.

    • auto : AHPA gère la mise à l'échelle.

    • observer : Observe sans effectuer d'actions de mise à l'échelle réelles. Vous pouvez utiliser ce mode pour vérifier si AHPA fonctionne comme prévu.

    • scalingUpOnly : Effectue uniquement des opérations de mise à l'échelle horizontale (scale-out).

    • proactive : Active uniquement la prédiction proactive.

    • reactive : Active uniquement la prédiction passive.

    maxReplicas

    Yes

    Le nombre maximal de réplicas pour la mise à l'échelle horizontale (scale-out).

    minReplicas

    Yes

    Le nombre minimal de réplicas pour la réduction de l'échelle (scale-in).

    stabilizationWindowSeconds

    No

    La période de refroidissement pour la réduction de l'échelle (scale-in). Valeur par défaut : 300 secondes.

    prediction.quantile

    Yes

    Le quantile de prédiction. Une valeur plus élevée est plus conservatrice car elle augmente la probabilité que la valeur réelle de la métrique reste inférieure à la cible. Valeurs valides : 0 à 100. Valeur par défaut : 99. Plage recommandée : 90 à 99.

    prediction. scaleUpForward

    Yes

    Le temps nécessaire pour qu'un nouveau pod soit prêt (temps de démarrage à froid).

    instanceBounds

    No

    Les limites du nombre de réplicas dans des plages horaires spécifiques.

    • startTime : l'heure de début.

    • endTime : l'heure de fin.

    instanceBounds.bounds.cron

    No

    Une expression cron qui spécifie un planning. Une expression cron se compose de cinq champs séparés par des espaces. Par exemple, - cron: " 0-8 ? MON-FRI" spécifie que la tâche s'exécute de 00:00 à 08:59 tous les lundis aux vendredis.

    Le tableau suivant décrit les champs d'une expression cron. Pour plus d'informations, consultez la rubrique Expressions cron.

    Field

    Required

    Allowed values

    Allowed special characters

    Minutes

    Yes

    0-59

    * / , -

    Hours

    Yes

    0-23

    * / , -

    Day of month

    Yes

    1-31

    * / , – ?

    Month

    Yes

    1-12 or JAN-DEC

    * / , -

    Day of week

    No

    0-6 or SUN-SAT

    * / , – ?

    Remarque
    • Les valeurs des champs Month et Day of week ne sont pas sensibles à la casse. Par exemple, SUN, Sun et sun ont le même effet.

    • Si le champ Day of week n'est pas configuré, la valeur par défaut est *.

    • Caractères spéciaux :

      • * : spécifie toutes les valeurs possibles.

      • / : spécifie un incrément.

      • , : liste des valeurs.

      • - : spécifie une plage.

      • ? : spécifie qu'aucune valeur spécifique n'est définie.

  2. Exécutez la commande suivante pour créer la politique de mise à l'échelle AHPA.

    kubectl apply -f ahpa-demo.yaml

Étape 5 : Afficher les résultats de la prédiction

Sur la page Integration Management, accédez à l'onglet Container Service et cliquez sur le nom de votre cluster. Sélectionnez ACK AHPA dans la liste déroulante Component Type. Enfin, accédez à l'onglet Dashboards et cliquez sur ahpa-dashboard pour afficher les données de surveillance.

Le tableau de bord AHPA fourni par Managed Service for Prometheus inclut des données telles que l'utilisation du CPU, le nombre de pods et le nombre de pods prédit.

  • Le graphique CPU Utilization & Actual PODs affiche l'utilisation moyenne du CPU et le nombre de pods pour la charge de travail actuelle.

  • Le graphique Actual and Predicted CPU Usage montre l'utilisation totale du CPU des pods de la charge de travail actuelle par rapport à l'utilisation prédite. Si l'utilisation prédite est supérieure à l'utilisation réelle, cela indique que la capacité CPU prévue est suffisante.

  • Dans la section Pod Trend, vous pouvez consulter le nombre réel de pods, le nombre de pods recommandé et le nombre de pods prédit de manière proactive.

    • Nombre réel de pods : le nombre de pods actuellement en cours d'exécution.

    • Nombre de pods recommandé : le nombre final de pods recommandé par AHPA, déterminé en combinant la prédiction proactive, la prédiction passive et les limites d'instance définies.

    • Prédiction proactive : le nombre de pods prédit sur la base des schémas cycliques identifiés dans les données historiques.

Remarque

AHPA nécessite sept jours de données historiques pour générer des prédictions. Après avoir déployé l'exemple, vous devez attendre sept jours pour voir les résultats de prédiction. Si vous disposez d'une charge de travail de production existante, vous pouvez sélectionner directement son déploiement correspondant dans le tableau de bord AHPA.

Cette rubrique fournit un exemple où le mode de mise à l'échelle est configuré en mode observer (mode observateur). Cet exemple compare les résultats avec une politique HPA, qui sert de référence pour les ressources réellement requises par l'application, afin de vérifier si les résultats de prédiction d'AHPA sont conformes aux attentes.

La figure suivante montre un exemple des prédictions sur le tableau de bord AHPA Prometheus.

image.png

Description :

  • Actual and Predicted CPU Usage : la ligne verte représente l'utilisation réelle du CPU avec HPA, et la ligne jaune représente l'utilisation du CPU prédite par AHPA.

    • Si la ligne jaune est au-dessus de la ligne verte, la capacité CPU prédite est suffisante.

    • Si la ligne jaune monte avant la ligne verte, les ressources requises ont été préparées à l'avance.

  • Pod Trend : la ligne verte représente le nombre réel de pods mis à l'échelle par HPA, et la ligne jaune représente le nombre de pods prédit par AHPA.

    • Si la ligne jaune est en dessous de la ligne verte, le nombre de pods prédit est inférieur.

    • Si la ligne jaune est plus lisse que la ligne verte, cela indique que la mise à l'échelle avec AHPA provoque moins de fluctuations, ce qui améliore la stabilité du service.

Les résultats de la prédiction montrent que la tendance de mise à l'échelle prédictive est conforme aux attentes. Si la tendance continue de répondre à vos attentes après une période d'observation, vous pouvez définir scaleStrategy sur auto pour permettre à AHPA de gérer la mise à l'échelle.

Métriques clés d'AHPA

Metric

Description

ahpa_proactive_pods

Le nombre de pods basé sur la prédiction proactive.

ahpa_reactive_pods

Le nombre de pods basé sur la prédiction passive.

ahpa_requested_pods

Le nombre recommandé de pods.

ahpa_max_pods

Le nombre maximal de pods.

ahpa_min_pods

Le nombre minimal de pods.

ahpa_target_metric

Le seuil cible.