CREMA 自動配置器服務會使用 Prometheus 的資料,根據比率進行計算。自動調度器服務會動態調整執行個體數量,確保工作站集區擁有適量的資源,可因應目前的工作負載。CREMA 會計算工作站集區在特定時間範圍內的 CPU 使用率,並與您設定的門檻比較,藉此調整執行個體。
目標
在這個教學課程中,您將執行下列操作:
部署 Cloud Run worker 集區,執行背景工作負載,將使用率指標回報給 Managed Service for Prometheus。 Google Cloud
部署自動配置器 CREMA 服務,根據 Prometheus 指標動態調整工作站集區大小。
觀察服務記錄,並在 Google Cloud 控制台中驗證執行個體計數的變化,測試 CREMA 服務。
費用
在本文件中,您會使用下列 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,您需要服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。- 安裝並初始化 gcloud CLI。
- 更新元件:
gcloud components update
- 設定本教學課程中使用的 CREMA 相關設定變數:
將 PROJECT_ID 替換為專案 ID。 Google Cloudexport 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 資源調度服務的費用。如要瞭解詳情,請使用定價計算機估算費用。
必要的角色
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 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"
將其他權限授予自訂服務帳戶
如要調整工作站集區大小,請在自訂服務帳戶中授予下列權限:
授予 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 服務帳戶擴縮工作站集區的權限:
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 的工作站集區,供 CREMA 擴充:
gcloud beta 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 指標自動調整工作人員集區的資源配置。
設定自動配置器
本教學課程使用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。
部署服務來調度工作負載資源
如要部署服務來調整工作站集區的資源配置,請使用預先建構的容器映像檔執行下列指令:
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 beta 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 服務的「記錄」分頁。CREMA 自動配置器服務會將消費者 worker 執行個體從 0 擴充。
每次指標重新整理時,您應該都會在服務記錄中看到下列記錄:
[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 刪除工作站集區容器映像檔
- 刪除 CREMA 服務
- 刪除服務帳戶
- 在 Parameter Manager 中刪除參數
後續步驟
- 進一步瞭解 Cloud Run 工作站集區。
- 探索其他 Cloud Run 示範、教學課程和範例。
- 使用 CREMA 設定其他 KEDA 調整器。