结算设置(服务)

Cloud Run 服务中有两种结算设置:

  • 基于请求的结算方式(默认):仅当 Cloud Run 实例在请求处理、容器启动和容器关闭期间处理请求时,系统才会对实例收费。如需了解详情,请参阅实例生命周期。此设置以前称为仅在请求处理期间分配 CPU

  • 基于实例的结算方式:Cloud Run 实例会针对实例的整个生命周期收费,即使没有传入请求也是如此。基于实例的结算方式有助于运行短期有效的后台任务和其他异步处理任务。此设置以前称为始终分配 CPU

如果您选择按请求付费,则只在实例处理请求时,您才需要按请求付费。如果您选择基于实例的结算方式,则需要为实例的整个生命周期付费。如需了解详情,请参阅 Cloud Run 价格表

Recommender 会自动查看 Cloud Run 服务在过去一个月内接收的流量,如果发现“按实例计费”更便宜,则会建议将“按请求计费”改为“按实例计费”。

CPU 分配影响

选择结算设置会影响 CPU 的分配方式。

  • 采用基于请求的结算方式时,系统仅在处理请求期间分配 CPU。
  • 采用基于实例的结算方式时,系统会为整个容器实例生命周期分配 CPU。

如何选择适当的结算设置

根据多种因素为您的使用场景选择适当的结算设置,例如流量模式、后台执行和费用,下面的部分将对每种因素进行介绍。

流量模式注意事项

  • 如果传入的流量是零星、突发或峰值,则建议按请求结算
  • 如果传入流量稳定且缓慢变化,则建议按实例结算

后台执行注意事项

选择按实例结算后,即使在请求处理之外,系统也会分配 CPU,让您可以在返回响应后执行短期有效的后台任务和其他异步处理工作。例如:

  • 利用可能假定能够在后台运行的 OpenTelemetry 等功能来监控代理。
  • 使用 Go 的 Goroutine、Node.js 异步、Java 线程和 Kotlin 协同程序。
  • 使用依赖于内置调度/后台功能的应用框架。

空闲实例(包括通过实例数下限保持备用状态的实例)可以随时关停。如果您需要在容器终止之前完成未完成的任务,则可以捕获 SIGTERM 以在实例停止之前留出 10 秒的宽限期。

请考虑使用 Cloud Tasks 来执行异步任务。Cloud Tasks 会自动重试失败的任务,并且支持最长 30 分钟的运行时间。

费用注意事项

如果您使用的是基于请求的结算方式,在以下情况下,基于实例的结算方式可能更经济实惠:

  • 您的 Cloud Run 服务以相当稳定的速率处理大量当前请求。
  • 在查看实例计数指标时,您不会看到许多“空闲”的实例。

您可以使用价格计算器来估算费用差异。

自动扩缩注意事项

Cloud Run 会autoscales容器实例数。

对于设置为按请求计费的服务,Cloud Run 仅在处理请求期间根据 CPU 利用率自动扩缩实例数。

对于设置为基于实例的结算方式的服务,Cloud Run 会根据容器实例的整个生命周期的 CPU 利用率自动伸缩实例数,但从零开始扩容除外,从零开始扩容时仅使用请求。

基于实例的结算注意事项

即使结算设置设为基于实例的结算,Cloud Run 自动扩缩也仍然有效,如果不需要使用实例来处理传入的流量或请求之外的当前 CPU 利用率,则可能会终止实例。实例在处理请求后绝不会保持空闲状态超过 15 分钟,除非它使用实例数下限保持活跃状态。

将基于实例的结算方式与实例数下限数值搭配使用,可以让一定数量的实例保持运行并可以完全访问 CPU 资源,从而实现后台处理。使用此模式时,即使服务在任何请求之外使用 CPU,Cloud Run 也会应用实例自动扩缩

如果您使用健康检查探测,则必须为每个探测使用基于实例的计费方式。如需了解结算详情,请参阅容器健康检查探测

所需的角色

如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 服务与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

设置和更新结算信息

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

如果您选择基于实例的结算方式,则必须至少指定 512MiB 的内存

创建新服务部署新修订版本时,您可以使用 Google Cloud 控制台、gcloud CLI 或 YAML 文件更改结算设置:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请填写初始服务设置页面。

  4. 选择结算下的结算设置。选择按请求结算后,系统只会在实例处理请求期间收费。为实例选择基于实例的结算方式,系统会针对实例的整个生命周期收费。

  5. 点击创建部署

gcloud

您可以更新结算设置。如需为给定服务设置基于实例的结算方式,请执行以下操作:

gcloud run services update SERVICE --no-cpu-throttling 

SERVICE 替换为服务的名称。

如需设置按请求结算,请执行以下操作:

gcloud run services update SERVICE --cpu-throttling 

您还可以在部署期间设置结算设置。如需将结算设置设为按实例结算,请执行以下操作:

gcloud run deploy --image IMAGE_URL --no-cpu-throttling

如需将结算设置设为按请求结算,请执行以下操作:

gcloud run deploy --image IMAGE_URL --cpu-throttling

IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 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 服务的名称
    • BOOLEANtrue 搭配使用以设置按请求计费,或与 false 搭配使用以设置按实例计费。
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

将以下内容添加到 Terraform 配置中的 template.containers.resources 下的 google_cloud_run_v2_service 资源中。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-cpu-allocation"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        # If true, garbage-collect CPU when once a request finishes
        cpu_idle = false
      }
    }
  }
}

查看结算设置

如需查看 Cloud Run 服务的当前结算设置,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,常规标签页下列出了结算设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到“结算”设置。