Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Mise à l'échelle pilotée par les événements basée sur les métriques ApsaraMQ for RocketMQ (KEDA)

Dernière mise à jour :Oct 14, 2026

Lorsque vous utilisez ApsaraMQ for RocketMQ, l'accumulation de messages peut entraîner une charge système excessive et provoquer des pannes. Utilisez KEDA (Kubernetes Event-driven Autoscaling) pour automatiser le Horizontal Pod Autoscaler (HPA) de vos applications en fonction des métriques d'accumulation de messages ApsaraMQ for RocketMQ, ce qui améliore la fiabilité et la stabilité du système.

Contexte

ApsaraMQ for RocketMQ est un middleware de messagerie distribué haute performance, hautement fiable et évolutif, largement utilisé dans les applications d'entreprise. Toutefois, l'accumulation de messages survient facilement lors de l'utilisation d'ApsaraMQ for RocketMQ, en particulier sous forte charge. Cette accumulation peut faire grimper la charge système à des niveaux critiques, voire provoquer des pannes.

Dans cette situation, utilisez l'outil de mise à l'échelle pilotée par les événements Kubernetes KEDA pour déclencher le Horizontal Pod Autoscaler de vos applications en fonction de métriques personnalisées d'accumulation de messages ApsaraMQ for RocketMQ. Cette solution met automatiquement et efficacement vos applications à l'échelle, améliorant ainsi la fiabilité et la stabilité du système. Si vous utilisez Apache RocketMQ open source, vous pouvez également obtenir des capacités similaires en exposant les données de messages via le JMX Prometheus Exporter. Pour plus d'informations, consultez la communauté Apache RocketMQ.

Cette rubrique utilise Managed Service for Prometheus comme source de données et décrit comment configurer l'objet de mise à l'échelle pour une mise à l'échelle basée sur les messages ApsaraMQ for RocketMQ.

Prérequis

Étape 1 : Déployer une charge de travail

Cet exemple crée une application NGINX d'exemple nommée sample-app.

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

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Workloads > Deployments.

  3. Sur la page Deployments, cliquez sur Create from YAML. Selon les instructions affichées à l'écran, définissez Sample Template sur Custom. Utilisez l'exemple de code suivant pour créer une application NGINX nommée sample-app.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample-app
      namespace: default
      labels:
        app: sample-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sample-app
      template:
        metadata:
          labels:
            app: sample-app
        spec:
          containers:
          - name: sample-app
            # Replace this with the image of your actual ApsaraMQ for RocketMQ consumer.
            image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/nginx_optimized:20240221-1.20.1-2.3.0  
            resources:
              limits:
                cpu: "500m"

Étape 2 : Configurer les politiques de mise à l'échelle avec un ScaledObject

Configurez les politiques de mise à l'échelle KEDA dans un fichier YAML ScaledObject, y compris la cible de mise à l'échelle, le nombre maximal et minimal de réplicas, ainsi que le seuil de mise à l'échelle (seuil d'accumulation de messages). Avant de configurer le ScaledObject, obtenez des informations telles que l'URL Prometheus des métriques de l'instance ApsaraMQ for RocketMQ.

1. Obtenir les informations de l'instance ApsaraMQ for RocketMQ dans la console ApsaraMQ for RocketMQ

  1. Connectez-vous à la console ApsaraMQ for RocketMQ. Dans le volet de navigation de gauche, cliquez sur Instances.

  2. Dans la barre de navigation supérieure, sélectionnez une région, par exemple China (Hangzhou). Sur la page Instances, cliquez sur le nom de l'instance que vous souhaitez gérer.

  3. Dans le volet de navigation de gauche, cliquez sur Topic Management, puis affichez et notez la valeur de Name et l'Instance ID dans le coin supérieur droit, par exemple keda et mq-cn-uax33****.

2. Obtenir la source de données Prometheus de l'instance ApsaraMQ for RocketMQ dans la console Managed Service for Prometheus

  1. Connectez-vous à la console ARMS.

  2. Dans le volet de navigation de gauche, choisissez Managed Service for Prometheus > Instances.

  3. Pour l'instance cible, cliquez sur Cloud Services-{{RegionId}}. Dans le volet de navigation de gauche, cliquez sur Settings, puis notez l'HTTP API Address (Grafana Read Address).

    Sélectionnez l'URL du Public Endpoint.

3. Créer le fichier YAML ScaledObject

  1. Utilisez le contenu suivant pour créer ScaledObject.yaml et configurer la politique de mise à l'échelle.

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: prometheus-scaledobject
      namespace: default
    spec:
      scaleTargetRef:
        name: sample-app
      maxReplicaCount: 10
      minReplicaCount: 2
      triggers:
      - type: prometheus
        metadata:
          serverAddress: http://cn-beijing.arms.aliyuncs.com:9090/api/v1/prometheus/8cba801fff65546a3012e9a684****/****538168824185/cloud-product-rocketmq/cn-beijing
          metricName: rocketmq_consumer_inflight_messages
          query: sum({__name__=~"rocketmq_consumer_ready_messages|rocketmq_consumer_inflight_messages",instance_id="rmq-cn-uax3xxxxxx",topic=~"keda"}) by (consumer_group)
          threshold: '30'

    Le tableau suivant décrit les paramètres.

    Parameter

    Description

    scaleTargetRef.name

    La cible de mise à l'échelle. Dans cet exemple, définissez ce paramètre sur l'application sample-app que vous avez créée à l'Étape 1 : Déployer une charge de travail.

    maxReplicaCount

    Le nombre maximal de réplicas vers lesquels effectuer la mise à l'échelle horizontale.

    minReplicaCount

    Le nombre minimal de réplicas vers lesquels effectuer la réduction.

    serverAddress

    L'URL Prometheus qui stocke les métriques ApsaraMQ for RocketMQ, correspondant à l'HTTP API Address (Grafana Read Address) que vous avez notée précédemment.

    metricName

    Les données demandées par la requête PromQL.

    query

    Agrège les données demandées par la requête PromQL dans metricName. Dans cet exemple, l'agrégation correspond au PromQL pour l'accumulation de messages.

    threshold

    Le seuil de mise à l'échelle. Cet exemple utilise une accumulation de messages de 30 comme seuil. Une mise à l'échelle horizontale est déclenchée lorsque l'accumulation dépasse 30.

  2. Exécutez les commandes suivantes pour déployer le fichier et afficher les ressources créées.

    # Apply the scaling configuration.
    kubectl apply -f ScaledObject.yaml
    scaledobject.keda.sh/prometheus-scaledobject created
    # Get the status of the scaling configuration.
    kubectl get ScaledObject
    NAME                      SCALETARGETKIND      SCALETARGETNAME   MIN   MAX   TRIGGERS     AUTHENTICATION   READY   ACTIVE   FALLBACK   AGE
    prometheus-scaledobject   apps/v1.Deployment   sample-app        2     10    prometheus                    True    False    False      105s
    # Check whether the HPA is generated.
    kubectl get hpa
    NAME                               REFERENCE               TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)   2         10        2          28m
  3. (Facultatif) Utilisez un jeton Prometheus pour améliorer la sécurité des lectures de données et configurez la vérification du jeton Prometheus.

    Développer pour afficher les étapes détaillées

    1. Générez un jeton Prometheus selon les instructions affichées à l'écran.

      Une fois le jeton généré, la page affiche les informations de l'HTTP API Address (Grafana Read Address). Ces informations incluent la valeur du jeton généré, que vous pouvez obtenir intégralement en utilisant les icônes d'affichage et de copie. La page répertorie également les URL d'accès Prometheus pour les types de réseau Public Endpoint et Internal Endpoint. Notez l'URL et la valeur du jeton dont vous aurez besoin pour configurer ultérieurement le fichier YAML ScaledObject.

    2. Créez un Secret dans lequel les valeurs des champs customAuthHeader: "Authorization" et customAuthValue doivent être encodées en Base64.

      apiVersion: v1
      kind: Secret
      metadata:
        name: keda-prom-secret
        namespace: default
      data:
        customAuthHeader: "QXV0Xxxxxxxlvbg=="
        customAuthValue: "kR2tpT2lJeFpXSmxaVFV6WlMTxxxxxxxxRMVFE0TUdRdE9USXpaQzFqWkRZd09EZ3dOVFV5WWpZaWZRLjlDaFBYU0Q2dEhWc1dQaFlyMGh3ZU5FQjZQZWVETXFjTlYydVNqOU82TTQ="
    3. Utilisez l'exemple de code suivant pour créer un identifiant permettant à KEDA de demander des données, puis déployez l'identifiant dans le cluster.

      apiVersion: keda.sh/v1alpha1
      kind: TriggerAuthentication
      metadata:
        name: keda-prom-creds
        namespace: default
      spec:
        secretTargetRef:
          - parameter: customAuthHeader
            name: keda-prom-secret
            key: customAuthHeader
          - parameter: customAuthValue
            name: keda-prom-secret
            key: customAuthValue
    4. Dans le fichier YAML ScaledObject, configurez le champ authenticationRef et spécifiez le nom de l'identifiant que vous avez créé.

      apiVersion: keda.sh/v1alpha1
      kind: ScaledObject
      metadata:
        name: prometheus-scaledobject
        namespace: default
      spec:
        scaleTargetRef:
          name: sample-app
        maxReplicaCount: 10
        minReplicaCount: 2
        triggers:
        - type: prometheus
          metadata:
            serverAddress: http://cn-beijing.arms.aliyuncs.com:9090/api/v1/prometheus/8cba801fff65546a3012e9a684****/****538168824185/cloud-product-rocketmq/cn-beijing
            metricName: rocketmq_consumer_inflight_messages
            query: sum({__name__=~"rocketmq_consumer_ready_messages|rocketmq_consumer_inflight_messages",instance_id="rmq-cn-uax3xxxxxx",topic=~"keda"}) by (consumer_group)
            threshold: '30'
            authModes: "custom"
          authenticationRef: # Configure this field.
              name: keda-prom-creds # Enter the name of the credential.
      Remarque

      Cet exemple utilise le type d'authentification Custom. Pour utiliser d'autres méthodes d'authentification, consultez la documentation de la communauté KEDA.

Étape 3 : Produire et consommer des données

Cet exemple utilise le projet rocketmq-keda-sample pour produire et consommer des données. Dans le code du projet, configurez le point de terminaison, le nom d'utilisateur et le mot de passe de l'instance ApsaraMQ for RocketMQ que vous avez notés à l'Étape 2.

Étape 4 : Déclencher la mise à l'échelle horizontale et la réduction en produisant et consommant des données

  1. Connectez-vous à la console ApsaraMQ for RocketMQ. Dans le volet de navigation de gauche, cliquez sur Instances.

  2. Dans la barre de menu supérieure, sélectionnez une région, par exemple China (Hangzhou). Ensuite, dans la liste des instances, cliquez sur le nom de l'instance cible pour afficher et noter les Endpoint and Network Information.

  3. Dans le volet de navigation de gauche, cliquez sur Access Control. Ensuite, cliquez sur l'onglet Intelligent Identity Recognition pour afficher et noter le nom d'utilisateur et le mot de passe de l'instance.

  4. Exécutez le programme Producer pour produire des données, puis exécutez la commande suivante pour afficher l'état de mise à l'échelle du HPA.

    kubectl get hpa

    Sortie attendue :

    NAME                               REFERENCE               TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   32700m/30 (avg)   2         10        10         47m

    La sortie attendue indique que l'application sample-app a été mise à l'échelle horizontalement jusqu'au nombre maximal de réplicas configuré pour KEDA.

  5. Arrêtez le programme Producer, exécutez le programme Consumer, puis exécutez la commande suivante pour afficher l'état de mise à l'échelle du HPA.

    kubectl get hpa -w

    Sortie attendue :

    NAME                               REFERENCE               TARGETS            MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   222500m/30 (avg)   2         10        10         50m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   232400m/30 (avg)   2         10        10         51m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)         2         10        10         52m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)         2         10        2          57m

    La sortie attendue indique qu'un certain temps après la fin de la consommation des données, l'application sample-app revient au nombre minimal de réplicas configuré pour KEDA.

Références

Vous pouvez également utiliser KEDA basé sur les métriques RabbitMQ pour surveiller la longueur de la file d'attente et les métriques de taux de messages. Pour plus d'informations, consultez Mettre à l'échelle automatiquement les pods en fonction des métriques RabbitMQ.