本教學課程說明如何使用 Cloud Run 外部指標自動調度資源 (CREMA),根據 Prometheus 指標自動調度 Cloud Run worker 集區資源。
CREMA 自動配置器服務會使用 Prometheus 的資料,執行比率計算。自動配置器服務會動態調整執行個體數量,確保 worker 集區有足夠的資源處理目前的工作負載。CREMA 會計算工作站集區在特定時間範圍內的 CPU 使用率,並與設定的門檻比較,據此調整執行個體。
目標
在這個教學課程中,您將執行下列操作:
部署 Cloud Run worker 集區,執行背景工作負載,將使用率指標回報給 Google Cloud Managed Service for Prometheus。
部署自動配置器 CREMA 服務,根據 Prometheus 指標動態調度 worker 集區資源。
測試 CREMA 服務:觀察服務記錄,並在 Google Cloud 控制台驗證執行個體數量變化。
費用
在本文件中,您會使用下列 Google Cloud計費元件:
您可以使用 Pricing Calculator,根據預測用量估算費用。
事前準備
- 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
啟用 Cloud Run、Parameter Manager、Artifact Registry、Cloud Build 和 Cloud Monitoring API (如有尚未啟用的 API)。
啟用 API 所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。- 安裝並初始化 gcloud CLI。
- 更新元件:
gcloud components update
- 為本教學課程中使用的 CREMA 設定下列設定變數:
將 PROJECT_ID 替換為 Google Cloud 專案 ID。export PROJECT_ID=PROJECT_ID export REGION=us-central1 export CREMA_SA_NAME=crema-service-account export CONSUMER_SA_NAME=consumer-service-account export CONSUMER_WORKER_POOL_NAME=worker-pool-consumer export CREMA_SERVICE_NAME=my-crema-service
- 執行下列指令來設定專案 ID:
gcloud config set project $PROJECT_ID
- Cloud Run 擴充服務的費用取決於觸發擴充的頻率。如要瞭解詳情,請使用 Pricing Calculator 估算費用。
必要的角色
如要取得完成教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Artifact Registry 存放區管理員 (
roles/artifactregistry.repoAdmin) - Cloud Build 編輯者 (
roles/cloudbuild.builds.editor) - Cloud Run 管理員 (
roles/run.admin) - 建立服務帳戶 (
roles/iam.serviceAccountCreator) - 服務帳戶使用者 (
roles/iam.serviceAccountUser) - 服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer) - Parameter Manager 管理員 (
roles/parametermanager.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立自訂服務帳戶
本教學課程需要下列兩個服務帳戶,並具備使用佈建資源所需的最低權限:
消費者服務帳戶:執行背景工作負載的工作站集區身分。執行下列指令,建立用戶服務帳戶:
gcloud iam service-accounts create $CONSUMER_SA_NAME \ --display-name="Consumer service account"CREMA 服務帳戶:自動配置器的身分。執行下列指令,建立 CREMA 服務帳戶:
gcloud iam service-accounts create $CREMA_SA_NAME \ --display-name="CREMA service account"
將其他權限授予自訂服務帳戶
如要擴充 worker 集區,請授予自訂服務帳戶下列權限:
授予 CREMA 服務帳戶讀取 Parameter Manager 的權限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/parametermanager.parameterViewer"授予 CREMA 服務帳戶擴充 worker 集區的權限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.developer"將服務帳戶使用者角色授予 CREMA 服務帳戶:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"授予 CREMA 服務帳戶查看指標的權限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.viewer"授予 CREMA 服務帳戶寫入指標的權限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
部署 Cloud Run worker 集區
部署含有 0 個執行個體的 worker 集區,讓 CREMA 擴充:
gcloud run worker-pools deploy $CONSUMER_WORKER_POOL_NAME \
--image us-docker.pkg.dev/cloudrun/container/worker-pool:latest \
--instances 0 \
--region $REGION \
--memory 4G \
--cpu 4 \
--service-account="$CONSUMER_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com"
部署自動配置器 CREMA 服務
部署 CREMA 服務,根據 Prometheus 指標自動調度 worker 集區資源。
設定自動配置器
本教學課程會使用Parameter Manager,儲存 CREMA 的 YAML 設定檔。
在 Parameter Manager 中建立參數,用於儲存 CREMA 的參數版本:
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAML在根目錄中建立 YAML 檔案
my-crema-config.yaml,定義自動配置器設定。將自動調度資源門檻設為 50% CPU 使用率:apiVersion: crema/v1 kind: CremaConfig spec: pollingInterval: 30 triggerAuthentications: - metadata: name: google-crema-auth spec: podIdentity: provider: gcp scaledObjects: - spec: scaleTargetRef: name: projects/PROJECT_ID/locations/us-central1/workerPools/worker-pool-consumer minReplicaCount: 1 maxReplicaCount: 20 triggers: - type: prometheus metadata: serverAddress: https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus threshold: "0.5" query: | histogram_quantile( 0.50, sum by (le) ( increase( run_googleapis_com:container_cpu_utilizations_bucket{ monitored_resource="cloud_run_worker_pool", worker_pool_name="worker-pool-consumer", location="us-central1", project_id="PROJECT_ID" }[2m] ) ) ) authenticationRef: name: google-crema-auth advanced: horizontalPodAutoscalerConfig: behavior: scaleDown: stabilizationWindowSeconds: 300將 PROJECT_ID 替換為 Google Cloud 專案 ID。
將本機 YAML 檔案上傳為新的參數版本:
LOCAL_YAML_CONFIG_FILE=my-crema-config.yaml PARAMETER_VERSION=1 gcloud parametermanager parameters versions create $PARAMETER_VERSION \ --location=$PARAMETER_REGION \ --parameter=$PARAMETER_ID \ --payload-data-from-file=$LOCAL_YAML_CONFIG_FILE執行下列指令,確認參數是否新增成功:
gcloud parametermanager parameters versions list \ --parameter=$PARAMETER_ID \ --location=$PARAMETER_REGION您應該會看到參數路徑,例如
projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1。
部署服務,調度工作負載資源
如要部署服務來擴充 worker 集區,請使用預先建構的容器映像檔執行下列指令:
CREMA_CONFIG_PARAM_VERSION=projects/$PROJECT_ID/locations/$PARAMETER_REGION/parameters/$PARAMETER_ID/versions/$PARAMETER_VERSION
IMAGE=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0
gcloud run deploy $CREMA_SERVICE_NAME \
--image=${IMAGE} \
--region=${REGION} \
--service-account="${CREMA_SA_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=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"
測試自動調度資源服務
如要確認自動調度資源服務是否正常運作,請查看 Cloud Run 服務的「Logs」(記錄) 分頁。CREMA 自動配置器服務會從 0 開始向上擴充消費者 worker 執行個體。
每次重新整理指標時,服務記錄中應會顯示下列記錄:
[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 ...
Cloud Run 會為每則記錄訊息加上標籤,指出發出訊息的元件。
清除所用資源
為避免系統向您的 Google Cloud 帳戶收取額外費用,請刪除您在本教學課程中部署的所有資源。
刪除專案
如果您是為了這個教學課程建立新專案,請刪除專案。如果您使用現有專案,並想保留專案,但不要本教學課程新增的變更,請刪除為本教學課程建立的資源。
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
刪除專案的方法如下:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除教學課程資源
刪除您在本教學課程中部署的 Cloud Run 服務。Cloud Run 服務在收到要求前不會產生費用。
如要刪除 Cloud Run 服務,請執行下列指令:
gcloud run services delete SERVICE-NAME
將 SERVICE-NAME 改為您的服務名稱。
您也可以從Google Cloud 控制台刪除 Cloud Run 服務。
移除您在教學課程設定期間新增的
gcloud預設區域設定:gcloud config unset run/region移除專案設定:
gcloud config unset project刪除在本教學課程中建立的其他 Google Cloud 資源:
- 刪除 Cloud Run worker 集區
- 從 Artifact Registry 刪除 worker 集區容器映像檔
- 刪除 CREMA 服務
- 刪除服務帳戶
- 在 Parameter Manager 中刪除參數
後續步驟
- 進一步瞭解 Cloud Run worker 集區。
- 探索其他 Cloud Run 示範、教學課程和範例。
- 使用 CREMA 設定其他 KEDA 縮放器。