设置实例数下限(服务)

您可以通过设置实例数下限来避免服务容器启动缓慢并缩短服务延迟时间。本页介绍了如何使用“实例数下限”设置为您的服务启用空闲实例。

对于 Cloud Run 服务,Cloud Run 默认会根据传入请求数缩减实例数。

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

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

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

请注意,如果服务最近未传送流量,“活跃实例”指标可能会指示没有活跃实例,即使您为实例数下限指定了一个或多个实例也是如此。

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

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

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

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

标记的修订版本已启动,但只有在属于流量分配时,才会计入服务级实例数下限。

结算

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

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

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

重启的实例数下限

您可以随时重启最小数量的实例。

修订版本和实例数下限

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

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

所需的角色

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

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

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

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

控制台

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

    转到 Cloud Run

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

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

    图片

    • 在标为实例数下限字段中,指定要保持备用状态以准备接收请求的容器实例数量。
  4. 点击创建(对于新服务)或部署(对于现有服务)。

gcloud

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

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

您需要进行如下替换:

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

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

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

您需要进行如下替换

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

YAML

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

    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/minScale: 'MIN_INSTANCE'

    您需要进行如下替换:

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

    gcloud 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. 当前设置会显示在“服务详细信息”面板右上角的实例数下限旁边。

gcloud

  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. 点击创建部署

gcloud

您可以使用以下命令更新给定服务的 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。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • MIN-VALUE 替换为要保持备用状态以准备接收请求的容器实例数量。指定 default 即可清除任何实例数下限设置。

YAML

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

    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"

  deletion_protection = false # set to "true" in production

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

gcloud

  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。