使用多个配置文件进行自动缩放

针对一周中特定某天或某个特定日期和时间调整资源,可以降低成本,同时仍能在需要时提供所需的容量。

可以在自动缩放中使用多个配置文件在不同时间以不同的方式进行缩放。 例如,如果企业在周末未处于活动状态,请创建定期配置文件,以在星期六和星期日缩减资源。 如果黑色星期五是忙碌的一天,请创建一个配置文件,以在这一天自动横向扩展资源。

本文介绍自动缩放中的不同概况以及它们的使用方法。

配置文件类型和评估顺序

有三种类型的配置文件:

  • 默认配置文件: 自动创建且不依赖于计划。 默认配置文件是不能删除的。 当没有其他与当前日期和时间匹配的配置文件时,会使用它。
  • 定期配置文件: 对特定时间范围有效,并针对所选的星期几重复。
  • 固定日期和时间配置文件: 对特定日期的时间范围有效。

可以在自动缩放设置中创建一个或多个配置文件。 每次自动缩放服务运行时,都会按以下顺序评估配置文件:

固定日期 → 定期 → 默认

如果配置文件的日期和时间设置与当前时间匹配,自动缩放将应用该配置文件的规则和容量限制。 仅使用第一个适用的配置文件。

示例:合并默认配置档案和重复使用的配置档案

以下示例显示了自动扩展设置,其中包括默认配置文件和定期配置文件。

屏幕截图,显示具有默认和定期配置文件或缩放条件的自动缩放设置。

注意

在前面的示例中,在上午 3 点之后的星期一,循环配置文件将不再被使用。 如果实例计数小于 3,则自动缩放会调整为新的最小值 3。 自动缩放将继续使用此配置文件,并在星期一晚上 8 点之前根据 CPU 使用百分比进行缩放。 在所有其他情况下,将根据请求数根据默认配置文件进行缩放。 星期一晚上 8 点后,自动缩放将切换到默认配置文件。 例如,如果当时的实例数为 12,则自动缩减到 10,这是默认配置文件允许的最大数目。

直接在重复使用的配置档案之间切换

根据配置文件的开始时间自动调整配置文件之间的转换。 给定配置文件的结束时间决定于下一个配置文件的开始时间。

在Azure门户中,结束时间字段将成为默认配置文件的下一个开始时间。 你不能为一个配置文件的结束和下一个配置文件的开始指定相同的时间。 门户将结束时间强制调整为比下一个简介的开始时间早一分钟。 这一分钟内,默认配置会变为活动状态。 如果不希望默认配置文件在重复配置文件之间被激活,请将结束时间字段留空。

提示

若要使用门户设置多个连续配置文件,请将结束时间留为空白。 当下一个配置文件变为活动状态时,当前配置文件将被停止使用。 仅当要还原为默认配置文件时,才应指定结束时间。 仅支持通过门户和 ARM 模板创建无结束时间的定期配置文件。

配置工作日和周末缩放

以下示例定义虚拟机规模集的工作日和周末定期配置文件。 每个配置文件保持活动状态,直到下一个配置文件开始。

注意

  • 工作日配置文件从星期一 04:00 开始,并在周六 00:01 周末配置文件开始时结束。 它具有默认容量和最小容量 3,最大容量为 20,以及 入站流 指标的横向缩减和横向扩展规则。
  • 周末配置文件从星期六 00:01 开始,在工作日配置文件于星期一 04:00 开始时结束。 它的默认容量和最小容量均为 1,最大容量为 3,且没有度量规则。
  • 这两个配置文件都使用 E. Europe Standard Time 时区。 工作日规则使用 1 分钟时间粒度、10 分钟的评估窗口和 5 分钟的冷却时间。 当每个实例的平均值大于 100 时,它们横向扩展 1;当其小于 60 时,缩减 1。
  • 目标虚拟机规模集和自动缩放设置必须已存在。 CLI 和 PowerShell 示例会替换完整的配置资料集合。 将示例调整为现有的自动缩放设置时,请包括您想要保留的所有配置文件,并保留其通知和其他所需配置。

以下Azure CLI示例使用az monitor autoscale update命令。

# User input variables - update values in <AngleBrackets>
resourceGroupName="<ResourceGroupName>"
vmssName="<VirtualMachineScaleSetName>"
autoscaleName="<AutoscaleSettingName>"

# Get the subscription ID from the current Azure CLI context
subscriptionId=$(az account show --query id --output tsv)

# Build virtual machine scale set resource ID
vmssPath="/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
vmssProvider="Microsoft.Compute/virtualMachineScaleSets/$vmssName"
vmssResourceId="$vmssPath/providers/$vmssProvider"

# Build the profiles as JSON
profiles=$(jq -n --arg vmssResourceId "$vmssResourceId" '
  def scaleRule($operator; $threshold; $direction): {
    scaleAction: {
      direction: $direction,
      type: "ChangeCount",
      value: "1",
      cooldown: "PT5M"
    },
    metricTrigger: {
      metricName: "Inbound Flows",
      metricNamespace: "microsoft.compute/virtualmachinescalesets",
      metricResourceUri: $vmssResourceId,
      operator: $operator,
      statistic: "Average",
      threshold: $threshold,
      timeAggregation: "Average",
      timeGrain: "PT1M",
      timeWindow: "PT10M",
      dimensions: [],
      dividePerInstance: true
    }
  };
  [
    {
      name: "Weekday profile",
      capacity: {minimum: "3", maximum: "20", default: "3"},
      rules: [
        scaleRule("GreaterThan"; 100; "Increase"),
        scaleRule("LessThan"; 60; "Decrease")
      ],
      recurrence: {
        frequency: "Week",
        schedule: {
          timeZone: "E. Europe Standard Time",
          days: ["Monday"],
          hours: [4],
          minutes: [0]
        }
      }
    },
    {
      name: "Weekend profile",
      capacity: {minimum: "1", maximum: "3", default: "1"},
      rules: [],
      recurrence: {
        frequency: "Week",
        schedule: {
          timeZone: "E. Europe Standard Time",
          days: ["Saturday"],
          hours: [0],
          minutes: [1]
        }
      }
    }
  ]
')
profileSet="profiles=$profiles"

# Update the autoscale profiles
az monitor autoscale update \
  --name "$autoscaleName" \
  --resource-group "$resourceGroupName" \
  --set "$profileSet"

注意

Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.chinacloudapi.cn。

后续步骤