CREMA 自动扩缩器服务使用 Prometheus 中的数据执行基于比率的计算。自动扩缩器服务会动态调整实例数量,以确保工作器池拥有适合当前工作负载的资源量。CREMA 会计算工作器池在特定时间段内的 CPU 利用率,并将其与您配置的阈值进行比较,以调整实例。
目标
在此教程中,您将学习以下操作:
部署 Cloud Run 工作器池,以运行向 Google Cloud Managed Service for Prometheus 报告利用率指标的 后台工作负载。
部署自动扩缩器 CREMA 服务以动态 扩缩工作器池,具体取决于 Prometheus 指标。
费用
在本文档中,您将使用的以下收费组件: Google Cloud
您可使用 价格计算器 根据您的预计使用情况来估算费用。
准备工作
- 登录您的 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 API、Parameter Manager API、Artifact Registry API、Cloud Build API 和 Cloud Monitoring API。
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。- 安装并初始化 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 伸缩服务会根据您触发伸缩的频率向您收取费用。如需了解详情,请使用价格计算器估算费用。
所需的角色
如需获得完成本教程所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
Artifact Registry Repository Administrator (
roles/artifactregistry.repoAdmin) -
Cloud Build Editor (
roles/cloudbuild.builds.editor) -
Cloud Run Admin (
roles/run.admin) -
Create Service Accounts (
roles/iam.serviceAccountCreator) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) -
Parameter Manager Admin (
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 服务帐号授予服务帐号 User 角色:
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 工作器池
部署包含 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 自动扩缩器服务会将消费者工作器实例从 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 控制台中,前往 管理资源 页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击 关闭以删除项目。
删除教程资源
删除您在本教程中部署的 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 工作器池。
- 探索其他 Cloud Run 演示、教程和示例。
- 使用 CREMA 配置其他 KEDA 扩缩器。