默认情况下,Cloud Run 会针对高性能进行优化,CPU 和并发的利用率目标均为 60%,并会自动扩缩实例数量以处理所有传入请求。 不过,在某些使用场景下,您可能希望能够配置要使用的伸缩因子(例如仅 CPU),并为利用率设置自定义目标。
Cloud Run 提供伸缩控制机制,让您对服务的伸缩行为拥有更多自主权,并根据您的要求就伸缩工作负载做出明智的决策。您可以选择保留默认利用率目标,以获得增强的伸缩行为,也可以配置以下自定义利用率目标:
- 基于 CPU 的伸缩的目标利用率
- 基于并发的伸缩的目标利用率
借助伸缩控制机制,您可以优化服务的费用并提高可预测性。如需详细了解 Cloud Run 服务的默认自动扩缩 行为,请参阅 Cloud Run 服务中的实例自动扩缩简介。
配置限制
以下限制适用于自定义伸缩目标:
| 扩缩驱动程序 | 默认 % | 可配置的最小 % | 可配置的最大 % |
|---|---|---|---|
CPU target utilization |
60% | 10% | 95% |
Concurrency target utilization |
60% | 10% | 95% |
选择启用增强的伸缩行为
Cloud Run 的自动扩缩器会密切响应您配置的目标,即使对于实例数量较少的服务也是如此。建议您选择启用此功能以提高伸缩可预测性,即使您打算为 CPU 和并发保留 60% 的默认利用率目标也是如此。
如需选择启用,您可以在部署新修订版本时使用 gcloud CLI 或 YAML。
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
gcloud
如需设置给定修订版本的 目标 CPU 利用率和 目标并发利用率值,请
运行以下 gcloud beta run services update 命令:
gcloud beta run services update SERVICE --scaling-cpu-target=0.6 \ --scaling-concurrency-target=0.6
将 SERVICE 替换为服务的名称。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
添加
run.googleapis.com/scaling-cpu-target和run.googleapis.com/scaling-concurrency-target属性。apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: '0.6' run.googleapis.com/scaling-concurrency-target: '0.6'
将 SERVICE 替换为服务的名称。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
如果存在
service.yaml文件,gcloud run services replace命令默认使用该文件。
配置自定义目标
通过在 配置限制内配置特定的 CPU 和并发利用率 目标,定义自定义利用率目标,以优化费用或提升 工作负载的性能。
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
您可以在 部署新修订版本时使用 gcloud CLI 或 YAML 配置伸缩控制机制。
gcloud
如需更新给定修订版本的 目标 CPU 利用率和 目标并发利用率 值,请
运行 gcloud beta run services update 命令。
如需更新目标 CPU 利用率,请运行以下命令:
gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET
替换以下内容:
SERVICE:服务的名称。
CPU_TARGET:CPU 利用率的目标值。指定一个介于 0.1 到 0.95 之间的值。您只能配置小数点后最多两位数。
如需更新目标并发利用率,请运行以下命令:
gcloud beta run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET
替换以下内容:
SERVICE:服务的名称。
CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 0.1 到 0.95 之间的值。您只能配置小数点后最多两位数。
如需同时更新目标 CPU 和并发利用率,请运行以下命令:
gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET \ --scaling-concurrency-target=CONCURRENCY_TARGET
替换以下内容:
- SERVICE:服务的名称。
- CPU_TARGET:CPU 利用率的目标值。指定一个介于 0.1 到 0.95 之间的值。您只能配置小数点后最多两位数。
- 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: annotations: run.googleapis.com/launch-stage: BETA 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.95 之间的值。您只能配置小数点后最多两位数。
- CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 0.1 到 0.95 之间的值。您只能配置小数点后最多两位数。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
如果存在
service.yaml文件,gcloud run services replace命令默认使用该文件。
停用伸缩控制机制
您可以停用 CPU 利用率或并发利用率目标,但不能同时停用两者。必须始终有一个伸缩驱动程序处于活跃状态。如需选择停用伸缩 控制机制,请恢复默认利用率值而不是 停用它们。停用伸缩驱动程序后,Cloud Run 在制定伸缩决策时会忽略该指标。
您可以在部署新修订版本时使用 gcloud CLI 或 YAML 停用伸缩控制机制。
gcloud
您可以运行 gcloud beta run services update 命令来停用 目标 CPU 利用率 或 目标并发利用率。
如需仅按 CPU 进行扩缩,请运行以下命令以停用并发目标:
gcloud beta run services update SERVICE --scaling-concurrency-target=disabled
将 SERVICE 替换为服务的名称。
如需仅按并发进行扩缩,请运行以下命令以停用 CPU 目标:
gcloud beta 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: annotations: run.googleapis.com/launch-stage: BETA 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: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: disabled
将 SERVICE 替换为服务的名称。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
如果存在
service.yaml文件,gcloud run services replace命令默认使用该文件。
恢复为默认值
将目标 CPU 或目标并发利用率值恢复为默认值后,您将选择停用伸缩控制机制功能。您可以在部署新修订版本时使用 gcloud CLI 或 YAML 将伸缩 控制机制恢复为默认值。
gcloud
如需将 目标 CPU 利用率 和 目标并发利用率 恢复为默认值,请通过
运行 gcloud beta run services update 命令。
如需将目标 CPU 利用率恢复为默认值,请运行以下命令:
gcloud beta run services update SERVICE --scaling-cpu-target=default
将 SERVICE 替换为服务的名称。
如需将目标并发利用率恢复为默认值,请运行以下命令:
gcloud beta run services update SERVICE --scaling-concurrency-target=default
将 SERVICE 替换为服务的名称。
如需将目标 CPU 利用率和目标并发利用率都恢复为默认值,请运行以下命令:
gcloud beta 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: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: # Remove the scaling target annotations to restore defaults ...
将 SERVICE 替换为服务的名称。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
如果存在
service.yaml文件,gcloud run services replace命令默认使用该文件。
查看伸缩配置
您可以使用 gcloud CLI 或 YAML 查看伸缩配置。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击您的服务以打开服务详情 面板。
点击伸缩 标签页以查看伸缩设置。
gcloud
使用以下命令:
gcloud run services describe SERVICE
将 SERVICE 替换为服务的名称。
在返回的配置中找到目标 CPU 利用率: 和目标并发利用率: 设置的值。
最佳做法
您可以减少实例数量来优化费用并防止过度伸缩,也可以通过更积极地响应特定驱动程序来提升性能。如需确定工作负载的最佳利用率目标,请使用以下策略:
在调整目标之前,请确定哪个指标触发了服务的扩缩。请按照以下步骤确定伸缩指标:
前往 Metrics Explorer 控制台,查看 CPU 和 并发利用率的监控图表。 Google Cloud
搜索并选择
run.googleapis.com/scaling/recommended_instances指标,并将汇总 设置为未汇总 ,以按伸缩驱动程序查看分组的指标。
值最高的驱动程序是控制服务实例数量的驱动程序。如果您希望其他驱动程序优先,或者希望更积极或更不积极地扩缩,请调整该特定驱动程序的利用率目标。
逐步调整目标,并在调整之间等待几分钟,以观察对性能的影响。
使用 流量拆分 来测试 新的伸缩目标,方法是将一小部分流量定向到 单独的修订版本,然后再将其推广到您的整个服务。
关于低利用率目标
将利用率目标降低到最低值 0.1 (10%) 会显著改变服务的扩缩方式。
设置低利用率目标的好处包括:
服务可用性高:您的服务会更早扩容,保持 大量空闲容量缓冲区,以处理突发的流量高峰,而不会出现 延迟。
实例数量较少时伸缩速度更快:服务在达到高利用率瓶颈之前,伸缩更可靠。
设置低利用率目标的缺点包括:
- 费用可能会增加:您运行的实例数量超过当前负载的实际需要 ,导致账单金额更高。
- 伸缩决策更频繁:在利用率较低的情况下,Cloud Run 的容忍度较低,并且不会等待太长时间才进行伸缩。
后续步骤
- 如需了解其他扩缩选项,请参阅手动扩缩。
- 若要管理 Cloud Run 服务的实例数上限,请参阅设置实例数上限。
- 若要管理每个实例同时处理的请求数量上限,请参阅设置并发。
- 要优化并发设置,请参阅关于调整并发设置的开发提示。
- 如需指定空闲实例继续运行,以便最大限度地缩短处理第一批请求的延迟时间或冷启动时间,请参阅使用
min-instance启用空闲实例。