Menskalakan otomatis kumpulan worker dengan metrik eksternal

Halaman ini menjelaskan cara melakukan penskalaan otomatis pada kumpulan pekerja Cloud Run menggunakan metrik berbasis peristiwa eksternal. Penskalaan Otomatis Metrik Eksternal Cloud Run (CREMA) mengaktifkan fungsi ini dengan memanfaatkan Penskalaan Otomatis Berbasis Peristiwa berbasis Kubernetes (KEDA) untuk menskalakan workload berdasarkan sumber peristiwa eksternal.

Untuk mengetahui penskala yang didukung dan kompatibilitas dengan Cloud Run, lihat Penskalaan Otomatis Metrik Eksternal Cloud Run (CREMA) dalam dokumentasi Google Cloud GitHub.

Tentang layanan autoscaler

Untuk melakukan penskalaan otomatis pada kumpulan pekerja, deploy layanan autoscaler CREMA ke Cloud Run. Layanan ini melakukan tindakan berikut:

  1. Melakukan polling sumber peristiwa eksternal, seperti topik Apache Kafka atau Penskala GitHub Runner.

  2. Menghitung jumlah instance yang diperlukan berdasarkan konfigurasi YAML Anda.

  3. Mengupdate jumlah instance kumpulan pekerja secara otomatis.

Sebelum memulai

  1. Pastikan Anda telah menyiapkan project baru untuk Cloud Run, seperti yang dijelaskan di halaman penyiapan.

  2. Aktifkan Artifact Registry, Cloud Build, Cloud Run Admin API, Secret Manager, dan Parameter Manager API:

    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        run.googleapis.com \
        secretmanager.googleapis.com \
        parametermanager.googleapis.com
    
  3. Konfigurasi workload berbasis peristiwa atau berbasis permintaan, seperti GitHub Runners atau Apache Kafka. Untuk memverifikasi bahwa sumber workload Anda didukung, lihat daftar kompatibilitas CREMA dalam dokumentasi Google Cloud GitHub.

  4. Tinjau kalkulator harga untuk memperkirakan biaya. Anda akan dikenai biaya untuk layanan penskalaan Cloud Run berdasarkan frekuensi Anda memicu penskalaan.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk melakukan penskalaan otomatis pada kumpulan pekerja, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat akun layanan kustom

Buat akun layanan kustom dengan izin minimum yang diperlukan untuk menggunakan resource yang disediakan yang diperlukan untuk workload Anda. Untuk menyiapkan akun layanan, lakukan hal berikut:

gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
  --display-name="CREMA Service Account"

Ganti CREMA_SERVICE_ACCOUNT dengan nama untuk akun layanan kustom Anda, misalnya crema-service-account. Perintah ini membuat akun layanan yang mengikuti format, crema-service-account@example-project.iam.gserviceaccount.com.

Membuat file konfigurasi CREMA

Untuk menentukan logika penskalaan, buat file konfigurasi YAML di direktori root Anda. File ini menginstruksikan layanan CREMA tentang sumber eksternal yang akan dipantau, cara mengautentikasi dengan resource, dan kumpulan pekerja yang akan diskalakan.

Contoh YAML

Contoh berikut menunjukkan file konfigurasi untuk menskalakan kumpulan pekerja Cloud Run (example-workerpool) menggunakan metrik GitHub Runner. Contoh ini menggunakan secret Secret Manager bernama github_runner_token untuk mengautentikasi dengan GitHub untuk membaca metrik.

  apiVersion: crema/v1
  kind: CremaConfig
  metadata:
    name: gh-demo
  spec:
    triggerAuthentications:
      - metadata:
          name: github-trigger-auth
        spec:
          gcpSecretManager:
            secrets:
              - parameter: personalAccessToken
                id: github_runner_token
                version: latest
    scaledObjects:
      - spec:
          scaleTargetRef:
            name: projects/example-project/locations/us-central1/workerpools/example-workerpool
          triggers:
            - type: github-runner
              name: example-runner
              metadata:
                owner: repo-owner
                runnerScope: repo
                repos: repo-name
                targetWorkflowQueueLength: 1
              authenticationRef:
                name: github-trigger-auth
          advanced:
            horizontalPodAutoscalerConfig:
              behavior:
                scaleDown:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 100
                      periodSeconds: 10
                scaleUp:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 2
                      periodSeconds: 10
        pollingInterval: 10

Konfigurasi YAML menggunakan parameter tingkat tinggi berikut:

  • triggerAuthentications: menentukan cara CREMA mengautentikasi layanan eksternal, seperti menggunakan token yang disimpan di Secret Manager.

  • scaledObjects: menentukan pemetaan antara kumpulan pekerja Cloud Run dan resource metrik eksternal. Parameter ini mencakup:

    • scaleTargetRef: layanan Cloud Run atau kumpulan pekerja yang akan diskalakan.

    • triggers: metrik eksternal tertentu yang digunakan untuk penskalaan. Jika sumber metrik eksternal Anda memerlukan autentikasi, tetapkan kolom authenticationRef untuk menentukan salah satu objek TriggerAuthentications untuk kredensial.

  • pollingInterval: mengontrol interval (dalam detik) saat CREMA memperbarui metriknya. Jika Anda menghapus parameter ini, CREMA tidak akan melakukan polling secara otomatis, dan Anda harus memicu pemeriksaan penskalaan secara manual menggunakan permintaan POST ke layanan.

Untuk mengetahui informasi selengkapnya tentang cara menentukan metrik konfigurasi dasar dan lanjutan, lihat Referensi konfigurasi dalam Google Cloud dokumentasiGitHub.

Untuk mengetahui daftar lengkap definisi konfigurasi untuk penskala yang kompatibel, lihat Penskala dalam dokumentasi KEDA.

Menyimpan konfigurasi CREMA di Parameter Manager

Untuk menyimpan versi parameter untuk layanan autoscaler CREMA, ikuti langkah-langkah berikut:

  1. Buat parameter di Parameter Manager:

    gcloud parametermanager parameters create PARAMETER_ID --location=global  --parameter-format=YAML
    

    Ganti PARAMETER_ID dengan nama parameter Anda.

  2. Upload file YAML lokal Anda sebagai versi parameter baru:

    gcloud parametermanager parameters versions create PARAMETER_VERSION \
      --location=global \
      --parameter=PARAMETER_ID \
      --payload-data-from-file=LOCAL_YAML_CONFIG_FILE
    

    Ganti kode berikut:

    • PARAMETER_VERSION: ID yang ingin Anda tetapkan ke versi parameter, misalnya, 1.
    • LOCAL_YAML_CONFIG_FILE: jalur ke file konfigurasi YAML Anda.

Untuk mengetahui informasi selengkapnya, lihat Membuat parameter.

Memberikan izin tambahan ke akun layanan CREMA

Untuk menskalakan kumpulan pekerja yang Anda tentukan dalam konfigurasi YAML, berikan izin berikut pada akun layanan kustom:

  1. Beri akun layanan CREMA Anda izin untuk membaca dari Parameter Manager:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \
      --role="roles/parametermanager.parameterViewer"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda. Google Cloud

    • CREMA_SERVICE_ACCOUNT_NAME: nama akun layanan CREMA Anda.

  2. Beri akun layanan CREMA Anda peran roles/run.developer di kumpulan pekerja. Hal ini memungkinkan layanan CREMA mengubah jumlah instance kumpulan pekerja Anda sebagai respons terhadap perubahan metrik:

    WORKER_POOL_NAME=WORKER_POOL_NAME
    WORKER_POOL_REGION=WORKER_POOL_REGION
    gcloud run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \
      --region=$WORKER_POOL_REGION \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/run.developer"
    

    Ganti kode berikut:

    • WORKER_POOL_NAME: nama kumpulan pekerja.
    • WORKER_POOL_REGION: region kumpulan pekerja Anda.
  3. Beri akun layanan CREMA Anda izin untuk menulis metrik:

     gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
       --role="roles/monitoring.metricWriter"
    
  4. Beri akun layanan CREMA Anda peran pengguna akun layanan:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/iam.serviceAccountUser"
    

Men-deploy layanan untuk menskalakan workload Anda

Untuk men-deploy layanan untuk menskalakan kumpulan pekerja Anda, jalankan perintah berikut dengan image container yang telah dibuat sebelumnya:

gcloud run deploy SERVICE_NAME\
  --image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
  --region=SERVICE_REGION \
  --service-account="CREMA_SERVICE_ACCOUNT_NAME" \
  --no-allow-unauthenticated \
  --no-cpu-throttling \
  --base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
  --labels=created-by=crema \
  --set-env-vars="CREMA_CONFIG=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"

Ganti kode berikut:

  • SERVICE_NAME: nama layanan autoscaler Anda.

  • SERVICE_REGION: region layanan Anda.

  • CREMA_SERVICE_ACCOUNT_NAME: nama akun layanan CREMA Anda.

  • PROJECT_ID: ID project Anda. Google Cloud

  • PARAMETER_REGION, PARAMETER_ID, dan PARAMETER_VERSION: nilai yang Anda simpan di Parameter Manager.

Anda juga dapat men-deploy layanan CREMA menggunakan image container kustom yang Anda buat dari kode sumber dengan Cloud Build.

Menguji layanan CREMA

Untuk memverifikasi bahwa layanan penskalaan otomatis Anda berfungsi dengan benar, periksa tab Log layanan Cloud Run.

Anda akan melihat log berikut di log layanan setiap kali metrik diperbarui:

Setiap pesan log diberi label dengan komponen yang memancarkannya.

[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...

Langkah berikutnya