全部产品
Search
文档中心

Container Service for Kubernetes:KEDA berbasis metrik ApsaraMQ for RocketMQ

更新时间:Jul 02, 2025

Saat menggunakan ApsaraMQ for RocketMQ, akumulasi pesan dapat menyebabkan beban sistem yang tinggi. Untuk mencegah gangguan layanan serta meningkatkan keandalan dan stabilitas sistem, Anda dapat menggunakan Kubernetes Event-Driven Autoscaling (KEDA) untuk mengotomatiskan penskalaan horizontal pod berdasarkan metrik akumulasi pesan dari ApsaraMQ for RocketMQ.

Deskripsi fungsi

Sebagai layanan middleware perpesanan terdistribusi dengan performa tinggi, keandalan tinggi, dan skalabilitas tinggi, ApsaraMQ for RocketMQ banyak digunakan oleh aplikasi kelas perusahaan. Saat menggunakan ApsaraMQ for RocketMQ, akumulasi pesan dapat terjadi, terutama di bawah beban tinggi, yang dapat meningkatkan beban sistem lebih lanjut dan bahkan menyebabkan kerusakan aplikasi.

Untuk menyelesaikan masalah ini, Anda dapat menggunakan KEDA untuk mengaktifkan penskalaan horizontal pod berdasarkan metrik akumulasi pesan kustom dari ApsaraMQ for RocketMQ. KEDA secara otomatis menskalakan aplikasi berdasarkan metrik akumulasi pesan dengan efisiensi tinggi, memastikan keandalan dan stabilitas sistem. Jika Anda menggunakan Apache RocketMQ open-source, Anda dapat mengaktifkan penskalaan horizontal pod berdasarkan metrik yang dikumpulkan oleh Java Management Extensions (JMX) Prometheus exporter. Untuk informasi lebih lanjut, lihat Apache RocketMQ.

Topik ini menjelaskan konfigurasi objek skala docking pesan RocketMQ menggunakan Managed Service for Prometheus sebagai sumber data.

Prasyarat

Langkah 1: Terapkan aplikasi

Dalam contoh ini, aplikasi NGINX bernama sample-app dibuat.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, klik Create from YAML. Di halaman Create, atur Sample Template menjadi Custom, dan gunakan template YAML berikut untuk membuat aplikasi NGINX bernama 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
          # Ganti dengan gambar konsumen RocketMQ yang sebenarnya.
            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"

Langkah 2: Konfigurasikan kebijakan skala melalui ScaledObject

Konfigurasikan kebijakan skala KEDA menggunakan file YAML ScaledObject, yang mencakup objek skala, jumlah maksimum dan minimum replika, serta ambang batas skala seperti ambang batas akumulasi pesan. Sebelum mengonfigurasi ScaledObject, peroleh alamat Prometheus dan informasi relevan lainnya untuk metrik instansi ApsaraMQ for RocketMQ.

1. Dapatkan informasi instansi dari konsol ApsaraMQ for RocketMQ

  1. Masuk ke Konsol ApsaraMQ for RocketMQ. Di panel navigasi kiri, klik Instances.

  2. Di bilah navigasi atas, pilih wilayah, seperti China (Hangzhou). Di halaman Instansi, klik nama instansi yang ingin Anda kelola.

  3. Di panel navigasi kiri, klik Topics, dan catat Name dan Instance ID di pojok kanan atas, seperti keda dan mq-cn-uax33****, masing-masing.

2. Dapatkan sumber data Prometheus untuk instansi ApsaraMQ for RocketMQ di konsol Prometheus

  1. Masuk ke Konsol ARMS.

  2. Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances.

  3. Temukan instansi bernama Cloud Services-{{RegionId}} dan klik namanya. Di panel kiri, klik Settings, dan salin titik akhir di bagian HTTP API URL (Grafana Read URL).

    image

3. Buat file YAML ScaledObject

  1. Gunakan template YAML berikut untuk membuat file bernama ScaledObject.yaml untuk konfigurasi kebijakan skala:

    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'

    Tabel berikut menjelaskan parameter:

    Parameter

    Deskripsi

    scaleTargetRef.name

    Objek yang ingin Anda skala. Dalam contoh ini, nilai diatur ke sample-app, yaitu nama aplikasi yang Anda buat di Langkah 1: Terapkan aplikasi.

    maxReplicaCount

    Jumlah maksimum replika yang dipertahankan selama operasi penambahan skala.

    minReplicaCount

    Jumlah minimum replika yang dipertahankan selama operasi pengurangan skala.

    serverAddress

    Titik akhir instansi Prometheus yang menyimpan metrik instansi ApsaraMQ for RocketMQ. Dalam contoh ini, nilai diatur ke titik akhir yang Anda salin dari HTTP API Address (Grafana Read Address) pada langkah sebelumnya.

    metricName

    Data kueri Prometheus Query Language (PromQL).

    query

    Menggabungkan data kueri PromQL yang ditentukan dalam parameter metricName. Dalam contoh ini, statistik jumlah pesan yang terakumulasi digabungkan.

    threshold

    Ambang batas skala. Dalam contoh ini, ambang batas skala adalah 30, yang menunjukkan bahwa aplikasi akan diskalakan jika jumlah pesan yang terakumulasi melebihi 30.

  2. Jalankan perintah berikut untuk menerapkan file ScaledObject.yaml, dan verifikasi sumber daya yang dibuat:

    # Terapkan konfigurasi skala.
    kubectl apply -f ScaledObject.yaml
    
    # Keluaran berikut menunjukkan pembuatan berhasil.
    scaledobject.keda.sh/prometheus-scaledobject created
    
    # Ambil status konfigurasi skala.
    kubectl get ScaledObject
    
    # Keluaran menampilkan detail 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
    
    # Periksa apakah Horizontal Pod Autoscaler (HPA) dibuat untuk menskalakan aplikasi. 
    kubectl get hpa
    
    # Keluaran menampilkan status HPA.
    NAME                               REFERENCE               TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)   2         10        2          28m
  3. (Opsional) Untuk meningkatkan keamanan data untuk operasi baca, gunakan token Prometheus untuk autentikasi.

    Perluas untuk Melihat Langkah-Langkah Rinci

    1. Buat token Prometheus sesuai petunjuk di halaman.

      image

    2. Buat Secret dengan nilai Base64-encoded untuk bidang customAuthHeader: "Authorization" dan customAuthValue.

      apiVersion: v1
      kind: Secret
      metadata:
        name: keda-prom-secret
        namespace: default
      data:
        customAuthHeader: "QXV0Xxxxxxxlvbg=="
        customAuthValue: "kR2tpT2lJeFpXSmxaVFV6WlMTxxxxxxxxRMVFE0TUdRdE9USXpaQzFqWkRZd09EZ3dOVFV5WWpZaWZRLjlDaFBYU0Q2dEhWc1dQaFlyMGh3ZU5FQjZQZWVETXFjTlYydVNqOU82TTQ="
    3. Gunakan template YAML berikut untuk membuat kredensial akses untuk KEDA dan terapkan ke kluster:

      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. Saat membuat file YAML ScaledObject, konfigurasikan bidang authenticationRef dengan nama kredensial akses yang dibuat pada langkah sebelumnya.

      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: # Bidang konfigurasi.
              name: keda-prom-creds # Nama kredensial.
      Catatan

      Contoh ini menggunakan autentikasi kustom. Untuk informasi lebih lanjut tentang metode autentikasi, lihat dokumentasi komunitas KEDA.

Langkah 3: Produksi dan konsumsi data

Contoh ini menggunakan proyek rocketmq-keda-sample untuk memproduksi dan mengonsumsi data. Dalam kode proyek, tentukan titik akhir, nama pengguna, dan kata sandi instansi ApsaraMQ for RocketMQ yang diperoleh di Langkah 2.

Langkah 4: Gunakan data yang diproduksi dan dikonsumsi untuk memicu penskalaan aplikasi

  1. Masuk ke Konsol ApsaraMQ for RocketMQ. Di panel navigasi kiri, klik Instances.

  2. Di bilah navigasi atas, pilih wilayah, seperti China (Hangzhou). Di halaman Instances, klik nama instansi yang ingin Anda kelola, dan catat Endpoint and Network Information.

  3. Di panel navigasi kiri, klik Access Control, lalu klik tab Intelligent Authentication, dan catat nama pengguna dan kata sandi.

  4. Jalankan program produser untuk memproduksi data, lalu jalankan perintah berikut untuk menanyakan informasi tentang HPA:

    kubectl get hpa

    Keluaran yang Diharapkan:

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

    Keluaran menunjukkan bahwa jumlah pod replika untuk aplikasi sample-app diskalakan ke nilai maksimum yang ditentukan di KEDA.

  5. Hentikan program produser dan jalankan program konsumen. Lalu, jalankan perintah berikut untuk memeriksa status penskalaan HPA:

    kubectl get hpa -w

    Keluaran yang Diharapkan:

    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

    Keluaran menunjukkan bahwa jumlah pod replika untuk aplikasi sample-app turun ke nilai minimum yang ditentukan di KEDA beberapa saat setelah konsumsi data berakhir.

Referensi

Anda dapat menggunakan KEDA dengan metrik ApsaraMQ for RabbitMQ untuk mengotomatiskan penskalaan horizontal pod, serta memantau panjang antrian dan laju pesan. Untuk informasi lebih lanjut, lihat Penskalaan Horizontal Pod Berdasarkan Metrik ApsaraMQ for RabbitMQ.