为服务配置自定义伸缩控制

默认情况下,Cloud Run 会优化性能,将 CPU 和并发的利用率目标值设为 60%,并自动扩缩实例数量以处理所有传入请求。不过,在某些应用场景下,您可能希望能够配置要使用的伸缩因素(例如仅 CPU),并为利用率设置自定义目标。

Cloud Run 提供了伸缩控制功能,让您可以更好地掌控服务的伸缩行为,并根据自己的需求做出明智的决策来伸缩工作负载。您可以配置以下自定义利用率目标值:

  • 基于 CPU 的伸缩的目标利用率
  • 基于并发的伸缩的目标利用率

借助伸缩控制功能,您可以优化服务成本并提高可预测性。如需详细了解 Cloud Run 服务的默认自动扩缩行为,请参阅 Cloud Run 服务中的实例自动扩缩简介。

配置限制

以下限制适用于自定义伸缩目标:

缩放驱动程序 默认 % 可配置的最低百分比 可配置的最大百分比
CPU target utilization 60% 10% 90%
Concurrency target utilization 60% 10% 95%

配置自定义目标值

通过在配置限制内配置特定的 CPU 和并发利用率目标,定义自定义利用率目标,以优化成本或提升工作负载的性能。

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

即使您配置了自定义并发目标或停用了基于 CPU 的伸缩,自适应并发调整 (ACT) 仍会保持有效。如需了解详情,请参阅实例自动扩缩简介。

您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 来配置伸缩控制。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面:

    转到 Cloud Run

  2. 如果您要配置新服务,请点击部署容器以显示创建服务页面。

  3. 如果您要配置现有服务,请点击该服务以打开其服务详情页面,然后点击扩缩标签页。

  4. 找到服务伸缩部分。确保已选择自动缩放。展开自定义自动扩缩因子部分,以配置以下利用率目标值:

    • 如需配置目标 CPU 利用率,请点击 CPU 利用率,然后输入介于 10 到 90 之间的值。

    • 如需配置目标并发利用率,请点击并发请求利用率,然后输入介于 10 到 95 之间的值。

    • 点击每项利用率配置下方的完成。

  5. 对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。

gcloud

运行 gcloud run services update 命令,更新给定修订版本的目标 CPU 利用率和目标并发利用率值。

  • 如需更新目标 CPU 利用率,请运行以下命令:

    gcloud run services update SERVICE --scaling-cpu-target=CPU_TARGET

    替换以下内容:

    • SERVICE:服务的名称。

    • CPU_TARGET:CPU 利用率目标值。指定一个介于 0.1 到 0.90 之间的值。您最多只能配置小数点后两位。

  • 如需更新目标并发利用率,请运行以下命令:

    gcloud run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET

    替换以下内容:

    • SERVICE:服务的名称。

    • CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。

  • 如需同时更新目标 CPU 和并发利用率,请运行以下命令:

    gcloud run services update SERVICE --scaling-cpu-target=CPU_TARGET \
    --scaling-concurrency-target=CONCURRENCY_TARGET

    替换以下内容:

    • SERVICE:服务的名称。
    • CPU_TARGET:CPU 利用率目标值。指定一个介于 0.1 到 0.90 之间的值。您最多只能配置小数点后两位。
    • CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 如需更新目标 CPU 和并发利用率,请添加 run.googleapis.com/scaling-cpu-target 和 run.googleapis.com/scaling-concurrency-target 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      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.90 之间的值。您最多只能配置小数点后两位。
    • CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

    gcloud run services replace 命令默认使用 service.yaml 文件(如果存在)。

Terraform

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

将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源:
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  template {
    scaling {
      cpu_utilization         = CPU_TARGET
      concurrency_utilization = CONCURRENCY_TARGET
    }
    containers {
      image = "IMAGE_URL"
    }
  }
}

替换以下内容:

  • SERVICE:服务的名称。
  • REGION: Google Cloud 区域,例如 europe-west1。
  • CPU_TARGET:CPU 利用率目标值。指定一个介于 0.1 到 0.90 之间的值。您最多只能配置小数点后两位。
  • CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
  • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 格式

停用伸缩控制机制

您可以停用 CPU 利用率目标或并发利用率目标,但不能同时停用这两者。必须始终有一个伸缩驱动处于活跃状态。如需选择不使用伸缩控制功能,请恢复默认利用率值,而不是停用这些值。停用伸缩驱动程序后,Cloud Run 在制定伸缩决策时会忽略相应指标。

您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 停用伸缩控制。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面:

    转到 Cloud Run

  2. 点击相应服务以打开其服务详情页面,然后点击扩缩标签页。

  3. 找到服务伸缩部分。确保已选择自动缩放。展开自定义自动扩缩因子部分:

    • 如需仅按 CPU 进行扩缩,请点击并发请求利用率旁边的删除图标,然后输入目标 CPU 利用率值(如果该值缺失)。

    • 如需仅按并发进行扩缩,请点击 CPU 利用率旁边的删除图标,然后输入目标并发利用率的值(如果该值缺失)。

    • 点击每项利用率配置下方的完成。

  4. 对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。

gcloud

您可以运行 gcloud run services update 命令来停用目标 CPU 利用率或目标并发利用率。

  • 如需仅按 CPU 进行扩缩,请运行以下命令来停用并发目标:

    gcloud run services update SERVICE --scaling-concurrency-target=disabled

    将 SERVICE 替换为服务的名称。

  • 如需仅按并发数进行扩缩,请运行以下命令来停用 CPU 目标:

    gcloud run services update SERVICE --scaling-cpu-target=disabled

    将 SERVICE 替换为服务的名称。

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 如需仅按 CPU 进行扩缩,请将 run.googleapis.com/scaling-concurrency-target 属性设置为 disabled,以停用并发数目标值:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-concurrency-target: disabled

    将 SERVICE 替换为服务的名称。

  3. 如需仅按并发性进行扩缩,请将 run.googleapis.com/scaling-cpu-target 属性设置为 disabled,以停用 CPU 目标:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: disabled

    将 SERVICE 替换为服务的名称。

  4. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

    gcloud run services replace 命令默认使用 service.yaml 文件(如果存在)。

Terraform

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

将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源:
  • 如需仅按 CPU 进行扩缩,请将 concurrency_utilization 设置为 0,以停用并发数目标值:

    resource "google_cloud_run_v2_service" "default" {
      name     = "SERVICE"
      location = "REGION"
    
      template {
        scaling {
          cpu_utilization         = CPU_TARGET
          concurrency_utilization = 0
        }
        containers {
          image = "IMAGE_URL"
        }
      }
    }
    

    替换以下内容:

    • SERVICE:服务的名称。
    • REGION: Google Cloud 区域,例如 europe-west1。
    • CPU_TARGET:CPU 利用率目标值。指定一个介于 0.1 到 0.90 之间的值。您最多只能配置小数点后两位。
    • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 格式
  • 如需仅按并发进行扩缩,请将 cpu_utilization 设置为 0,以停用 CPU 目标:

    resource "google_cloud_run_v2_service" "default" {
      name     = "SERVICE"
      location = "REGION"
    
      template {
        scaling {
          cpu_utilization         = 0
          concurrency_utilization = CONCURRENCY_TARGET
        }
        containers {
          image = "IMAGE_URL"
        }
      }
    }
    

    替换以下内容:

    • SERVICE:服务的名称。
    • REGION: Google Cloud 区域,例如 europe-west1。
    • CONCURRENCY_TARGET:并发利用率的目标值。指定一个介于 `0.1` 到 `0.95` 之间的值。您最多只能配置小数点后两位。
    • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 格式

恢复为默认值

将目标 CPU 或目标并发利用率值恢复为默认值后,Cloud Run 会使用 60% 的默认利用率目标,而不是您的自定义目标。您可以在部署新修订版本时使用 Google Cloud 控制台、gcloud CLI、YAML 或 Terraform 将伸缩控制恢复为默认值。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面:

    转到 Cloud Run

  2. 点击相应服务以打开其服务详情页面,然后点击扩缩标签页。

  3. 找到服务伸缩部分。确保已选择自动伸缩。展开自定义自动扩缩因子部分,以配置以下利用率目标值:

    • 如果移除了 CPU 利用率和并发请求利用率目标值,请点击添加信号以重新添加每个目标值。

    • 将 CPU 利用率和并发请求利用率的值设置为 60。

    • 点击每项利用率配置下方的完成。

  4. 对于新服务,请点击创建。点击查看差异并重新部署,然后点击部署更改(对于现有服务)。

gcloud

运行 gcloud run services update 命令,将目标 CPU 利用率和目标并发利用率恢复为默认值。

  • 如需将目标 CPU 利用率恢复为默认值,请运行以下命令:

    gcloud run services update SERVICE --scaling-cpu-target=default

    将 SERVICE 替换为服务的名称。

  • 如需将目标并发利用率恢复为默认值,请运行以下命令:

    gcloud run services update SERVICE --scaling-concurrency-target=default

    将 SERVICE 替换为服务的名称。

  • 如需将目标 CPU 利用率和目标并发都恢复为默认值,请运行以下命令:

    gcloud run services update SERVICE --scaling-cpu-target=default \
    --scaling-concurrency-target=default

    将 SERVICE 替换为服务的名称。

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 如需将 CPU 和并发利用率恢复为默认目标值,请从 YAML 文件中移除 run.googleapis.com/scaling-cpu-target 和 run.googleapis.com/scaling-concurrency-target 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          # Remove the scaling target annotations to restore defaults
        ...

    将 SERVICE 替换为服务的名称。

  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

    gcloud run services replace 命令默认使用 service.yaml 文件(如果存在)。

Terraform

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

将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源:

如需将 CPU 和并发利用率恢复为默认目标值,请从 Terraform 配置中的 scaling 块中移除 cpu_utilization 和 concurrency_utilization 属性:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  template {
    scaling {
      # Remove the scaling target attributes to restore defaults
    }
    containers {
      image = "IMAGE_URL"
    }
  }
}

替换以下内容:

  • SERVICE:服务的名称。
  • REGION: Google Cloud 区域,例如 europe-west1。
  • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 格式

查看伸缩配置

您可以使用 Google Cloud 控制台或 gcloud CLI 查看伸缩配置。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面:

    转到 Cloud Run

  2. 点击相应服务以打开服务详情面板。

  3. 点击缩放标签页以查看伸缩设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE

    将 SERVICE 替换为服务的名称。

  2. 在返回的配置中找到目标 CPU 利用率:和目标并发利用率:设置的值。

最佳做法

您可以减少实例数量来优化费用并防止过度伸缩,也可以根据特定驱动因素更积极地进行伸缩来提高性能。如需确定工作负载的最佳利用率目标值,请使用以下策略:

  • 在调整目标之前,请确定是哪个指标触发了服务的扩缩。请按以下步骤确定伸缩指标:

    1. 前往 Google Cloud 控制台中的 Metrics Explorer,查看伸缩驱动程序的监控图表。

    2. 搜索并选择 run.googleapis.com/scaling/recommended_instances 指标,然后将汇总设置为未汇总,以查看按伸缩驱动程序分组的指标。

    值最高的驱动程序是控制服务实例计数的驱动程序。如果您希望其他驱动程序优先运行,或者希望以更积极或更消极的方式进行扩缩,请调整相应驱动程序的利用率目标值。

    如果自适应并发调优 (ACT) 是伸缩驱动因素,则表示单个实例的 1 秒 CPU 利用率超过 90%,并且 Cloud Run 正在动态限制请求并发,以保护您的服务。为了缓解 ACT 对伸缩的影响,请考虑增加 CPU 分配或调整并发设置。如需了解详情,请参阅实例自动扩缩简介。

  • 逐步调整目标值,并在每次调整之间等待几分钟,以观察对效果的影响。

  • 使用流量拆分,您可以先将一小部分流量定向到单独的修订版本,测试新的伸缩目标,然后再将这些目标推广到整个服务。

低利用率目标简介

将利用率目标值降至最低值 0.1 (10%) 会显著改变服务的扩缩方式。

设置较低的利用率目标值的好处包括:

  • 高服务可用性:您的服务会更早地扩容,保持较大的闲置容量缓冲,以便在不影响延迟的情况下应对突如其来的流量高峰。

  • 在实例数量较少时更快地伸缩:服务在达到高利用率瓶颈之前,可以更可靠地伸缩。

设置较低的利用率目标的缺点包括:

  • 费用可能会增加:您运行的实例数量超过了当前负载所需的最低数量,导致账单金额更高。
  • 更频繁的伸缩决策:在利用率较低时,Cloud Run 的容忍度较低,不会等待太长时间才进行伸缩。

后续步骤