依據外部指標自動調度工作站集區的資源

本頁說明如何使用外部事件驅動指標,自動調度 Cloud Run 工作站集區的資源。Cloud Run 外部指標自動調度 (CREMA) 採用以 Kubernetes 為基礎的事件驅動自動調度 (KEDA),可依據外部事件來源調度工作負載,進而啟用這項功能。

如要瞭解支援的調整器和與 Cloud Run 的相容性,請參閱 Google Cloud GitHub 說明文件中的「Cloud Run External Metrics Autoscaling (CREMA)」。

關於自動調度資源服務

如要自動調度工作站集區資源,請將 CREMA 自動調度資源服務部署至 Cloud Run。這項服務會執行下列動作:

  1. 輪詢外部事件來源,例如 Apache Kafka 主題或 GitHub Runner Scaler

  2. 根據 YAML 設定計算所需執行個體數量。

  3. 自動更新工作站集區的執行個體計數。

事前準備

  1. 請確認您已按照設定頁面所述,為 Cloud Run 設定新專案。

  2. 啟用 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
    
  3. 設定事件驅動或要求型工作負載,例如 GitHub Runners 或 Apache Kafka。如要確認系統是否支援工作負載來源,請參閱 Google Cloud GitHub 文件中的 CREMA 相容性清單

  4. 請參閱定價計算機,估算費用。系統會根據您觸發擴充的頻率,收取 Cloud Run 擴充服務的費用。

必要的角色

如要取得自動調整工作站集區大小所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

建立自訂服務帳戶

建立自訂服務帳戶,並授予使用工作負載所需佈建資源的最低權限。如要設定服務帳戶,請按照下列步驟操作:

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 自動調度器服務儲存參數版本,請按照下列步驟操作:

  1. 在參數管理工具中建立參數:

    gcloud parametermanager parameters create PARAMETER_ID --location=global  --parameter-format=YAML
    

    PARAMETER_ID 替換為參數名稱。

  2. 上傳本機 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 設定檔的路徑。

詳情請參閱「建立參數」。

將其他權限授予 CREMA 服務帳戶

如要擴充 YAML 設定中指定的工作站集區,請在自訂服務帳戶中授予下列權限:

  1. 授予 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_NAMECREMA 服務帳戶的名稱。

  2. 將工作站集區的 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:工作站集區的區域。
  3. 授予 CREMA 服務帳戶寫入指標的權限:

     gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
       --role="roles/monitoring.metricWriter"
    
  4. 將服務帳戶使用者角色授予 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_NAMECREMA 服務帳戶的名稱。

  • PROJECT_ID: Google Cloud 專案的 ID。

  • PARAMETER_REGIONPARAMETER_IDPARAMETER_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 ...

後續步驟