使用具有多个信号的自动扩缩政策


创建具有多个信号的自动扩缩政策后,自动扩缩器会根据在代管式实例组 (MIG) 中提供最多虚拟机实例的信号进行扩缩。这可确保始终有足够的虚拟机来处理应用工作负载,并且可让您扩缩具有多个可能瓶颈的应用。

如需详细了解不同类型的自动扩缩信号,请参阅自动扩缩政策

准备工作

  • 了解自动扩缩器基础知识
  • 如果您尚未设置身份验证,请进行设置。 身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

自动扩缩器如何处理多个信号

自动扩缩器处理多个信号的方式如下:计算每个信号的建议虚拟机数量,然后选择在 MIG 中保留最多虚拟机的信号。

自动扩缩器可以为每个指标类型处理一个信号,Cloud Monitoring 指标和扩缩时间表除外。您最多可以为 Cloud Monitoring 指标选择 5 个自动扩缩信号,并为每个 MIG 创建最多 128 个时间表。例如,您可以创建一个自动扩缩器,该自动扩缩器最多使用 1 个 CPU 利用率信号、1 个负载均衡信号、5 个自定义指标信号,以及 128 个扩缩时间表。

例如,您可以定义使用以下所有信号的自动扩缩器:

  • cpuUtilization,目标为 0.8
  • loadBalancingUtilization,目标为 0.6
  • metric1 的 customMetricUtilization,目标为 1000
  • metric2 的 customMetricUtilization,目标为 2000
  • scalingSchedules
    • 每个周六和周日,从零点开始的 24 小时内至少有 6 个虚拟机
    • 每个周一到周五,从上午 9:00 开始的 8 小时内至少有 15 个虚拟机

在此示例中,假设自动扩缩器为在测量时包含 10 个虚拟机的 MIG 测量出以下利用率平均值:

  • CPU 利用率为 0.5
  • 负载均衡利用率为 0.4
  • metric1 为 1100
  • metric2 为 2700

使用上述值,自动扩缩器根据每个信号计算建议的虚拟机数量:

  • 根据 CPU 利用率计算的结果为 7 个虚拟机
  • 根据负载均衡利用率计算的结果为 7 个虚拟机
  • 根据 metric1 计算的结果为 11 个虚拟机
  • 根据 metric2 计算的结果为 14 个虚拟机
  • 根据第一个扩缩时间表,每个周六和周日,全天有 6 个虚拟机
  • 根据第二个扩缩时间表,每个周一到周五,从上午 9:00 到下午 5:00 有 15 个虚拟机

自动扩缩器会选择计算出 MIG 中虚拟机数量最多的信号,并将 MIG 的建议大小设置为该值。在本例中,如果当前第二个时间表有效,自动扩缩器会将 MIG 大小调整为 15 个虚拟机,否则调整为 14 个虚拟机。

创建具有多个信号的自动扩缩器

根据您使用的是 Google Cloud 控制台、gcloud CLI 还是 REST,创建具有多个信号的自动扩缩器的方式略有不同。

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

  2. 点击列表中 MIG 的名称。 然后,点击修改

  3. 自动扩缩模式下的修改页面上,从下拉菜单中选择开启:在实例组中添加和移除实例,以开启自动扩缩。

  4. 实例数下限下,输入您希望此 MIG 具有的虚拟机数量下限。无论其自动扩缩信号是什么,此 MIG 的大小下限始终保持不变。

  5. 实例数上限下,输入您希望此 MIG 具有的虚拟机数量上限。无论其自动扩缩信号生成的建议大小是多少,此 MIG 的大小都不会超出该上限。

  6. 对于要添加的每个基于指标的自动扩缩信号,请在自动扩缩指标下,点击添加指标

    • 如需根据平均 CPU 利用率创建自动扩缩信号,请在指标类型下拉菜单中选择 CPU 利用率。然后,输入目标 CPU 利用率,然后点击完成。如需了解详情,请参阅根据 CPU 利用率进行扩缩
    • 如需根据 HTTP 负载均衡服务容量创建自动扩缩信号,请在指标类型下拉菜单中选择 HTTP 负载均衡利用率。然后,输入目标 HTTP 负载均衡利用率并点击完成。如需了解详情,请参阅根据负载均衡服务容量进行扩缩
    • 如需根据 Cloud Monitoring 指标创建自动扩缩信号,请在指标类型下拉菜单中选择 Cloud Monitoring 指标。然后,填写剩余字段并点击完成。如需了解详情,请参阅根据 Cloud Monitoring 指标进行扩缩
  7. 对于要添加的每个基于时间表的自动扩缩信号,请展开自动扩缩时间表部分,点击管理时间表,然后点击创建时间表

  8. 在新的创建扩缩时间表窗格中,填写必填字段,然后点击保存。然后,在扩缩时间表窗格中,点击完成。如需了解详情,请参阅根据时间表进行扩缩

  9. 初始化期下,输入应用初始化需要的秒数,初始化期是为了让虚拟机完成初始化,然后自动扩缩器才会将其使用情况数据视为可靠。如需了解详情,请参阅初始化期

  10. 可选:如需启用缩容控制机制,请点击缩容控制机制,然后选择启用缩容控制机制复选框。如需了解详情,请参阅缩容控制机制

  11. 点击保存

gcloud

如需创建具有多个信号的自动扩缩器,请使用 set-autoscaling 命令。使用相应的命令行标志传入多个信号规范。

例如,以下命令会创建一个自动扩缩器,该自动扩缩器使用 CPU 利用率、负载均衡服务容量、两个自定义指标和一个扩缩时间表。--max-num-replicas--min-num-replicas 标志限制了 MIG 大小的上限和下限。

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
   --target-cpu-utilization=0.8 \
   --target-load-balancing-utilization=0.6 \
   --custom-metric-utilization metric=PATH_TO_CUSTOM_METRIC_1,utilization-target=1000.0,utilization-target-type=GAUGE \
   --custom-metric-utilization metric=PATH_TO_CUSTOM_METRIC_2,utilization-target=2000.0,utilization-target-type=DELTA_PER_SECOND \
   --set-schedule=workday-capacity \
   --schedule-cron="30 8 * * Mon-Fri" \
   --schedule-duration-sec=30600 \
   --schedule-min-required-replicas=10 \
   --schedule-description="Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC" \
   --min-num-replicas=1 \
   --max-num-replicas=50

请替换以下内容:

  • MIG_NAME:MIG 的名称。
  • PATH_TO_CUSTOM_METRIC_1PATH_TO_CUSTOM_METRIC_2:可选:自定义指标的路径,其格式类似于 custom.cloudmonitoring.googleapis.com/path/to/metric1custom.cloudmonitoring.googleapis.com/path/to/metric2。如需了解详情,请参阅自定义指标

除自定义指标标志外,在每个 gcloud 命令中最多只能为每个指标类型传入一个标志。对于自定义指标,您可以通过重复使用 --custom-metric-utilization 标志,在单个命令中提供多个自定义指标。

如需详细了解如何为每种类型的自动扩缩信号配置标志,请参阅以下页面:

REST

如需创建自动扩缩器,请使用 autoscalers.insert 方法(针对可用区级 MIG)或 regionAutoscalers.insert 方法(针对区域级 MIG)。

例如,以下请求会创建一个使用 CPU 利用率、负载均衡服务容量、两个自定义指标和两个扩缩时间表的自动扩缩器。maxNumReplicasminNumReplicas 字段限制了 MIG 大小的上限和下限。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers

{
  "autoscalingPolicy" : {
    "cpuUtilization":{
      "utilizationTarget": 0.8
    },
    "loadBalancingUtilization":{
      "utilizationTarget": 0.6
    },
    "customMetricUtilizations":[
      {
        "metric": "PATH_TO_CUSTOM_METRIC_1",
        "utilizationTarget": 1000,
        "utilizationTargetType":"GAUGE"
      },
      {
        "metric": "PATH_TO_CUSTOM_METRIC_2",
        "utilizationTarget": 2000,
        "utilizationTargetType": "DELTA_PER_SECOND"
      }
    ],
    "scalingSchedules": {
      "workday-capacity": {
        "minRequiredReplicas": 10,
        "schedule": "30 8 * * Mon-Fri",
        "durationSec": 30600,
        "description": "Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC"
      },
      "january-30-2030-schedule": {
        "minRequiredReplicas": 30,
        "schedule": "0 0 30 1 * 2030",
        "timeZone": "America/New_York",
        "durationSec": 86400,
        "description": "Schedule a minimum of 30 VMs all day for January 30, 2030"
      }
    },
    "maxNumReplicas": 50,
    "minNumReplicas": 1
  },
  "target": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroupManagers/MIG_NAME",
  "name": "MIG_NAME"
}

请替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • MIG_NAME:MIG 的名称。
  • PATH_TO_CUSTOM_METRIC_1PATH_TO_CUSTOM_METRIC_2:可选:自定义指标的路径,其格式类似于 custom.cloudmonitoring.googleapis.com/path/to/metric1custom.cloudmonitoring.googleapis.com/path/to/metric2。如需了解详情,请参阅自定义指标

如上例所示,您可以在同一请求中提供多个自定义指标和扩缩时间表。

如需详细了解如何为每种类型的自动扩缩信号配置字段,请参阅以下页面: