本頁面說明如何使用外部事件導向指標,自動調度 Cloud Run worker 集區資源。Cloud Run 外部指標自動調度資源 (CREMA) 採用以 Kubernetes 為基礎的事件導向自動調度資源 (KEDA),可根據外部事件來源調度工作負載資源,實現這項功能。
如要瞭解支援的調節器和 Cloud Run 相容性,請參閱 Google Cloud GitHub 說明文件中的「Cloud Run 外部指標自動調度資源 (CREMA)」。
關於自動配置器服務
如要自動調度 worker 集區資源,請將 CREMA 自動調度資源服務部署至 Cloud Run。這項服務會執行下列動作:
輪詢外部事件來源,例如 Apache Kafka 主題或 GitHub Runner Scaler。
根據 YAML 設定計算所需的執行個體數量。
自動更新 worker 集區的執行個體數量。
事前準備
請務必按照設定頁面所述,為 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 執行器或 Apache Kafka。如要確認是否支援工作負載來源,請參閱 Google Cloud GitHub 說明文件中的 CREMA 相容性清單。
查看 Pricing Calculator 估算費用。Cloud Run 擴充服務的費用取決於擴充觸發頻率。
必要的角色
如要取得自動調度 worker 集區資源所需的權限,請要求管理員在專案中授予您下列 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) - Parameter Manager 管理員 (
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 服務要監控哪些外部來源、如何向資源驗證,以及要擴充哪些 worker 集區。
YAML 範例
以下範例顯示設定檔,用於根據 GitHub Runner 指標,調度 Cloud Run worker 集區 (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 worker 集區與外部指標資源之間的對應關係。這個參數包含:scaleTargetRef:要擴充的 Cloud Run 服務或 worker 集區。triggers:用於調度資源的特定外部指標。如果外部指標來源需要驗證,請設定authenticationRef欄位,指定其中一個TriggerAuthentications物件做為憑證。
pollingInterval:控制 CREMA 重新整理指標的間隔時間 (以秒為單位)。如果省略這個參數,CREMA 就不會自動輪詢,您必須使用 POST 要求向服務手動觸發資源調度檢查。
如要進一步瞭解如何定義基本和進階設定指標,請參閱 Google Cloud GitHub 說明文件中的「設定參考資料」。
如需相容調節器的完整設定定義清單,請參閱 KEDA 說明文件中的「調節器」。
將 CREMA 設定儲存在 Parameter Manager
如要儲存 CREMA 自動配置器服務的參數版本,請按照下列步驟操作:
在 Parameter Manager 中建立參數:
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 服務帳戶的名稱。
將 worker 集區的
roles/run.developer角色授予 CREMA 服務帳戶。這樣一來,CREMA 服務就能根據指標變化,調整 worker 集區的執行個體數量: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"更改下列內容:
- WORKER_POOL_NAME:worker 集區的名稱。
- WORKER_POOL_REGION:worker 集區的區域。
授予 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"
部署服務,調度工作負載資源
如要部署服務來擴充 worker 集區,請使用預先建構的容器映像檔執行下列指令:
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"
更改下列內容:
SERVICE_NAME:自動配置器服務的名稱。
SERVICE_REGION:服務所在的區域。
CREMA_SERVICE_ACCOUNT_NAME:CREMA 服務帳戶的名稱。
PROJECT_ID: Google Cloud 專案的 ID。
PARAMETER_REGION、PARAMETER_ID 和 PARAMETER_VERSION:儲存在 Parameter Manager中的值。
您也可以使用 Cloud Build,從原始碼建構自訂容器映像檔,並用來部署 CREMA 服務。
測試 CREMA 服務
如要確認自動調度資源服務是否正常運作,請查看 Cloud Run 服務的「Logs」(記錄) 分頁。
每次重新整理指標時,服務記錄中應會顯示下列記錄:
每則記錄訊息都會標示發出訊息的元件。
[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 ...
後續步驟
瞭解如何在 worker 集區使用自行託管的 GitHub 執行器,執行 GitHub 存放區中定義的工作流程,並透過 CREMA 擴充 worker 集區。
進一步瞭解 Cloud Run worker 集區。