根据时间表进行扩缩


利用基于时间表的自动扩缩功能,您可以在预期的负载之前安排容量,从而提高工作负载的可用性。如果您在代管式实例组 (MIG) 上运行工作负载,则可以为周期性负载模式和一次性事件安排所需数量的虚拟机 (VM) 实例。如果您的工作负载需要很长时间才能初始化,并且您希望在预期负载高峰之前扩容,请使用扩缩时间表。

本文档介绍如何为现有 MIG 创建、列出、修改、停用、重新启用、删除扩缩时间表。如需详细了解 MIG 和自动扩缩,请参阅创建代管式实例组自动扩缩实例组

准备工作

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

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

    控制台

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

    gcloud

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

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

    Terraform

    如需从本地开发环境使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

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

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

      gcloud init

限制

扩缩时间表受所有自动扩缩器的限制以及以下限制的制约:

  • 每个 MIG 最多可以有 128 个扩缩时间表。如需取消此限制,请删除状态为 OBSOLETE 且您不打算再次运行的扩缩时间表。
  • 扩缩时间表的最短时长为 5 分钟。

创建扩缩时间表

您最多可以为每个 MIG 创建 128 个扩缩时间表。如需了解详情,请参阅扩缩时间表设置

以下说明介绍了如何为 MIG 创建扩缩时间表。

控制台

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

    转到“实例组”

  2. 点击列表中 MIG 的名称。

  3. 点击 修改

  4. 如果不存在自动扩缩配置:

    1. 自动扩缩下,点击配置自动扩缩
    2. 自动扩缩模式下,选择开启:在实例组中添加和移除实例以启用自动扩缩功能。如果您只想根据时间表扩缩 MIG,请在添加时间表后删除默认的 CPU 利用率指标。
  5. 对于您要添加的每个扩缩时间表:

    1. 展开自动扩缩时间表部分,点击管理时间表,然后点击创建时间表
    2. 创建扩缩时间表窗格中,输入名称
    3. (可选)输入说明
    4. 输入此时间表处于有效状态时提供的必需实例数下限
    5. 如果要使用默认界面指定扩缩时间表的开始时间和重复时间,或者如果要配置时间安排以采用更复杂的开始时间和重复时间,您可以使用 Cron 表达式
      • 默认界面
        1. 开始时间字段中,输入或点击 以选择开始时间。
        2. 重复周期字段中,选择时间表的重复频率。如果您选择每周每月,请使用其他下拉菜单选择时间表在一周或一月中的哪几天开始。
      • Cron 表达式
        1. 如需启用该功能,请点击使用 CRON 表达式开关。
        2. 输入 CRON 表达式
    6. 时区字段中,选择一个时区。

    7. 持续时间时间单位字段中,输入时长并选择相应的时间单位。

    8. 点击保存。此时扩缩时间表窗格会打开。

    9. 可选:您可以点击 创建时间表以创建其他扩缩时间表。

  6. 创建完时间表后,请点击完成

  7. 如需关闭实例组页面,请点击保存

gcloud

如需为没有现有自动扩缩政策的 MIG 添加扩缩时间表,请使用 gcloud compute instance-groups managed set-autoscaling 命令

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
    [--min-num-replicas=MIN_NUM_REPLICAS] \
    --max-num-replicas=MAX_NUM_REPLICAS \
    --set-schedule=SCHEDULE_NAME \
    --schedule-cron="CRON_EXPRESSION" \
    --schedule-duration-sec=DURATION \
    [--schedule-time-zone="TIME_ZONE"] \
    --schedule-min-required-replicas=MIN_REQ_REPLICAS \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

如需为具有现有自动扩缩政策的 MIG 添加扩缩时间表,请使用 gcloud compute instance-groups managed update-autoscaling 命令

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    [--min-num-replicas=MIN_NUM_REPLICAS] \
    [--max-num-replicas=MAX_NUM_REPLICAS] \
    --set-schedule=SCHEDULE_NAME \
    --schedule-cron="CRON_EXPRESSION" \
    --schedule-duration-sec=DURATION \
    [--schedule-time-zone="TIME_ZONE"] \
    --schedule-min-required-replicas=MIN_REQ_REPLICAS \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有自动扩缩政策的 MIG 的名称。
  • MIN_NUM_REPLICAS(可选):此 MIG 所需的实例数下限。Google 建议您将此值设置为没有扩缩时间表处于有效状态时所需的实例数下限。将此值设置为 0 并使用自动扩缩或每个组只有一个时间序列的 Cloud Monitoring 指标配置自动扩缩时,MIG 可以缩减为 0 个虚拟机。如果政策具有其他信号(需要来自单个虚拟机的数据(例如 CPU 利用率),则不能缩减为 0 个虚拟机。
  • MAX_NUM_REPLICAS:可为此 MIG 提供的实例数上限。对于具有现有自动扩缩政策的 MIG 是可选的。
  • SCHEDULE_NAME:新扩缩时间表的名称。
  • CRON_EXPRESSION:此时间表的开始时间和重复规则,采用 Cron 表达式格式。
  • DURATION:此时间表处于有效状态的时长(以秒为单位)。
  • TIME_ZONE(可选):时间表开始时间的 IANA 时区,例如 Europe/Paris。默认值为 UTC
  • MIN_REQ_REPLICAS:此时间表处于有效状态时提供的必需实例数下限
  • DESCRIPTION(可选):新扩缩时间表的说明。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

您可以创建运行一次或定期重复的时间表。

重复时间表

以下示例命令会创建一个重复的时间表。此时间表指定您希望 MIG 在每周一、周二、周三、周四、周五上午 8:30 到下午 5 点(世界协调时间 (UTC))包含至少 10 个虚拟机实例。该命令还使用 --min-num-replicas--max-num-replicas 标志将选定 MIG 的所有自动扩缩信号的实例数下限更新为 0,上限更新为 30。此命令假定您已有名为 example-mig 的 MIG,该 MIG 具有现有的自动扩缩政策。

gcloud compute instance-groups managed update-autoscaling example-mig \
    --min-num-replicas=0 \
    --max-num-replicas=30 \
    --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"

一次性时间表

以下示例命令会创建一个运行一次的时间表。此时间表指定您希望 MIG 在 2030 年 1 月 30 日(America/New_York 时区)全天包含至少 30 个虚拟机实例。此命令假定您已有名为 example-mig 的 MIG,该 MIG 位于 us-east1-b 中并具有现有的自动扩缩政策。

gcloud compute instance-groups managed update-autoscaling example-mig \
    --set-schedule=example-onetime-schedule \
    --schedule-cron="0 0 30 1 * 2030" \
    --schedule-duration-sec=86400 \
    --schedule-time-zone="America/New_York" \
    --schedule-min-required-replicas=30 \
    --schedule-description="Schedule a minimum of 30 VMs all day for January 30, 2030" \
    --zone=us-east1-b

Terraform

如需为 MIG 添加扩缩时间表,请使用 google_compute_autoscaler 资源。

resource "google_compute_autoscaler" "default" {
  provider = google-beta
  name     = "my-autoscaler"
  zone     = "us-central1-f"
  target   = google_compute_instance_group_manager.default.id

  autoscaling_policy {
    max_replicas    = 5
    min_replicas    = 1
    cooldown_period = 60

    scaling_schedules {
      name                  = "every-weekday-morning"
      description           = "Increase to 2 every weekday at 7AM for 12 hours."
      min_required_replicas = 2
      schedule              = "0 7 * * MON-FRI"
      time_zone             = "America/New_York"
      duration_sec          = 43200
    }
  }
}

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

REST

如需为 MIG 创建具有扩缩时间表的自动扩缩器,请使用autoscalers.insert方法对于区域级 MIG 或regionAutoscalers.insert方法对于地区级 MIG。

进行以下调用,为没有现有自动扩缩政策的可用区级 MIG 创建时间表:

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

{
  "name": "AUTOSCALER_NAME",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/MIG_NAME",
  "autoscalingPolicy": {
    "minNumReplicas": MIN_NUM_REPLICAS,
    "maxNumReplicas": MAX_NUM_REPLICAS,
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

如需为已有自动扩缩政策的 MIG 创建时间表,请使用 Beta 版 autoscalers.patch 方法(针对可用区级 MIG)或 Beta 版 regionAutoscalers.patch 方法(针对区域级 MIG)。

例如,进行以下调用,为已有自动扩缩政策的可用区级 MIG 创建时间表:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "minNumReplicas": MIN_NUM_REPLICAS,
    "maxNumReplicas": MAX_NUM_REPLICAS,
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。
  • MIN_NUM_REPLICAS(可选):此 MIG 所需的实例数下限。Google 建议您将此值设置为没有扩缩时间表处于有效状态时所需的实例数下限。将此值设置为 0 并使用自动扩缩或每个组只有一个时间序列的 Cloud Monitoring 指标配置自动扩缩时,MIG 可以缩减为 0 个虚拟机。当政策有其他信号(需要来自单个虚拟机的数据)(例如 CPU 利用率)时,无法缩减为 0 个虚拟机。
  • MAX_NUM_REPLICAS:可为此 MIG 提供的实例数上限。对于具有现有自动扩缩政策的 MIG 是可选的。
  • SCHEDULE_NAME:新扩缩时间表的名称。
  • MIN_REQ_REPLICAS:此时间表处于有效状态时提供的必需实例数下限
  • CRON_EXPRESSION:此时间表的开始时间和重复规则,采用 Cron 表达式格式。
  • TIME_ZONE(可选):时间表开始时间的 IANA 时区,例如 Europe/Paris。默认值为 UTC
  • DURATION:此时间表处于有效状态的时长(以秒为单位)。
  • DESCRIPTION(可选):新扩缩时间表的说明。

您可以创建运行一次或定期重复的时间表。

重复时间表

以下示例 API 调用会创建一个重复的时间表。此时间表指定您希望可用区级 MIG 在每周一、周二、周三、周四、周五上午 8:30 到下午 5 点(世界协调时间 (UTC))包含至少 10 个虚拟机实例。此 API 调用还使用 minNumReplicasmaxNumReplicas 字段将选定 MIG 的所有自动扩缩信号的实例数下限更新为 0,上限更新为 30。此 API 调用假定您已有一个名为 example-project 的项目,该项目有一个可用区级 MIG,该 MIG 位于 us-east1-b 中并且有一个名为 example-autoscaler 的自动扩缩器(具有现有的自动扩缩政策)。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "minNumReplicas": 0,
    "maxNumReplicas": 30,
    "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"
      }
    }
  }
}

如需将此示例用于区域级 MIG,请使用 regionAutoscalers.patch 方法发出类似的请求,并指定区域(而不是可用区)。

一次性时间表

以下示例 API 调用会创建一个运行一次的时间表。此时间表指定您希望可用区级 MIG 在 2030 年 1 月 30 日(America/New_York 时区)全天包含至少 30 个虚拟机实例。此 API 调用假定您已有一个名为 example-project 的项目,该项目有一个可用区级 MIG,该 MIG 位于 us-east1-b 中并且有一个名为 example-autoscaler 的自动扩缩器(具有现有的自动扩缩政策)。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "example-onetime-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"
      }
    }
  }
}

如需将此示例用于区域级 MIG,请使用 regionAutoscalers.patch 方法发出类似的请求,并指定区域(而不是可用区)。

多个时间表

以下示例 API 调用在一次调用中对两个时间表(workday-capacityjanuary-30-2030-schedule)使用 autoscalers.patch 方法。此 API 调用假定您已有一个名为 example-project 的项目,该项目有一个可用区级 MIG,该 MIG 位于 us-east1-b 中并且有一个名为 example-autoscaler 的自动扩缩器(具有现有的自动扩缩政策)。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "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"
      }
    }
  }
}

如需将此示例用于区域级 MIG,请使用 regionAutoscalers.patch 方法发出类似的请求,并指定区域(而不是可用区)。

创建时间表后,您可能需要等待几分钟才会看到其状态信息

列出扩缩时间表

您可以查看 MIG 的时间表列表。该列表会显示每个时间表的设置状态信息

控制台

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

    转到“实例组”

  2. 点击列表中 MIG 的名称。

  3. 点击 修改

  4. 您可以在自动扩缩时间表下查看时间表的总数。点击管理时间表,以显示现有扩缩时间表的列表。

完成后,您可以点击完成关闭该列表。

gcloud

如需获取 MIG 的详细信息,包括其扩缩时间表的配置和状态,请使用 gcloud compute instance-groups managed describe 命令

gcloud compute instance-groups managed describe MIG_NAME \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有自动扩缩政策的 MIG 的名称。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

输出中列出了 MIG 的任何扩缩时间表,如以下示例所示。

...
autoscalingPolicy:
  ...
  maxNumReplicas: 30
  minNumReplicas: 0
  ...
  scalingSchedules:
    example-onetime-schedule:
      description: Schedule a minimum of 30 VMs all day for January 30, 2030
      disabled: false
      durationSec: 86400
      minRequiredReplicas: 30
      schedule: 0 0 30 1 * 2030
      timeZone: America/New_York
    workday-capacity:
      description: Have at least 10 VMs every Monday through Friday from 8:30
        AM to 5 PM UTC
      disabled: false
      durationSec: 30600
      minRequiredReplicas: 10
      schedule: 30 8 * * Mon-Fri
      timeZone: UTC
...
scheduledScalingStatus:
    example-onetime-schedule:
        state: READY
        nextStartTime: '2030-01-30T00:00:00.000-05:00'
        lastStartTime: ''
    workday-capacity:
        state: READY
        nextStartTime: '2020-11-04T08:30:00.000-00:00'
        lastStartTime: '2020-11-03T08:30:00.000-00:00'
...

REST

如需获取自动扩缩器的详细信息(包括其扩缩时间表的配置和状态),请使用 autoscalers.get 方法(针对可用区级 MIG)或 regionAutoscalers.get 方法(针对区域级 MIG)。

例如,进行以下调用,以列出已有自动扩缩政策的可用区级 MIG 的时间表:

GET https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。

输出中列出了 MIG 的任何扩缩时间表,如以下示例所示。

{
  ...
  "autoscalingPolicy": {
    ...
    "minNumReplicas": 0,
    "maxNumReplicas": 30,
    ...
    "scalingSchedules": {
      "example-onetime-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",
        "disabled": false
      },
      "workday-capacity": {
        "minRequiredReplicas": 10,
        "schedule": "30 8 * * Mon-Fri",
        "timeZone": "",
        "durationSec": 30600,
        "description": "Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC",
        "disabled": false
      },
      ...
    }
  },
  "scheduledScalingStatus": {
    "example-onetime-schedule": {
      "state": "READY",
      "nextStartTime": "2030-01-30T00:00:00.000-05:00",
      "lastStartTime": ''
    },
    "workday-capacity": {
      "state": "READY",
      "nextStartTime": "2020-11-04T08:30:00.000",
      "lastStartTime": "2020-11-03T08:30:00.000"
    },
    ...
  },
...
}

修改扩缩时间表

您可以修改现有扩缩时间表,以更改其中的任何设置(时间表名称除外)。您还可以停用或重新启用扩缩时间表

控制台

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

    转到“实例组”

  2. 点击列表中 MIG 的名称。

  3. 点击 修改

  4. 您可以在自动扩缩时间表下查看时间表的总数。点击管理时间表,以显示现有扩缩时间表的列表。

  5. 选中您要修改的扩缩时间表对应的复选框。

  6. 扩缩时间表窗格顶部,点击 修改

  7. 在新的修改扩缩时间表窗格中,修改您要更改的字段。如需详细了解每个字段,请参阅创建扩缩时间表

  8. 完成后,点击保存

您可能需要等待几分钟,更改才能生效。通过点击扩缩时间表窗格顶部的 刷新,您可以监控时间表的状态。

完成后,您可以点击完成关闭该列表。

gcloud

如需更新现有扩缩时间表,请使用 gcloud compute instance-groups managed update-autoscaling 命令。使用 --update-schedule 标志可指示要更新的时间表的名称。根据更改的需要添加其他标志。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --update-schedule=SCHEDULE_NAME \
    [--schedule-cron="CRON_EXPRESSION"] \
    [--schedule-duration-sec=DURATION] \
    [--schedule-time-zone="TIME_ZONE"] \
    [--schedule-min-required-replicas=MIN_REQ_REPLICAS] \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有扩缩时间表的 MIG 的名称。
  • SCHEDULE_NAME:现有扩缩时间表的名称。
  • CRON_EXPRESSION(可选):此时间表的新开始时间和重复规则,采用 Cron 表达式格式。
  • DURATION(可选):此时间表处于有效状态的新时长(以秒为单位)。
  • TIME_ZONE(可选):时间表开始时间的新 IANA 时区,例如 Europe/Paris。默认值为 UTC
  • MIN_REQ_REPLICAS:此时间表处于有效状态时提供的必需实例数新下限
  • DESCRIPTION(可选):扩缩时间表的新说明。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

REST

如需更新 MIG 的现有扩缩时间表,请使用 autoscalers.patch 方法(针对可用区级 MIG)或 regionAutoscalers.patch 方法(针对区域级 MIG)。

例如,进行以下调用,为已有自动扩缩政策的可用区级 MIG 修改时间表:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。
  • SCHEDULE_NAME:现有扩缩时间表的名称。
  • MIN_REQ_REPLICAS:此时间表处于有效状态时提供的必需实例数新下限
  • CRON_EXPRESSION(可选):此时间表的新开始时间和重复规则,采用 Cron 表达式格式。
  • TIME_ZONE(可选):时间表开始时间的新 IANA 时区,例如 Europe/Paris。默认值为 UTC
  • DURATION(可选):此时间表处于有效状态的新时长(以秒为单位)。
  • DESCRIPTION(可选):扩缩时间表的新说明。

停用和重新启用扩缩时间表

扩缩时间表默认处于启用状态。如果您想阻止时间表处于有效状态但想保存其配置,请停用时间表。如果您想再次使用已停用的时间表,请重新启用它。

如果您不需要存储时间表,或者已达到此 MIG 的 128 个时间表限制,请删除时间表。如果要为 MIG 停用自动扩缩功能,请关闭自动扩缩功能

控制台

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

    转到“实例组”

  2. 点击列表中 MIG 的名称。

  3. 点击 修改

  4. 您可以在自动扩缩时间表下查看时间表的总数。点击管理时间表,以显示现有扩缩时间表的列表。

  5. 选中要停用或启用的扩缩时间表对应的复选框。

  6. 停用或启用选定的时间表。

    • 如需停用所选的时间表,请执行以下操作:
      1. 扩缩时间表窗格顶部,点击 停用
      2. 在新的停用时间表对话框中,点击停用
    • 如需启用选定的时间表,请执行以下操作:
      1. 扩缩时间表窗格顶部,点击 启用
      2. 在新的启用时间表对话框中,点击启用

您可能需要等待几分钟,更改才能生效。通过点击扩缩时间表窗格顶部的 刷新,您可以监控时间表的状态。

完成后,您可以点击完成关闭该列表。

gcloud

如需停用或重新启用扩缩时间表,请使用 gcloud compute instance-groups managed update-autoscaling 命令

停用扩缩时间表

如需停用扩缩时间表,请使用 --disable-schedule 标志。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --disable-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有扩缩时间表的 MIG 的名称。
  • SCHEDULE_NAME:您要停用的扩缩时间表的名称。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

重新启用扩缩时间表

如需重新启用扩缩时间表,请使用 --enable-schedule 标志。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --enable-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有扩缩时间表的 MIG 的名称。
  • SCHEDULE_NAME:您要重新启用的扩缩时间表的名称。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

REST

如需停用或重新启用 MIG 的扩缩时间表,请使用 autoscalers.patch 方法(针对可用区级 MIG)或 regionAutoscalers.patch 方法(针对区域级 MIG)。

停用扩缩时间表

对于您要停用的每个扩缩时间表,请将 disabled 字段设置为 true。例如,进行以下调用,以停用已有自动扩缩政策的可用区级 MIG 的时间表:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "disabled": true
      },
      ...
    }
  }
}

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。
  • SCHEDULE_NAME:您要停用的扩缩时间表的名称。

重新启用扩缩时间表

对于您要重新启用的每个扩缩时间表,请将 disabled 字段设置为 false。例如,进行以下调用,以重新启用已有自动扩缩政策的可用区级 MIG 的时间表:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "disabled": false
      },
      ...
    }
  }
}

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。
  • SCHEDULE_NAME:您要重新启用的扩缩时间表的名称。

删除扩缩时间表

通过删除扩缩时间表将其从 MIG 中移除。删除不再需要的时间表,例如具有 OBSOLETE 状态的时间表。

自动扩缩政策必须始终至少有一个扩缩信号。如果不存在其他自动扩缩信号,则无法在不删除整个自动扩缩政策的情况下删除所有扩缩时间表。如果要删除所有扩缩时间表,但保留自动扩缩政策,则必须至少添加一个扩缩信号才能删除所有时间表。

如果您想阻止时间表处于有效状态并将其保存来供以后使用,请停用时间表。如果要删除 MIG 的自动扩缩配置,请删除自动扩缩器

控制台

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

    转到“实例组”

  2. 点击列表中 MIG 的名称。

  3. 点击 修改

  4. 您可以在自动扩缩时间表下查看时间表的总数。点击管理时间表,以显示现有扩缩时间表的列表。

  5. 选中您要删除的扩缩时间表对应的复选框。

  6. 扩缩时间表窗格顶部,点击 删除

  7. 在新的删除时间表对话框中,点击删除

您可能需要等待几分钟,更改才能生效。通过点击扩缩时间表窗格顶部的 刷新,您可以监控时间表的状态。

完成后,您可以点击完成关闭该列表。

gcloud

如需删除扩缩时间表,请使用带有 --remove-schedule 标志的 gcloud compute instance-groups managed update-autoscaling 命令

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --remove-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

替换以下内容:

  • MIG_NAME:具有现有扩缩时间表的 MIG 的名称。
  • SCHEDULE_NAME:您要删除的扩缩时间表的名称。
  • ZONEREGION(可选):您的 MIG 所在的可用区或区域。

REST

如需删除 MIG 的扩缩时间表,请使用 autoscalers.patch 方法(针对可用区级 MIG)或 regionAutoscalers.patch 方法(针对区域级 MIG)。对于您要删除的每个扩缩时间表,请将时间表配置设置为 null

例如,进行以下调用,以删除已有自动扩缩政策的可用区级 MIG 的时间表:

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": null
      ...
    }
  }
}

替换以下内容:

  • PROJECT:您的项目 ID
  • ZONE:您的 MIG 所在的可用区。
  • AUTOSCALER_NAME:现有自动扩缩器的名称。此名称通常与 MIG 的名称相同。
  • SCHEDULE_NAME:您要删除的扩缩时间表的名称。

概念

本部分介绍与创建和使用扩缩时间表相关的概念,包括时间表设置以及有关其工作原理的详细信息。

扩缩时间表设置

创建和修改 MIG 的扩缩时间表时,每个扩缩时间表都包含以下设置:

  • 必需实例数下限:此扩缩时间表处于有效状态时,MIG 中所需的虚拟机数量。

    此时间表处于有效状态时,MIG 至少拥有此数量的虚拟机,但可能拥有更多虚拟机,具体取决于其他自动扩缩设置。此外,MIG 的大小始终受 MIG 自动扩缩设置中配置的实例数上下限的限制。

  • 时区:基于位置的 IANA 时区,用于解释时间表的开始时间。

    可用值列表IANA 时区数据库定义,例如 Europe/Paris。如果未提供时区,则默认使用 UTC。 一些 IANA 时区遵循夏令时。如需了解夏令时如何影响扩缩时间表,请参阅夏令时

  • 时长:您希望扩缩时间表处于有效状态的时长。

    扩缩时间表的有效状态会从其开始时间持续到配置的时长。最短时长为 5 分钟。在此期间,自动扩缩器会扩缩 MIG,使其至少具有时间表的必需实例数所定义的虚拟机数量。在指定时长之后,如果不再需要当前容量,则自动扩缩器会在默认的 10 分钟稳定期后开始移除虚拟机实例,并遵循任何配置的缩容控制机制

    扩缩时间表是双向的。虚拟机会在您指定的停止时间移除,并且组大小会缩小到您设置的最小组大小,除非您指定了其他自动扩缩信号。

使用 Google Cloud CLI 或 REST 时,您必须使用 Cron 表达式配置扩缩时间表的开始时间和重复周期。但在使用 Google Cloud 控制台时,您可以使用 cron 表达式或以下设置来配置时间表的开始时间和重复周期:

  • 开始时间:您希望扩缩时间表生效的时间。

    开始时,每当 MIG 大小小于时间表所需的实例时,扩缩时间表就会开始创建虚拟机。设置开始时间,以便为新虚拟机留出足够的时间来执行启动和初始化操作。例如,如果您的工作负载从虚拟机创建后需要 10 分钟才能开始提供服务,则将开始时间设置为比虚拟机就绪所需时间早 10 分钟。

  • 重复:扩缩时间表重复的条件及频率,如以下选项定义:

    • 一次:仅在选定日期开始的一次性时间表。
    • 每天:每天开始的重复时间表。
    • 每周:在每周选定日期(例如,每周一到每周五)开始的重复时间表。
    • 每月:在每月选定日期(例如,每月第一天)开始的重复时间表。当月的最后几天(第 29 天到第 31 天)仅在这些日期所出现的月份内有效。

Cron 表达式

您可以使用 Cron 表达式配置扩缩时间表的开始时间和重复规则。Cron 是基于时间的作业调度器,最初用于类似 Unix 的计算机操作系统。

语法

Cron 表达式是一个由五个或六个字段(由空格分隔)组成的字符串。下表定义了 Cron 表达式的字段以及每个字段的可能值。

分钟 小时 日期 周几 年(可选)
0-59 0-23 1-31 1-12(1 月 - 12 月)

其中 1=Jan2=Feb、……12=Dec
0-6(周日 - 周六)或 1-7(周一 - 周日)

其中 0=Sun1=Mon、……6=Sat7=Sun
2000-2036

或每年 (*)(如果未提供)

除了使用这些值以外,Cron 表达式中的每个字段还可以使用特殊字符:

特殊字符 含义 示例
* 任意 如果日期字段、周几字段和年字段(如果包含)都设置为 *,则时间表从每天开始。
- 范围 如果周几字段设置为 1-5Mon-Fri,则时间表从每周一到周五开始。
, 列表 如果月字段设置为 5,7,9May,Jul,Sep,则时间表从每年 5 月、7 月、9 月开始。
/ 步进 如果月字段设置为 */3,则时间表在第一个月以及之后的每 3 个月开始:1 月、4 月、7 月、10 月。

在编写 Cron 表达式时,请考虑以下要点:

  • 空格用于分隔 Cron 表达式的字段。请勿在使用特殊字符的字段中添加额外的空格。
  • 如果您同时指定了周几和日期(这两个字段都没有设置为 *),则时间表会使用这些值的并集(而不是交集)。例如,时间表 0 8 1 * Mon 会从每周一和每月第一天的上午 8:00 开始。该时间表不会仅从既是周一又是当月第一天的上午 8:00 开始。
  • 您可以在 Cron 表达式的每个字段中使用零个或更多特殊字符。例如,如果您希望时间表从每月(5 月除外)开始,则可以将月字段设置为 1-4,6-12(没有空格的两个范围的列表)。
  • 使用范围 (-) 时,不能将 0-7Sun-Sun 用于周几字段。如需指定每周几,请改用 *0-61-7Sun-SatMon-Sun
  • 使用步进 (/) 时,请注意 Cron 表达式是无状态的,因此步进有时可能并不均匀。例如,如果您希望时间表每 6 小时运行一次,则可以将小时字段设置为 */6,这相当于列出 6 的每个有效倍数 (0,6,12,18)。这些步进是均匀的,因为 24 小时正好可以分成 4 个 6 小时的时段。但是,如果您将小时字段设置为 */7,则时间表并不总是以 7 小时为间隔开始。相反,*/7 相当于列出 7 的每个有效倍数 (0,7,14,21),这意味着时间表可能会在零点、上午 7 点、下午 2 点、晚上 9 点开始。

重复时间表与一次性时间表

根据您编写 Cron 表达式的方式,您的时间表可能会运行一次或定期重复。如需创建仅运行一次的时间表,您必须指定年字段。例如,Cron 表达式 0 0 30 1 * 2030 将时间表配置为仅在 2030 年 1 月 30 日零点开始运行一次。如需创建重复的时间表,请使用特殊字符来描述该时间表的重复时间。例如,Cron 表达式 30 8 * * Mon-Fri 将时间表配置为从每周一、周二、周三、周四、周五上午 8:30 开始。

时间表状态信息

列出您的扩缩时间表以查看其状态。扩缩时间表具有以下状态信息:

  • 状态 (state):扩缩时间表的当前状态,由以下状态之一表示:
    • 就绪 (READY):此时间表已准备就绪,但尚未生效。自动扩缩器正在等待此时间表的下一个时间。
    • 有效 (ACTIVE):此时间表目前有效。自动扩缩器正在尝试为此 MIG 至少提供此时间表指定的必需实例。
    • 已过时 (OBSOLETE):此时间表已过期;它将不会再次生效。自动扩缩器会忽略此时间表,因为将来不会出现相应的时间。
    • 已停用 (DISABLED):此时间表无法生效,因为它已被手动停用了。自动扩缩器会忽略此时间表,直到其重新启用为止。
  • 上次发生的时间 (lastStartTime):扩缩时间表上次生效时的时间戳。这是上次生效的实际日期和时间。例如,如果您停用了每天运行的扩缩时间表(开始时间为上午 10 点,时长为 2 小时),并且在今天上午 11 点重新启用该时间表,则 lastStartTime 为今天上午 11 点。
  • 下次发生的时间 (nextStartTime):此时间表被设置为下次生效时的时间戳。

重叠时间表

根据开始时间、重复规则、时长、时区,两个或更多扩缩时间表可能会重叠。如果有多个时间表处于有效状态,则自动扩缩器将使用所有有效扩缩时间表中所需的最大虚拟机实例数。这有助于确保始终有足够的容量来满足任何有效时间表的需求。例如,如果您设置每天从上午 8 点到上午 10 点需要至少 10 个虚拟机的时间表,但同时还设置了全天运行一次并且至少需要 20 个虚拟机的时间表,则自动扩缩器会在该天将 MIG 扩缩到至少 20 个虚拟机。如果您有周期性的容量需求但有时需要更多容量来处理一次性事件,此机制会非常有用。此行为可让您安排容量,而无需担心它被具有较小虚拟机需求的其他时间表所替换。

此外,自动扩缩器始终提供任何有效自动扩缩信号所需的虚拟机实例数上限。如需了解详情,请参阅使用具有多个信号的自动扩缩政策

夏令时

夏令时 (DST) 的详细信息会根据扩缩时间表的基于位置的 IANA 时区而有所不同。如果时间表的时区遵循 DST,则时间表的开始时间会自动调整为与所选地理位置的时间保持同步。例如,如果您相应地使用东部夏令时间或东部标准时间针对时区 America/New_York 创建从每天上午 7 点开始的扩缩时间表,则此时间表在纽约时间上午 7 点开始。

扩缩时间表始终在您配置的整个持续时间内运行,但当 DST 时间发生变化时,扩缩时间表的开始时间和结束时间可能会略有不同。这是因为 DST 的时间变化有过渡期,即在 DST 第一天跳过以及在 DST 最后一天出现两次的时段。例如,如果时区的 DST 从凌晨 2 点开始,并且有 1 个小时的过渡期,那么时钟会从凌晨 1:59:59 更改为凌晨 3 点,因此凌晨 2 点到凌晨 2:59:59 的时段会被跳过。如果该时区的 DST 结束于凌晨 2 点,那么时钟会从凌晨 2:59:59 更改为凌晨 2 点,因此凌晨 2 点到凌晨 2:59:59 的时段会重复。以下陈述假设时间表的时区使用 1 小时的 DST 过渡期。

在 DST 第一天(跳过 1 小时),扩缩时间表具有以下变化:

  • 在跳过的 1 小时内保持活跃的时间表仍在其整个持续时间内运行,但为了弥补跳过的 1 小时,这些时间表的结束时间会比没有 DST 过渡期的日期中的结束时间晚 1 小时。通常,时间表的结束时间是时间表的开始时间和持续时间之和。但是,如果 DST 在时间表处于活跃状态的情况下跳过 1 小时,并且持续时间和开始时间保持不变,则该时间表的结束时间比开始时间和持续时间之和多 1 小时。
  • 配置为在跳过的时间段内开始的时间表也会比没有 DST 过渡期的日期当天的开始时间晚 1 小时开始。

在 DST 的最后一天(重复 1 小时),扩缩时间表具有以下变化:

  • 在重复的 1 小时内保持活跃的时间表仍在其整个持续时间内运行,但为了弥补重复的 1 小时,这些时间表的结束时间会比没有 DST 过渡期的日期中的结束时间早 1 小时。通常,时间表的结束时间是时间表的开始时间和持续时间之和。但是,如果 DST 在时间表处于活跃状态的情况下重复 1 小时,并且持续时间和开始时间保持不变,则该时间表的结束时间比开始时间和持续时间之和少 1 小时。
  • 配置为在过渡期间开始的时间表会在配置时间开始,但在第二次(重复的)开始时间不会重新开始。

使用 DST 的大多数时区都使用 1 小时的过渡期。但是,如果时间表的时区使用其他过渡期(例如 Australia/Lord_Howe 时区,该时区使用 30 分钟的过渡期),则会出现相同的行为。只需将 1 小时替换为相关的 DST 过渡时间即可。

后续步骤