默认情况下,系统仅在请求处理、容器启动和关停期间为 Cloud Run 容器实例分配 CPU。(请参阅容器实例生命周期)。您可以更改此行为,以便 CPU 始终会分配并且可用,即使没有传入请求也是如此。设置“始终分配 CPU”有助于运行短期有效的后台任务和其他异步处理任务。
请注意,即使始终分配 CPU,Cloud Run 自动扩缩也仍然有效,如果不需要处理传入的流量,则可能会终止容器实例。实例在处理请求后绝不会保持空闲状态超过 15 分钟,除非它使用实例数下限保持活跃状态。
将“始终分配 CPU”与实例数下限数值搭配使用,可以让一定数量的容器实例保持运行并可以完全访问 CPU 资源,从而能够运行类似于拉取 Pub/Sub 消息的后台处理使用场景。
价格影响
如果您选择仅在请求处理期间分配 CPU,则需要按请求付费,并且只能在容器实例处理请求时付费。 如果您选择“始终分配 CPU”设置,则需要为容器实例的整个生命周期付费。如需了解详情,请参阅 Cloud Run 价格表。
如何选择合适的 CPU 分配方案
根据多种因素为您的使用场景选择适当的 CPU 分配,例如流量模式、后台执行和费用,下面的部分将对每种因素进行介绍。
流量模式注意事项
- 如果传入的流量是零星、突发或峰值,则建议仅在请求处理期间分配 CPU。
- 如果传入流量稳定且缓慢变化,则建议始终分配 CPU。
后台执行注意事项
选择始终分配 CPU 后,您可以在返回响应后执行短期有效的后台任务和其他异步处理工作。例如:
- 利用可能假定能够在后台运行的 OpenTelemetry 等功能来监控代理。
- 使用 Go 的 Goroutine、Node.js 异步、Java 线程和 Kotlin 协同程序。
- 使用依赖于内置调度/后台功能的应用框架。
空闲实例(包括通过实例数下限保持备用状态的实例)可以随时关停。如果您需要在容器终止之前完成未完成的任务,则可以捕获 SIGTERM 以在容器实例停止之前留出 10 秒的宽限期。
请考虑使用 Cloud Tasks 来执行异步任务。Cloud Tasks 会自动重试失败的任务,并且支持最长 30 分钟的运行时间。
费用注意事项
如果您目前使用的是仅在处理请求期间分配 CPU,那么在以下情况下,始终分配 CPU 可能更经济实惠:
- 您的 Cloud Run 服务以相当稳定的速率处理大量当前请求。
- 在查看容器实例计数指标时,您不会看到许多“空闲”的容器实例。
您可以使用价格计算器来估算费用差异。
设置和更新 CPU 分配
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
如果您要选择“始终分配 CPU”这一选项,则必须至少指定 512MiB 的内存。
默认情况下,对于每个容器实例而言,只会在处理请求期间分配 CPU。您可以在创建新服务或部署新修订版本时使用控制台、gcloud 命令行或 YAML 文件更改此值:
控制台
如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果要配置新服务,请根据需要填写初始服务设置页面,然后点击下一步 > 容器、变量和 Secret、连接、安全性转到服务配置页面。
点击容器标签页。
在“CPU 分配和价格”下选择所需的 CPU 分配。针对实例选择仅在处理请求期间分配 CPU后,实例只会在收到请求时才会收到 CPU。选择始终分配 CPU 为容器实例的整个生命周期分配 CPU。
点击创建或部署。
命令行
您可以更新 CPU 分配。如需为给定服务设置始终分配 CPU,请运行以下命令:
gcloud run services update SERVICE --no-cpu-throttling
将 SERVICE 替换为服务的名称。
如需设置仅在处理请求期间分配 CPU,请执行以下操作:
gcloud run services update SERVICE --cpu-throttling
您还可以设置在部署期间分配 CPU。如需设置始终分配 CPU,请执行以下操作:
gcloud run deploy --image IMAGE_URL --no-cpu-throttling
如需设置仅在处理请求期间分配 CPU,请执行以下操作:
gcloud run deploy --image IMAGE_URL --cpu-throttling
将 IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
。
YAML
您可以使用 gcloud run services describe --format export
命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud run services replace
命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。
要查看和下载配置,请运行以下命令:
gcloud run services describe SERVICE --format export > service.yaml
更新
cpu
特性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/cpu-throttling: 'BOOLEAN' name: REVISION
替换
- 将 SERVICE 替换为您的 Cloud Run 服务的名称
- 将 BOOLEAN 替换为
true
(以设置仅在处理请求期间分配 CPU)或false
(以设置始终分配 CPU)。 - 将 REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
- 开头为
SERVICE-
- 仅包含小写字母、数字和
-
- 不以
-
结尾 - 不超过 63 个字符
- 开头为
使用以下命令将服务替换为其新配置:
gcloud run services replace service.yaml
查看 CPU 分配设置
如需查看 Cloud Run 服务的当前 CPU 分配设置,请按照以下所述操作:
控制台
点击您感兴趣的服务以打开“服务详细信息”页面。
点击修订版本标签页。
在右侧的详细信息面板中,“容器”标签页下列出了 CPU 分配设置。
命令行
使用以下命令:
gcloud run services describe SERVICE
在返回的配置中找到 CPU 分配设置。