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:
Meminta 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 penyiapan.
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.comKonfigurasi 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.
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:
-
Administrator Repositori Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Admin Cloud Run (
roles/run.admin) -
Buat Akun Layanan (
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 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 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 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:
Buat parameter di Pengelola Parameter:
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 kumpulan worker 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 Google Cloud project Anda.
CREMA_SERVICE_ACCOUNT_NAME: nama akun layanan CREMA Anda.
Berikan peran
roles/run.developerkepada 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.
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"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
Pelajari cara menggunakan runner GitHub yang dihosting sendiri di kumpulan pekerja untuk menjalankan alur kerja yang ditentukan di repositori GitHub Anda, dan menskalakan kumpulan pekerja dengan CREMA.
Pelajari lebih lanjut kumpulan pekerja Cloud Run.