Halaman ini menjelaskan cara menskalakan worker pool Cloud Run secara otomatis menggunakan metrik berbasis peristiwa eksternal. Cloud Run External Metrics Autoscaling (CREMA) memungkinkan fungsi ini dengan memanfaatkan Kubernetes-based Event Driven Autoscaling (KEDA) untuk menskalakan workload berdasarkan sumber peristiwa eksternal.
Untuk mengetahui scaler yang didukung dan kompatibilitasnya dengan Cloud Run, lihat Cloud Run External Metrics Autoscaling (CREMA) dalam dokumentasi Google Cloud GitHub.
Tentang layanan autoscaler
Untuk menskalakan otomatis kumpulan worker, deploy layanan autoscaler CREMA ke Cloud Run. Layanan ini melakukan tindakan berikut:
Melakukan polling pada sumber peristiwa eksternal, seperti topik Apache Kafka atau GitHub Runner Scaler.
Menghitung jumlah instance yang diperlukan berdasarkan konfigurasi YAML Anda.
Memperbarui jumlah instance kumpulan worker secara otomatis.
Sebelum memulai
Pastikan Anda telah menyiapkan project baru untuk Cloud Run, seperti yang dijelaskan di halaman setup.
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.comKonfigurasikan workload berbasis peristiwa atau permintaan, seperti GitHub Runners atau Apache Kafka. Untuk memverifikasi bahwa sumber workload Anda didukung, lihat daftar kompatibilitas CREMA di dokumentasi Google Cloud GitHub.
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 worker pool secara otomatis, minta administrator untuk memberi Anda peran IAM berikut pada project Anda:
- Artifact Registry Repository Administrator (
roles/artifactregistry.repoAdmin) - Editor Cloud Build (
roles/cloudbuild.builds.editor) - Cloud Run Admin (
roles/run.admin) - Create Service Accounts (
roles/iam.serviceAccountCreator) - Secret Manager Admin (
roles/secretmanager.admin) - Service Account User (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) - Storage Admin (
roles/storage.admin) - Parameter Manager Admin (
roles/parametermanager.admin)
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 mana yang harus dipantau, cara melakukan autentikasi dengan resource, dan worker pool mana yang harus diskalakan.
Contoh YAML
Contoh berikut menunjukkan file konfigurasi untuk menskalakan worker pool Cloud Run (example-workerpool)
menggunakan metrik GitHub Runner. Alat ini menggunakan secret Secret Manager bernama github_runner_token untuk melakukan autentikasi 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 worker pool Cloud Run Anda dan resource metrik eksternal. Parameter ini mencakup:scaleTargetRef: layanan Cloud Run atau worker pool yang akan diskalakan.triggers: metrik eksternal tertentu yang digunakan untuk penskalaan. Jika sumber metrik eksternal Anda memerlukan autentikasi, tetapkan kolomauthenticationRefuntuk menentukan salah satu objekTriggerAuthenticationsuntuk 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 bagi penskala yang kompatibel, lihat Penskala dalam dokumentasi KEDA.
Menyimpan konfigurasi CREMA di Parameter Manager
Untuk menyimpan versi parameter untuk layanan autoscaler CREMA Anda, ikuti langkah-langkah berikut:
Buat parameter di Parameter Manager:
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAMLGanti PARAMETER_ID dengan nama parameter Anda.
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_FILEGanti kode berikut:
- PARAMETER_VERSION: ID yang ingin Anda tetapkan ke versi parameter, misalnya,
1. - LOCAL_YAML_CONFIG_FILE: jalur ke file konfigurasi YAML Anda.
- PARAMETER_VERSION: ID yang ingin Anda tetapkan ke versi parameter, misalnya,
Untuk mengetahui informasi selengkapnya, lihat Membuat parameter.
Memberikan izin tambahan ke akun layanan CREMA Anda
Untuk menskalakan worker pool yang Anda tentukan dalam konfigurasi YAML, berikan izin berikut pada akun layanan kustom:
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 Google Cloud Anda.
CREMA_SERVICE_ACCOUNT_NAME: nama akun layanan CREMA Anda.
Berikan peran
roles/run.developerkepada akun layanan CREMA Anda di worker pool. Hal ini memungkinkan layanan CREMA mengubah jumlah instance kumpulan worker 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 worker pool.
- WORKER_POOL_REGION: region worker pool Anda.
Beri izin akun layanan CREMA Anda untuk menulis metrik:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"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 workload Anda
Untuk men-deploy layanan guna menskalakan worker pool, jalankan perintah berikut dengan image container bawaan:
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 Google Cloud Anda.
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 Anda
Untuk memverifikasi bahwa layanan penskalaan otomatis Anda berfungsi dengan benar, periksa tab Logs layanan Cloud Run.
Anda akan melihat log berikut di log layanan Anda setiap kali metrik diperbarui:
Setiap pesan log diberi label dengan komponen yang memunculkannya.
[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
Pelajari cara menggunakan runner GitHub yang dihosting sendiri di worker pool untuk menjalankan alur kerja yang ditentukan di repositori GitHub Anda, dan menskalakan worker pool dengan CREMA.
Pelajari lebih lanjut worker pool Cloud Run.