实例数下限(服务)

本页面介绍如何使用“实例数下限”设置为您的服务启用空闲实例。

对于 Cloud Run 服务,Cloud Run 默认会根据传入请求数缩减实例数。但是,如果您的服务要求缩短延迟时间(尤其是在从零个活跃实例扩缩时),您可以通过指定要保持备用状态并准备处理请求的容器实例数下限来更改此默认行为。如需详细了解此优化,请参阅一般开发提示

Cloud Run 会移除未处理请求的实例(空闲)。设置最小实例数后,Cloud Run 至少会保持该最小数量的实例运行状态,即使它们未处理请求也是如此。如果超过 min-instances 的活跃实例未接收请求,则可能会变为空闲

例如,如果 min-instances10,且活跃实例数为 0,则空闲实例数为 10。当活跃实例数增加到 6 时,空闲实例数会减少到 4

在服务级层应用实例数下限与在修订版本级层应用实例数下限的对比

您可以在服务级层或修订版本级层配置实例数下限。Google 建议您在服务级层应用实例数下限,并避免结合使用服务级和修订版本级实例数下限。

如果您在修订版本级层应用实例数下限,则这些设置将在部署修订版本时生效。如果您在服务级层应用此功能,则无需部署新的修订版本设置即可生效。

标记的修订版本和服务级实例数下限

标记的修订版本已启动,但如果不属于流量分配,则不会计入服务级实例数下限。

结算

使用最少的实例功能保持运行的实例会产生结算费用。由于这些费用非常易于预测,因此 Google 建议您购买承诺使用折扣

实例数下限和始终分配的 CPU

如果您需要在请求之外使用 CPU,则可以将 CPU 配置为始终分配

重启的实例数下限

您可以随时重启最少的实例。

修订版本和实例数下限

如果在服务级层设置最小数量的实例,则系统会将这些实例分配给与流量分配成比例处理流量的所有修订版本。

如果在修订版本级层设置最小数量的实例,则每当在流量分配中引用了修订版本(即使为 0%)或修订版本分配了流量标记时,系统都会启动最小数量的实例。

设置和更新服务级实例数下限

默认情况下,容器实例会停用服务级实例数下限(设置为 0)。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 文件更改此默认值:

控制台

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

    转到 Cloud Run

  2. 如果要配置新服务,请点击创建服务。如果您要配置现有服务,请点击该服务以显示其详细信息面板,然后点击详情面板右上角实例数下限旁边的笔图标。

  3. 找到服务自动扩缩表单:

    图片

  4. 在“实例数下限”字段中,指定要保持备用状态以准备接收请求的容器实例数量。

  5. 点击创建(对于新服务)或部署(对于现有服务)。

命令行

使用以下命令为给定服务更新 service-min-instances

gcloud beta run services update SERVICE --service-min-instances MIN-VALUE

替换

  • SERVICE 替换为您的服务名称。
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的容器实例数量。指定 default 即可清除所有实例下限设置。

或者,您可以在部署期间使用以下命令设置 service-min-instances

gcloud beta run deploy --image IMAGE_URL --service-min-instances MIN-VALUE

替换

  • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的容器实例数量。指定 default 即可清除所有实例下限设置。

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 要查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 run.googleapis.com/minScale 特性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
        run.googleapis.com/minScale: 'MIN_INSTANCE'

    替换

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • MIN-INSTANCE 替换为要保持备用状态以准备接收请求的实例数量。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml

客户端库

如需通过代码更新服务的服务级实例数下限,请使用以下客户端库:

REST API

如需更新给定服务的服务级实例数下限,请向 Cloud Run Admin API service 端点发送 PATCH HTTP 请求。

例如,使用 curl

curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-X PATCH \
-d '{ "scaling": { "minInstanceCount": MIN-VALUE }}' \
https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.minInstanceCount

您需要在其中:

  • ACCESS_TOKEN 替换为具有更新服务的 IAM 权限的账号的有效访问令牌。例如,如果您已登录 gcloud,则可以使用 gcloud auth print-access-token 检索访问令牌。在 Cloud Run 容器实例中,您可以使用容器实例元数据服务器检索访问令牌。
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的容器实例数量。
  • SERVICE 替换为相应服务的名称。
  • REGION 替换为该服务的 Google Cloud 区域。
  • PROJECT-ID 替换为 Google Cloud 项目 ID。

查看服务级实例数下限

如需查看 Cloud Run 服务的当前服务级实例数下限设置,请按照以下所述操作:

控制台

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

    转到 Cloud Run

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

  3. 当前设置会显示在“服务详细信息”面板右上角的实例数下限旁边。

命令行

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到服务级实例数下限:的值。

设置和更新修订版本级实例数下限

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

默认情况下,容器实例关闭了 min-instances(设置为 0)。在以下情况下,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 文件更改此默认值:创建新服务部署新的修订版本

控制台

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

    转到 Cloud Run

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击容器标签页。

    图片

    • 在“实例数下限”字段中,指定要保持备用状态以准备接收请求的所需容器实例数量。
  5. 点击创建部署

命令行

您可以使用以下命令更新给定服务的 min-instance

gcloud run services update SERVICE --min-instances MIN-VALUE

替换

  • SERVICE 替换为您的服务名称。
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的所需容器实例数量。指定 default 即可清除所有实例下限设置。

您还可以在部署期间使用以下命令设置 min-instance

gcloud run deploy --image IMAGE_URL --min-instances MIN-VALUE

替换

  • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的所需容器实例数量。指定 default 即可清除所有实例下限设置。

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 要查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 autoscaling.knative.dev/minScale: 特性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/minScale: 'MIN-INSTANCE'
          name: REVISION

    替换

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • MIN-INSTANCE 替换为要保持备用状态以准备接收请求的所需实例数量。
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令将服务替换为其新配置:

    gcloud run services replace service.yaml

Terraform

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

以下 google_cloud_run_v2_service 资源在 template.scaling 下指定了 1 的实例数下限。将 1 替换为您自己的实例数下限。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-min-instances"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      # Min instances
      min_instance_count = 1
    }
  }
}

查看修订版本级实例数下限设置

如需查看 Cloud Run 服务的当前修订版本级实例数下限设置,请按照以下所述操作:

控制台

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

    转到 Cloud Run

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

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

  4. 在右侧的详细信息面板中,“容器”标签页下列出了修订版本级实例数下限设置。

命令行

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到修订版本级实例数下限设置。

同时使用服务级和修订版本级实例数下限或上限

下表显示了将服务级实例数下限和修订版本级实例数下限或上限值结合使用时的行为:

配置设置 行为
已同时设置服务级实例数下限和修订版本级实例数下限。 修订版本的有效值为修订版本级实例数下限和服务级实例数下限中的较大者。
已同时设置服务级实例数下限和修订版本级实例数上限。 修订版本的有效值为修订版本级实例数上限和服务级实例数下限中的较小值。

即使修订版本级实例数上限阻止服务达到为服务级实例数下限配置的实例数,也是如此。

将服务级实例数下限与流量拆分结合使用

如果您使用流量拆分,则系统会根据流量分配的比例在修订版本之间分配服务级实例数下限。例如,如果服务级实例数下限为 10,则按 50/50 的流量分配比例为每个修订版本分配 5 个服务级实例数下限。

下表显示了示例配置场景:

示例用例 配置示例 引发的行为
没有修订版本级设置 服务级实例数下限:10
  • 修订版本 A 的实例数下限:0
  • 修订版本 B 的实例数下限:0
  • 流量分配:60/40
修订版本 A 根据与流量分配成比例的服务级实例数下限接收 6 个实例。修订版本 B 根据与流量分配成比例的服务级实例数下限接收 4 个实例。
由于存在修订版本级实例数下限,接收的实例数超过了服务级实例数下限 服务级实例数下限:10
  • 修订版本 A 的实例数下限:6
  • 修订版本 B 的实例数下限:0
  • 流量分配:50/50
修订版本 A 根据修订版本级实例下限接收 6 个实例。修订版本 B 根据与流量分配成比例的服务级实例数下限接收 5 个实例。这超出了服务级实例数下限,符合预期。
由于存在修订版本级实例数上限,接收的实例数少于服务级实例数下限。 服务级实例数下限:10
  • 修订版本 A 的实例数下限:0
  • 修订版本 A 的实例数上限:3
  • 修订版本 B 的实例数下限:0
  • 流量分配:50/50
修订版本 A 根据由流量分配驱动的服务级实例数下限接收 3 个实例,但受限于其修订版本级实例数上限。
修订版本 B 根据与流量分配成比例的服务级实例数下限接收 5 个实例。这会导致 8 个服务级实例,因为 2 个实例会因为修订版本 A 的修订版本级实例数上限而丢失。
服务级实例数下限大于流分配中的修订版本数,并且有一小部分实例与流量分配成正比 服务级实例数下限:3
  • 修订版本 A 的实例数下限:0
  • 修订版本 B 的实例数下限:0
  • 修订版本 B 是服务配置流量部分中的第一个
  • 流量分配:50/50
修订版本 A 得到的实例数下限为 1,修订版本 B 得到的实例数下限为 2。服务的实例数为 3。