Menskalakan otomatis kumpulan pekerja dengan metrik eksternal

Halaman ini menjelaskan cara menskalakan otomatis kumpulan pekerja Cloud Run menggunakan metrik eksternal berbasis peristiwa. Penskalaan Otomatis Metrik Eksternal Cloud Run (CREMA) mengaktifkan fungsi ini dengan memanfaatkan Penskalaan Otomatis Berbasis Peristiwa (EDA) berbasis Kubernetes 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 GitHub Google Cloud .

Tentang layanan autoscaler

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

  1. Meminta sumber peristiwa eksternal, seperti topik Apache Kafka atau GitHub Runner Scaler.

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

  3. Memperbarui jumlah instance kumpulan worker 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 beban kerja berbasis permintaan atau berbasis peristiwa, seperti GitHub Runners atau Apache Kafka. Untuk memverifikasi bahwa sumber beban kerja Anda didukung, lihat daftar kompatibilitas CREMA di dokumentasi Google Cloud GitHub.

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

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menskalakan otomatis 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 melakukan autentikasi 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. Proses ini menggunakan secret Secret Manager bernama github_runner_token untuk mengautentikasi dengan GitHub guna 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 di dokumentasi GitHub Google Cloud .

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 penskalaan otomatis CREMA, ikuti langkah-langkah berikut:

  1. Buat parameter di Pengelola Parameter:

    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 Anda

Untuk menskalakan kumpulan worker 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 Google Cloud project Anda.

    • CREMA_SERVICE_ACCOUNT_NAME: nama akun layanan CREMA Anda.

  2. Berikan peran roles/run.developer kepada akun layanan CREMA Anda 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 beta 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 pool pekerja.
    • WORKER_POOL_REGION: region worker pool 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. Berikan peran pengguna akun layanan kepada akun layanan CREMA Anda:

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

Men-deploy layanan untuk menskalakan beban kerja Anda

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

gcloud beta 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 Google Cloud project Anda.

  • PARAMETER_REGION, PARAMETER_ID, dan PARAMETER_VERSION: nilai yang disimpan di Pengelola Parameter.

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

Menguji layanan CREMA Anda

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

Anda akan melihat log berikut di log layanan Anda 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