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

本頁面說明如何使用外部事件導向指標,自動調度 Cloud Run worker 集區資源。Cloud Run 外部指標自動調度資源 (CREMA) 採用以 Kubernetes 為基礎的事件導向自動調度資源 (KEDA),可根據外部事件來源調度工作負載資源,實現這項功能。

如要瞭解支援的調節器和 Cloud Run 相容性,請參閱 Google Cloud GitHub 說明文件中的「Cloud Run 外部指標自動調度資源 (CREMA)」。

關於自動配置器服務

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

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

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

  3. 自動更新 worker 集區的執行個體數量。

事前準備

  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 執行器或 Apache Kafka。如要確認是否支援工作負載來源,請參閱 Google Cloud GitHub 說明文件中的 CREMA 相容性清單。

  4. 查看 Pricing Calculator 估算費用。Cloud Run 擴充服務的費用取決於擴充觸發頻率。

必要的角色

如要取得自動調度 worker 集區資源所需的權限,請要求管理員在專案中授予您下列 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 服務要監控哪些外部來源、如何向資源驗證,以及要擴充哪些 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 自動配置器服務的參數版本,請按照下列步驟操作:

  1. 在 Parameter Manager 中建立參數:

    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_NAME:CREMA 服務帳戶的名稱。

  2. 將 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 集區的區域。
  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"
    

部署服務,調度工作負載資源

如要部署服務來擴充 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 ...

後續步驟