默认情况下,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
运行以下 gcloud beta run services update 命令,设置给定修订版本的目标 CPU 利用率和目标并发利用率值:
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
配置自定义目标
通过在配置限制内配置特定的 CPU 和并发利用率目标值,定义自定义利用率目标值,以优化工作负载的费用或提升性能。
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
您可以在部署新修订版本时使用 gcloud CLI 或 YAML 配置伸缩控制。
gcloud
运行 gcloud beta run services update 命令,更新给定修订版本的目标 CPU 利用率和目标并发利用率值。
如需更新目标 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
停用伸缩控制机制
您可以停用 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
恢复为默认值
将目标 CPU 或目标并发利用率值恢复为默认值后,您将选择停用伸缩控制功能。您可以在部署新修订版本时使用 gcloud CLI 或 YAML 将伸缩控制恢复为默认值。
gcloud
运行 gcloud beta run services update 命令,将目标 CPU 利用率和目标并发利用率恢复为默认值。
如需将目标 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
查看伸缩配置
您可以使用 gcloud CLI 或 YAML 查看伸缩配置。
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开服务详情面板。
点击修订版本标签页。
在右侧的详细信息面板中,查看容器标签页下列出的自动扩缩指标设置。
gcloud
使用以下命令:
gcloud run services describe SERVICE
将 SERVICE 替换为服务的名称。
在返回的配置中找到目标 CPU 利用率和目标并发利用率设置的值。
最佳做法
您可以减少实例数量来优化费用并防止过度伸缩,也可以根据特定驱动因素更积极地进行伸缩来提高性能。如需确定工作负载的最佳利用率目标值,请使用以下策略:
在调整目标之前,请确定哪个指标会触发服务扩缩。请按以下步骤确定伸缩指标:
前往 Google Cloud 控制台中的 Metrics Explorer,查看 CPU 和并发利用率的监控图表。
搜索并选择
run.googleapis.com/scaling/recommended_instances指标,然后将汇总设置为未汇总,以查看按伸缩驱动因素分组的指标。
值最高的驱动因素是控制服务实例数量的驱动因素。如果您希望其他驱动程序优先运行,或者希望以更积极或更消极的方式进行扩缩,请调整相应驱动程序的利用率目标值。
逐步调整目标值,并在每次调整之间等待几分钟,以观察对效果的影响。
使用流量拆分功能,您可以先将一小部分流量导向单独的修订版本,测试新的伸缩目标,然后再将这些目标推广到整个服务。
低利用率目标简介
将利用率目标值降至最低值 0.1(10%)会显著改变服务的扩缩方式。
设置较低的利用率目标值的好处包括:
高服务可用性:您的服务会更早地扩容,从而保持较大的空闲容量缓冲,以应对突如其来的流量高峰,而不会出现延迟。
在实例数量较少时,伸缩速度更快:服务在达到高利用率瓶颈之前,伸缩的可靠性更高。
设置较低的利用率目标的缺点包括:
- 费用可能会增加:您运行的实例数量超过了当前负载所需的最低数量,导致账单金额增加。
- 更频繁的伸缩决策:在利用率较低的情况下,Cloud Run 的容忍度较低,不会等待太长时间才进行伸缩。
后续步骤
- 如需了解其他扩缩选项,请参阅手动扩缩。
- 若要管理 Cloud Run 服务的实例数上限,请参阅设置实例数上限。
- 若要管理每个实例同时处理的请求数量上限,请参阅设置并发。
- 要优化并发设置,请参阅关于调整并发设置的开发提示。
- 如需指定空闲实例继续运行,以便最大限度地缩短处理第一批请求的延迟时间或冷启动时间,请参阅使用
min-instance启用空闲实例。