全部产品
Search
文档中心

Container Service for Kubernetes:Penskalaan otomatis berbasis acara

更新时间:Jun 27, 2025

Container Service for Kubernetes (ACK) mendukung Penskalaan Otomatis Berbasis Acara untuk Kubernetes (KEDA). Anda dapat menginstal KEDA di konsol ACK untuk menerapkan penskalaan berbasis acara pada kluster. Topik ini menjelaskan apa itu KEDA, cara kerjanya, dan bagaimana menggunakannya.

Ikhtisar

Dalam Kubernetes, Horizontal Pod Autoscaler (HPA) adalah solusi yang paling umum digunakan untuk penskalaan pod secara otomatis. HPA menentukan strategi penskalaan berdasarkan perbedaan antara penggunaan sumber daya dan ambang batas yang telah ditentukan sebelumnya. Meskipun mudah digunakan dan mendukung berbagai metrik sumber daya, HPA tidak mendukung penskalaan secara real-time. Sebagai contoh, HPA tidak dapat menskalakan sumber daya ketika peristiwa tertentu terdeteksi. Untuk mengatasi masalah ini, Anda dapat menginstal KEDA di konsol ACK. ACK KEDA mendukung penskalaan berbasis acara yang dapat digunakan dalam berbagai skenario seperti transkoding video dan audio offline, pekerjaan berbasis acara, dan Pemrosesan aliran.

Cara kerja KEDA

ACK KEDA adalah versi yang ditingkatkan dari KEDA open source dan mendukung penskalaan berbasis acara. Gambar berikut menunjukkan cara kerja ACK KEDA.Prinsip Kerja

ACK KEDA secara berkala mengonsumsi data dari sumber acara. Ketika pesan tertunda meningkat, ACK KEDA dipicu untuk menskalakan sekelompok pekerjaan dalam hitungan detik. Setelah periode berikutnya dimulai, kelompok pekerjaan berikutnya diskalakan secara asinkron. ACK KEDA mendukung fitur-fitur berikut:

  • Mendukung berbagai sumber acara

    ACK KEDA mendukung berbagai sumber data seperti Kafka, MySQL, PostgreSQL, RabbitMQ, dan MongoDB. Untuk informasi lebih lanjut, lihat RabbitMQ Queue.

  • Mengontrol konkurensi pekerjaan

    Ketika sejumlah besar pekerjaan dikirimkan, stabilitas sistem kontrol dasar terpengaruh karena sistem harus mengontrol sumber daya, kuota, dan permintaan API secara holistik. ACK KEDA dapat mengontrol konkurensi pekerjaan dalam satu atau beberapa batch untuk memastikan stabilitas sistem.

  • Membersihkan metadata setelah pekerjaan selesai

    Sejumlah besar metadata tersimpan setelah sejumlah besar pekerjaan selesai. Peningkatan metadata menurunkan stabilitas server API. Performa dan stabilitas kluster juga menurun, serta layanan lainnya mungkin terpengaruh secara negatif. ACK KEDA dapat membersihkan metadata secara otomatis setelah pekerjaan selesai.

Studi kasus

Sebuah pekerjaan transkoding sederhana digunakan dalam kasus berikut. Ketika pekerjaan baru diterima, data serupa dengan contoh berikut dimasukkan ke MongoDB: {"type":"mp4","state":"waiting","createTimeStamp":"1610332940","fileName":"World and peace","endTimeStamp":"","uuid":"1fae72ff-3239-42f5-af97-04711d8007e8"}. ACK KEDA mencari database untuk entri data yang memenuhi kondisi "state":"waiting". Kemudian, ACK KEDA membuat pod untuk memproses entri data tersebut. Satu pod dibuat untuk setiap entri data. Setelah transkoding selesai, nilai dari bidang state berubah dari waiting menjadi finished. Setelah pekerjaan selesai, metadata secara otomatis dibersihkan untuk mengurangi beban pada server API, memungkinkan Anda mengelola pekerjaan dengan lebih nyaman.

Langkah 1: Menyebarkan ACK KEDA

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi kiri Konsol ACK, pilih Marketplace > Marketplace.

  3. Di halaman Marketplace, temukan dan klik ack-keda.

  4. Klik Deploy di pojok kanan atas halaman ack-keda. Di langkah Basic Information, pilih kluster, dan klik Next.

  5. Di langkah Parameters, pilih versi bagan dan klik OK.

    Di panel navigasi kiri, klik Clusters. Di halaman Clusters, pilih kluster tempat ACK KEDA disebarkan dan klik nama kluster atau klik Details di kolom Actions. Di panel navigasi kiri, pilih Applications > Helm untuk melihat ACK KEDA.

Langkah 2: Menambahkan MongoDB sebagai sumber acara

  1. Menyebarkan MongoDB.

    Jika Anda sudah menyebarkan MongoDB, lewati langkah ini.

    Penting

    Database hanya digunakan untuk tujuan pengujian. Jangan gunakan database ini di lingkungan produksi.

    1. Buat file YAML bernama mongoDB.yaml dan tambahkan kode berikut ke file tersebut:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: mongodb
      spec:
        replicas: 1
        selector:
          matchLabels:
            name: mongodb
        template:
          metadata:
            labels:
              name: mongodb
          spec:
            containers:
            - name: mongodb
              image: mongo:4.2.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 27017
                name: mongodb
                protocol: TCP
      ---
      kind: Service
      apiVersion: v1
      metadata:
        name: mongodb-svc
      spec:
        type: ClusterIP
        ports:
        - name: mongodb
          port: 27017
          targetPort: 27017
          protocol: TCP
        selector:
          name: mongodb
    2. Menyebarkan MongoDB ke namespace mongodb dari kluster.

       kubectl apply -f mongoDB.yaml -n mongodb
  2. Masuk ke MongoDB dan buat akun pengguna.

    1. Buat pengguna.

      # Buat pengguna
      kubectl exec -n mongodb mongodb-xxxxx -- mongo --eval 'db.createUser({ user:"test_user",pwd:"test_password",roles:[{ role:"readWrite", db: "test"}]})'
    2. Masuk ke MongoDB.

      # Lengkapi autentikasi
      kubectl exec -n mongodb mongodb-xxxxx -- mongo --eval  'db.auth("test_user","test_password")'
    3. Buat koleksi.

      # Buat koleksi
      kubectl exec -n mongodb mongodb-xxxxx -- mongo --eval  'db.createCollection("test_collection")'
  3. Menyebarkan TriggerAuthentication dan ScaledJob.

    ACK KEDA menggunakan TriggerAuthentication untuk mengautentikasi permintaan masuk ke sumber acara. Dalam kasus ini, MongoDB ditambahkan sebagai sumber acara. ACK KEDA menggunakan bidang secretTargetRef di TriggerAuthentication untuk mengambil informasi koneksi dari Secret yang ditentukan dan kemudian menggunakan informasi koneksi tersebut untuk mengautentikasi permintaan ke MongDB.

    1. Buat file YAML bernama auth.yaml dan tambahkan kode berikut ke file tersebut:

      apiVersion: keda.sh/v1alpha1
      kind: TriggerAuthentication
      metadata:
        name: mongodb-trigger
      spec:
        secretTargetRef:
          - parameter: connectionString
            name: mongodb-secret
            key: connect
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: mongodb-secret
      type: Opaque
      data:
        connect: bW9uZ29kYjovL3Rlc3RfdXNlcjp0ZXN0X3Bhc3N3b3JkQG1vbmdvZGItc3ZjLm1vbmdvZGIuc3ZjLmNsdXN0ZXIubG9jYWw6MjcwMTcvdGVzdA==
    2. Menyebarkan TriggerAuthentication ke namespace mongodb-test dari kluster.

      kubectl apply -f auth.yaml -n mongodb-test
  4. Menyebarkan ScaledJob.

    ScaledJob digunakan untuk mendefinisikan template pekerjaan dan menentukan database yang akan diquery serta ekspresi query. Dalam contoh berikut, sebuah pekerjaan dibuat untuk menanyakan koleksi test_collection di database test dan mentranskode entri data yang memenuhi kondisi {"type":"mp4","state":"waiting"}.

    1. Buat file YAML bernama scaledJob.yaml dan tambahkan kode berikut ke file tersebut:

      apiVersion: keda.sh/v1alpha1
      kind: ScaledJob
      metadata:
        name: mongodb-job
      spec:
        jobTargetRef:
          # Template pekerjaan
          template:
            spec:
              containers:
                - name: mongo-update
                  image: registry.cn-hangzhou.aliyuncs.com/carsnow/mongo-update:v6
                  args:
                    - --connectStr=mongodb://test_user:test_password@mongodb-svc.mongodb.svc.cluster.local:27017/test
                    - --dataBase=test
                    - --collection=test_collection
                  imagePullPolicy: IfNotPresent
              restartPolicy: Never
          backoffLimit: 1
        pollingInterval: 15
        maxReplicaCount: 5
        successfulJobsHistoryLimit: 0
        failedJobsHistoryLimit: 10
        triggers:
          - type: mongodb
            metadata:
              dbName: test                               # Database yang akan diquery.
              collection: test_collection                # Koleksi yang akan diquery.
              query: '{"type":"mp4","state":"waiting"}'  # Buat pekerjaan untuk memproses setiap entri data yang bertipe mp4 dan statusnya waiting.
              queryValue: "1"
            authenticationRef:
              name: mongodb-trigger

      query: Tetapkan kondisi. Ketika ACK KEDA mendeteksi entri data yang memenuhi kondisi yang ditentukan, pekerjaan dimulai.

    2. Menyebarkan ScaledJob ke namespace mongodb-test dari kluster.

      kubectl apply -f scaledJob.yaml -n mongodb-test
  5. Sisipkan lima entri data ke MongoDB.

    # Sisipkan lima entri data ke MongoDB
    kubectl exec -n mongodb mongodb-xxxxx -- mongo --eval 'db.test_collection.insert([
      {"type":"mp4","state":"waiting","createTimeStamp":"1610352740","fileName":"My Love","endTimeStamp":"","uuid":"1gae72ff-3239-42f5-af97-04711d8007e8"},
      {"type":"mp4","state":"waiting","createTimeStamp":"1610350740","fileName":"Harker","endTimeStamp":"","uuid":"1gae72ff-3239-42f5-af97-04711d8007e8"},
      {"type":"mp4","state":"waiting","createTimeStamp":"1610152940","fileName":"The World","endTimeStamp":"","uuid":"1gae72ff-3239-42f5-af97-04711d87767e8"},
      {"type":"mp4","state":"waiting","createTimeStamp":"1610390740","fileName":"Mother","endTimeStamp":"","uuid":"1gae72ff-3239-42f5-af97-04799d8007e8"},
      {"type":"mp4","state":"waiting","createTimeStamp":"1610344740","fileName":"Jagger","endTimeStamp":"","uuid":"1gae72ff-3239-42f5-af97-04711d80099e8"},
      ])'

Langkah 3: Periksa apakah ACK KEDA bekerja sesuai harapan

Jalankan perintah berikut untuk menanyakan pekerjaan:

# pantau pekerjaan
watch -n 1 kubectl get job -n mongodb-test

Job

Verifikasi bahwa lima pekerjaan telah dibuat. Masuk ke MongoDB dan periksa data yang dimasukkan. Verifikasi bahwa status setiap entri data yang Anda sisipkan berubah dari waiting menjadi finished.Database

Referensi