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


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

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

准备工作

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

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

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

      gcloud init
    2. 设置默认区域和可用区

    REST

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

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

      gcloud init

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

自动扩缩器处理多个信号的方式如下:计算每个信号的建议虚拟机数量,然后选择在 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。如需了解详情,请参阅自定义指标

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

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