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

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

Cloud Run 提供伸缩控制机制,让您对服务的伸缩行为拥有更多自主权,并根据您的要求就伸缩工作负载做出明智的决策。您可以选择保留默认利用率目标,以获得增强的伸缩行为,也可以配置以下自定义利用率目标

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

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

配置限制

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

扩缩驱动程序 默认 % 可配置的最小 % 可配置的最大 %
CPU target utilization 60% 10% 95%
Concurrency target utilization 60% 10% 95%

选择启用增强的伸缩行为

Cloud Run 的自动扩缩器会密切响应您配置的目标,即使对于实例数量较少的服务也是如此。建议您选择启用此功能以提高伸缩可预测性,即使您打算为 CPU 和并发保留 60% 的默认利用率目标也是如此。

如需选择启用,您可以在部署新修订版本时使用 gcloud CLI 或 YAML。

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

gcloud

如需设置给定修订版本的 目标 CPU 利用率目标并发利用率值,请 运行以下 gcloud beta run services update 命令:

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

SERVICE 替换为服务的名称。

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 添加 run.googleapis.com/scaling-cpu-targetrun.googleapis.com/scaling-concurrency-target 属性。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: '0.6'
            run.googleapis.com/scaling-concurrency-target: '0.6'

    SERVICE 替换为服务的名称。

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

    gcloud run services replace service.yaml

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

配置自定义目标

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

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

您可以在 部署新修订版本时使用 gcloud CLI 或 YAML 配置伸缩控制机制。

gcloud

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

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

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

    替换以下内容:

    • SERVICE:服务的名称。

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

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

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

    替换以下内容:

    • SERVICE:服务的名称。

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

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

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

    替换以下内容:

    • SERVICE:服务的名称。
    • CPU_TARGET:CPU 利用率的目标值。指定一个介于 0.1 到 0.95 之间的值。您只能配置小数点后最多两位数。
    • 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-targetrun.googleapis.com/scaling-concurrency-target 属性:

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

    gcloud run services replace service.yaml

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

停用伸缩控制机制

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

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

gcloud

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

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

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

    SERVICE 替换为服务的名称。

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

    gcloud beta 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:
      annotations:
        run.googleapis.com/launch-stage: BETA
      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:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: disabled

    SERVICE 替换为服务的名称。

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

    gcloud run services replace service.yaml

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

恢复为默认值

将目标 CPU 或目标并发利用率值恢复为默认值后,您将选择停用伸缩控制机制功能。您可以在部署新修订版本时使用 gcloud CLI 或 YAML 将伸缩 控制机制恢复为默认值。

gcloud

如需将 目标 CPU 利用率目标并发利用率 恢复为默认值,请通过 运行 gcloud beta run services update 命令。

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

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

    SERVICE 替换为服务的名称。

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

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

    SERVICE 替换为服务的名称。

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

    gcloud beta 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-targetrun.googleapis.com/scaling-concurrency-target 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          # Remove the scaling target annotations to restore defaults
        ...

    SERVICE 替换为服务的名称。

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

    gcloud run services replace service.yaml

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

查看伸缩配置

您可以使用 gcloud CLI 或 YAML 查看伸缩配置。

控制台

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

    转到 Cloud Run

  2. 点击您的服务以打开服务详情 面板。

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

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE

    SERVICE 替换为服务的名称。

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

最佳做法

您可以减少实例数量来优化费用并防止过度伸缩,也可以通过更积极地响应特定驱动程序来提升性能。如需确定工作负载的最佳利用率目标,请使用以下策略:

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

    1. 前往 Metrics Explorer 控制台,查看 CPU 和 并发利用率的监控图表。 Google Cloud

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

    值最高的驱动程序是控制服务实例数量的驱动程序。如果您希望其他驱动程序优先,或者希望更积极或更不积极地扩缩,请调整该特定驱动程序的利用率目标。

  • 逐步调整目标,并在调整之间等待几分钟,以观察对性能的影响。

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

关于低利用率目标

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

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

  • 服务可用性高:您的服务会更早扩容,保持 大量空闲容量缓冲区,以处理突发的流量高峰,而不会出现 延迟。

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

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

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

后续步骤