默认情况下,Cloud Run 会优化性能,将 CPU 和并发的利用率目标值设为 60%,并自动扩缩实例数量以处理所有传入请求。不过,在某些应用场景下,您可能希望能够配置要使用的伸缩因素(例如仅 CPU),并为利用率设置自定义目标。
Cloud Run 提供了伸缩控制功能,让您可以更好地掌控服务的伸缩行为,并根据自己的需求做出明智的决策来伸缩工作负载。您可以配置以下自定义利用率目标值:
- 基于 CPU 的伸缩的目标利用率
- 基于并发的伸缩的目标利用率
借助伸缩控制功能,您可以优化服务成本并提高可预测性。如需详细了解 Cloud Run 服务的默认自动扩缩行为,请参阅 Cloud Run 服务中的实例自动扩缩简介。
配置限制
以下限制适用于自定义伸缩目标:
| 缩放驱动程序 | 默认 % | 可配置的最低百分比 | 可配置的最大百分比 |
|---|---|---|---|
CPU target utilization |
60% | 10% | 90% |
Concurrency target utilization |
60% | 10% | 95% |
配置自定义目标值
通过在配置限制内配置特定的 CPU 和并发利用率目标,定义自定义利用率目标,以优化成本或提升工作负载的性能。
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
即使您配置了自定义并发目标或停用了基于 CPU 的伸缩,自适应并发调整 (ACT) 仍会保持有效。如需了解详情,请参阅实例自动扩缩简介。
您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 来配置伸缩控制。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
如果您要配置新服务,请点击部署容器以显示创建服务页面。
如果您要配置现有服务,请点击该服务以打开其服务详情页面,然后点击扩缩标签页。
找到服务伸缩部分。确保已选择自动缩放。展开自定义自动扩缩因子部分,以配置以下利用率目标值:
如需配置目标 CPU 利用率,请点击 CPU 利用率,然后输入介于
10到90之间的值。如需配置目标并发利用率,请点击并发请求利用率,然后输入介于
10到95之间的值。点击每项利用率配置下方的完成。
对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。
gcloud
运行 gcloud run services update 命令,更新给定修订版本的目标 CPU 利用率和目标并发利用率值。
如需更新目标 CPU 利用率,请运行以下命令:
gcloud run services update SERVICE --scaling-cpu-target=CPU_TARGET
替换以下内容:
SERVICE:服务的名称。
CPU_TARGET:CPU 利用率目标值。指定一个介于
0.1到0.90之间的值。您最多只能配置小数点后两位。
如需更新目标并发利用率,请运行以下命令:
gcloud run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET
替换以下内容:
SERVICE:服务的名称。
CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
如需同时更新目标 CPU 和并发利用率,请运行以下命令:
gcloud run services update SERVICE --scaling-cpu-target=CPU_TARGET \ --scaling-concurrency-target=CONCURRENCY_TARGET
替换以下内容:
- SERVICE:服务的名称。
- CPU_TARGET:CPU 利用率目标值。指定一个介于
0.1到0.90之间的值。您最多只能配置小数点后两位。 - CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
如需更新目标 CPU 和并发利用率,请添加
run.googleapis.com/scaling-cpu-target和run.googleapis.com/scaling-concurrency-target属性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: 'CPU_TARGET' run.googleapis.com/scaling-concurrency-target: 'CONCURRENCY_TARGET'
替换以下内容:
- SERVICE:服务的名称。
- CPU_TARGET:CPU 利用率目标值。指定一个介于
0.1到0.90之间的值。您最多只能配置小数点后两位。 - CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将以下内容添加到 Terraform 配置中的google_cloud_run_v2_service 资源:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
template {
scaling {
cpu_utilization = CPU_TARGET
concurrency_utilization = CONCURRENCY_TARGET
}
containers {
image = "IMAGE_URL"
}
}
}
替换以下内容:
- SERVICE:服务的名称。
- REGION: Google Cloud 区域,例如
europe-west1。 - CPU_TARGET:CPU 利用率目标值。指定一个介于
0.1到0.90之间的值。您最多只能配置小数点后两位。 - CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
IMAGE_URL:对容器映像的引用,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
停用伸缩控制机制
您可以停用 CPU 利用率目标或并发利用率目标,但不能同时停用这两者。必须始终有一个伸缩驱动处于活跃状态。如需选择不使用伸缩控制功能,请恢复默认利用率值,而不是停用这些值。停用伸缩驱动程序后,Cloud Run 在制定伸缩决策时会忽略相应指标。
您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 停用伸缩控制。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开其服务详情页面,然后点击扩缩标签页。
找到服务伸缩部分。确保已选择自动缩放。展开自定义自动扩缩因子部分:
如需仅按 CPU 进行扩缩,请点击并发请求利用率旁边的删除图标,然后输入目标 CPU 利用率值(如果该值缺失)。
如需仅按并发进行扩缩,请点击 CPU 利用率旁边的删除图标,然后输入目标并发利用率的值(如果该值缺失)。
点击每项利用率配置下方的完成。
对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。
gcloud
您可以运行 gcloud run services update 命令来停用目标 CPU 利用率或目标并发利用率。
如需仅按 CPU 进行扩缩,请运行以下命令来停用并发目标:
gcloud run services update SERVICE --scaling-concurrency-target=disabled
将 SERVICE 替换为服务的名称。
如需仅按并发数进行扩缩,请运行以下命令来停用 CPU 目标:
gcloud run services update SERVICE --scaling-cpu-target=disabled
将 SERVICE 替换为服务的名称。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
如需仅按 CPU 进行扩缩,请将
run.googleapis.com/scaling-concurrency-target属性设置为disabled,以停用并发数目标值:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-concurrency-target: disabled
将 SERVICE 替换为服务的名称。
如需仅按并发性进行扩缩,请将
run.googleapis.com/scaling-cpu-target属性设置为disabled,以停用 CPU 目标:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: disabled
将 SERVICE 替换为服务的名称。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将以下内容添加到 Terraform 配置中的google_cloud_run_v2_service 资源:如需仅按 CPU 进行扩缩,请将
concurrency_utilization设置为0,以停用并发数目标值:resource "google_cloud_run_v2_service" "default" { name = "SERVICE" location = "REGION" template { scaling { cpu_utilization = CPU_TARGET concurrency_utilization = 0 } containers { image = "IMAGE_URL" } } }替换以下内容:
- SERVICE:服务的名称。
- REGION: Google Cloud 区域,例如
europe-west1。 - CPU_TARGET:CPU 利用率目标值。指定一个介于
0.1到0.90之间的值。您最多只能配置小数点后两位。 IMAGE_URL:对容器映像的引用,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
如需仅按并发进行扩缩,请将
cpu_utilization设置为0,以停用 CPU 目标:resource "google_cloud_run_v2_service" "default" { name = "SERVICE" location = "REGION" template { scaling { cpu_utilization = 0 concurrency_utilization = CONCURRENCY_TARGET } containers { image = "IMAGE_URL" } } }替换以下内容:
- SERVICE:服务的名称。
- REGION: Google Cloud 区域,例如
europe-west1。 - CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
IMAGE_URL:对容器映像的引用,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
恢复为默认值
将目标 CPU 或目标并发利用率值恢复为默认值后,Cloud Run 会使用 60% 的默认利用率目标,而不是您的自定义目标。您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 将伸缩控制恢复为默认值。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开其服务详情页面,然后点击扩缩标签页。
找到服务伸缩部分。确保已选择自动伸缩。展开自定义自动扩缩因子部分,以配置以下利用率目标值:
如果移除了 CPU 利用率和并发请求利用率目标值,请点击添加信号以重新添加每个目标值。
将 CPU 利用率和并发请求利用率的值设置为
60。点击每项利用率配置下方的完成。
对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。
gcloud
运行 gcloud run services update 命令,将目标 CPU 利用率和目标并发利用率恢复为默认值。
如需将目标 CPU 利用率恢复为默认值,请运行以下命令:
gcloud run services update SERVICE --scaling-cpu-target=default
将 SERVICE 替换为服务的名称。
如需将目标并发利用率恢复为默认值,请运行以下命令:
gcloud run services update SERVICE --scaling-concurrency-target=default
将 SERVICE 替换为服务的名称。
如需将目标 CPU 利用率和目标并发都恢复为默认值,请运行以下命令:
gcloud run services update SERVICE --scaling-cpu-target=default \ --scaling-concurrency-target=default
将 SERVICE 替换为服务的名称。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
如需将 CPU 和并发利用率恢复为默认目标值,请从 YAML 文件中移除
run.googleapis.com/scaling-cpu-target和run.googleapis.com/scaling-concurrency-target属性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: # Remove the scaling target annotations to restore defaults ...
将 SERVICE 替换为服务的名称。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将以下内容添加到 Terraform 配置中的google_cloud_run_v2_service 资源:如需将 CPU 和并发利用率恢复为默认目标值,请从 Terraform 配置中的 scaling 块中移除 cpu_utilization 和 concurrency_utilization 属性:
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
template {
scaling {
# Remove the scaling target attributes to restore defaults
}
containers {
image = "IMAGE_URL"
}
}
}
替换以下内容:
- SERVICE:服务的名称。
- REGION: Google Cloud 区域,例如
europe-west1。 IMAGE_URL:对容器映像的引用,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
查看伸缩配置
您可以使用 Google Cloud 控制台或 gcloud CLI 查看伸缩配置。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开服务详情面板。
点击缩放标签页以查看伸缩设置。
gcloud
使用以下命令:
gcloud run services describe SERVICE
将 SERVICE 替换为服务的名称。
在返回的配置中找到目标 CPU 利用率:和目标并发利用率:设置的值。
最佳做法
您可以减少实例数量来优化费用并防止过度伸缩,也可以根据特定驱动因素更积极地进行伸缩来提高性能。如需确定工作负载的最佳利用率目标值,请使用以下策略:
在调整目标之前,请确定是哪个指标触发了服务的扩缩。请按以下步骤确定伸缩指标:
前往 Google Cloud 控制台中的 Metrics Explorer,查看伸缩驱动程序的监控图表。
搜索并选择
run.googleapis.com/scaling/recommended_instances指标,然后将汇总设置为未汇总,以查看按伸缩驱动程序分组的指标。
值最高的驱动程序是控制服务实例计数的驱动程序。如果您希望其他驱动程序优先运行,或者希望以更积极或更消极的方式进行扩缩,请调整相应驱动程序的利用率目标值。
如果自适应并发调优 (ACT) 是伸缩驱动因素,则表示单个实例的 1 秒 CPU 利用率超过 90%,并且 Cloud Run 正在动态限制请求并发,以保护您的服务。为了缓解 ACT 对伸缩的影响,请考虑增加 CPU 分配或调整并发设置。如需了解详情,请参阅实例自动扩缩简介。
逐步调整目标值,并在每次调整之间等待几分钟,以观察对效果的影响。
使用流量拆分,您可以先将一小部分流量定向到单独的修订版本,测试新的伸缩目标,然后再将这些目标推广到整个服务。
低利用率目标简介
将利用率目标值降至最低值 0.1 (10%) 会显著改变服务的扩缩方式。
设置较低的利用率目标值的好处包括:
高服务可用性:您的服务会更早地扩容,保持较大的闲置容量缓冲,以便在不影响延迟的情况下应对突如其来的流量高峰。
在实例数量较少时更快地伸缩:服务在达到高利用率瓶颈之前,可以更可靠地伸缩。
设置较低的利用率目标的缺点包括:
- 费用可能会增加:您运行的实例数量超过了当前负载所需的最低数量,导致账单金额更高。
- 更频繁的伸缩决策:在利用率较低时,Cloud Run 的容忍度较低,不会等待太长时间才进行伸缩。
后续步骤
- 如需详细了解自动扩缩的概念和行为,请参阅 Cloud Run 服务中的实例自动扩缩简介。
- 如需了解其他扩缩选项,请参阅手动扩缩。
- 若要管理 Cloud Run 服务的实例数上限,请参阅设置实例数上限。
- 若要管理每个实例同时处理的请求数量上限,请参阅设置并发。
- 要优化并发设置,请参阅关于调整并发设置的开发提示。
- 如需指定空闲实例继续运行,以便最大限度地缩短处理第一批请求的延迟时间或冷启动时间,请参阅使用
min-instance启用空闲实例。