本頁說明如何使用外部事件驅動指標,自動調度 Cloud Run 工作站集區的資源。Cloud Run 外部指標自動調度 (CREMA) 採用以 Kubernetes 為基礎的事件驅動自動調度 (KEDA),可依據外部事件來源調度工作負載,進而啟用這項功能。
如要瞭解支援的調整器和與 Cloud Run 的相容性,請參閱 Google Cloud GitHub 說明文件中的「Cloud Run External Metrics Autoscaling (CREMA)」。
關於自動調度資源服務
如要自動調度工作站集區資源,請將 CREMA 自動調度資源服務部署至 Cloud Run。這項服務會執行下列動作:
輪詢外部事件來源,例如 Apache Kafka 主題或 GitHub Runner Scaler。
根據 YAML 設定計算所需執行個體數量。
自動更新工作站集區的執行個體計數。
事前準備
請確認您已按照設定頁面所述,為 Cloud Run 設定新專案。
啟用 Artifact Registry、Cloud Build、Cloud Run Admin API、Secret Manager 和 Parameter Manager API:
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com \ parametermanager.googleapis.com設定事件驅動或要求型工作負載,例如 GitHub Runners 或 Apache Kafka。如要確認系統是否支援工作負載來源,請參閱 Google Cloud GitHub 文件中的 CREMA 相容性清單。
請參閱定價計算機,估算費用。系統會根據您觸發擴充的頻率,收取 Cloud Run 擴充服務的費用。
必要的角色
如要取得自動調整工作站集區大小所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
Artifact Registry 存放區管理員 (
roles/artifactregistry.repoAdmin) -
Cloud Build 編輯者 (
roles/cloudbuild.builds.editor) - Cloud Run 管理員 (
roles/run.admin) -
建立服務帳戶 (
roles/iam.serviceAccountCreator) -
Secret Manager 管理員 (
roles/secretmanager.admin) -
服務帳戶使用者 (
roles/iam.serviceAccountUser) -
服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer) - 儲存空間管理員 (
roles/storage.admin) -
參數管理員管理員 (
roles/parametermanager.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立自訂服務帳戶
建立自訂服務帳戶,並授予使用工作負載所需佈建資源的最低權限。如要設定服務帳戶,請按照下列步驟操作:
gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
--display-name="CREMA Service Account"
將 CREMA_SERVICE_ACCOUNT 替換為自訂服務帳戶的名稱,例如 crema-service-account。這項指令會建立格式為 crema-service-account@example-project.iam.gserviceaccount.com 的服務帳戶。
建立 CREMA 設定檔
如要定義資源調度邏輯,請在根目錄中建立 YAML 設定檔。這個檔案會指示 CREMA 服務要監控哪些外部來源、如何向資源進行驗證,以及要調整哪些工作站集區的規模。
YAML 範例
以下範例顯示設定檔,可使用 GitHub Runner 指標,擴充 Cloud Run 工作站集區 (example-workerpool)。這個服務會使用名為 github_runner_token 的 Secret Manager 密鑰向 GitHub 驗證,以便讀取指標。
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
YAML 設定會使用下列高階參數:
triggerAuthentications:決定 CREMA 如何驗證外部服務,例如使用儲存在 Secret Manager 中的權杖。scaledObjects:定義 Cloud Run 工作人員集區與外部指標資源之間的對應。這個參數包括:scaleTargetRef:要擴充的 Cloud Run 服務或工作站集區。triggers:用於調整規模的特定外部指標。如果外部指標來源需要驗證,請設定authenticationRef欄位,為憑證指定其中一個TriggerAuthentications物件。
pollingInterval:控制 CREMA 重新整理指標的時間間隔 (以秒為單位)。如果省略這項參數,CREMA 不會自動輪詢,您必須使用對服務的 POST 要求,手動觸發縮放檢查。
如要進一步瞭解如何定義基本和進階設定指標,請參閱 Google Cloud GitHub 說明文件中的設定參考資料。
如要查看相容調度器的完整設定定義清單,請參閱 KEDA 說明文件中的「調度器」。
在參數管理工具中儲存 CREMA 設定
如要為 CREMA 自動調度器服務儲存參數版本,請按照下列步驟操作:
在參數管理工具中建立參數:
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAML將 PARAMETER_ID 替換為參數名稱。
上傳本機 YAML 檔案做為新的參數版本:
gcloud parametermanager parameters versions create PARAMETER_VERSION \ --location=global \ --parameter=PARAMETER_ID \ --payload-data-from-file=LOCAL_YAML_CONFIG_FILE更改下列內容:
- PARAMETER_VERSION:您要指派給參數版本的 ID,例如
1。 - LOCAL_YAML_CONFIG_FILE:YAML 設定檔的路徑。
- PARAMETER_VERSION:您要指派給參數版本的 ID,例如
詳情請參閱「建立參數」。
將其他權限授予 CREMA 服務帳戶
如要擴充 YAML 設定中指定的工作站集區,請在自訂服務帳戶中授予下列權限:
授予 CREMA 服務帳戶讀取 Parameter Manager 的權限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \ --role="roles/parametermanager.parameterViewer"更改下列內容:
PROJECT_ID: Google Cloud 專案的 ID。
CREMA_SERVICE_ACCOUNT_NAME:CREMA 服務帳戶的名稱。
將工作站集區的
roles/run.developer角色授予 CREMA 服務帳戶。這樣一來,CREMA 服務就能因應指標變化,修改工作站集區的執行個體數量: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"更改下列內容:
- WORKER_POOL_NAME:工作站集區的名稱。
- WORKER_POOL_REGION:工作站集區的區域。
授予 CREMA 服務帳戶寫入指標的權限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"將服務帳戶使用者角色授予 CREMA 服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/iam.serviceAccountUser"
部署服務來調度工作負載資源
如要部署服務來調整工作站集區的資源配置,請使用預先建構的容器映像檔執行下列指令:
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"
更改下列內容:
SERVICE_NAME:自動調整服務的名稱。
SERVICE_REGION:服務所在的區域。
CREMA_SERVICE_ACCOUNT_NAME:CREMA 服務帳戶的名稱。
PROJECT_ID: Google Cloud 專案的 ID。
PARAMETER_REGION、PARAMETER_ID 和 PARAMETER_VERSION:儲存在參數管理工具中的值。
您也可以使用 Cloud Build,從原始碼建構自訂容器映像檔,然後部署 CREMA 服務。
測試 CREMA 服務
如要確認自動調整服務是否正常運作,請查看 Cloud Run 服務的「記錄」分頁。
每次指標重新整理時,您應該都會在服務記錄中看到下列記錄:
每則記錄訊息都會標示發出訊息的元件。
[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 ...