你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Azure CLI 自动缩放虚拟机规模集

创建规模集时,可定义想运行的 VM 实例数。 若应用程序需要更改,可自动增加或减少 VM 实例数。 通过自动缩放功能,可随客户需求的改变而进行调整,或在应用的整个生命周期内响应应用程序性能更改。 本教程介绍如何执行下列操作:

  • 对规模集使用自动缩放
  • 创建和使用自动缩放规则
  • 模拟 CPU 负载以触发自动缩放规则
  • 在需求更改时监视自动缩放操作

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

先决条件

  • 本教程需要 Azure CLI 2.0.32 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。

创建规模集

使用 az group create 创建资源组。

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export REGION="WestUS2"
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
az group create --name $MY_RESOURCE_GROUP_NAME --___location $REGION

现在,使用 az vmss create 创建虚拟机规模集。 以下示例创建实例计数为 2 的规模集,生成 SSH 密钥(如果不存在),并使用有效的映像 Ubuntu2204

export MY_SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $MY_SCALE_SET_NAME \
  --image Ubuntu2204 \
  --orchestration-mode Flexible \
  --instance-count 2 \
  --admin-username azureuser \
  --generate-ssh-keys

定义自动缩放配置文件

若要在规模集上启用自动缩放,首先要定义自动缩放配置文件。 此配置文件定义默认、最小和最大规模集容量。 这些限制可让你通过不继续创建 VM 实例来控制成本,并可使用缩小事件中保留的最小数量的实例均衡可接受的性能。 使用 az monitor autoscale create 创建自动缩放配置文件。 以下示例设置 2 个 VM 实例的默认容量和最小容量,最大容量为 10:

az monitor autoscale create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --resource $MY_SCALE_SET_NAME \
  --resource-type Microsoft.Compute/virtualMachineScaleSets \
  --name autoscale \
  --min-count 2 \
  --max-count 10 \
  --count 2

创建规则,以便自动横向扩展

如果应用程序需求提高,规模集中 VM 实例上的负载将会增大。 如果增加的负载是一致的,而不仅仅是一个简短的需求,则可以配置自动缩放规则以增加 VM 实例数。 创建这些实例并部署应用程序时,规模集将开始通过负载均衡器向其分发流量。 可以控制要监视的指标、负载必须满足给定阈值的时长以及要添加的 VM 实例数。

使用 az monitor autoscale 规则创建 一个规则,该规则会在 5 分钟内平均 CPU 负载大于 70% 时增加 VM 实例数。 触发规则时,VM 实例数增加 3。

az monitor autoscale rule create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --autoscale-name autoscale \
  --condition "Percentage CPU > 70 avg 5m" \
  --scale out 3

创建规则,以便自动横向缩减

当应用程序需求减少时,VM 实例上的负载会下降。 如果此减少的负载持续一段时间,则可以配置自动缩放规则以减少规模集中的 VM 实例数。 此横向缩减操作可通过仅运行满足当前需求所需的必要实例数来帮助降低成本。

使用 az monitor autoscale 规则创建 另一个规则,当平均 CPU 负载在 5 分钟内下降到 30% 以下时,该规则会减少 VM 实例数。 以下示例将 VM 实例数横向缩减一个。

az monitor autoscale rule create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --autoscale-name autoscale \
  --condition "Percentage CPU < 30 avg 5m" \
  --scale in 1

在规模集上模拟 CPU 负载

若要测试自动缩放规则,需要在规模集中的 VM 实例上模拟持续 CPU 负载。 在此极简方法中,我们通过使用内置 yes 命令生成 CPU 负载来避免安装其他包。 以下命令启动 3 个后台进程,这些进程连续将数据输出到 /dev/null 60 秒,然后终止它们。

for i in {1..3}; do
  yes > /dev/null &
done
sleep 60
pkill yes

此命令模拟 CPU 负载,而不会引入包安装错误。

监视活动的自动缩放规则

若要监视规模集中的 VM 实例数,请使用 watch 命令。 自动扩展规则可能需要最长5分钟才能开始扩展过程,以应对CPU负载。 但是,一旦发生这种情况,可以使用 Ctrl + C 键退出监视。

届时,规模集将自动增加 VM 实例数以满足需求。 以下命令显示规模集中的 VM 实例列表:

az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $MY_SCALE_SET_NAME \
  --output table

达到 CPU 阈值以后,自动缩放规则会增加规模集中的 VM 实例数。 输出将在创建新实例时显示 VM 实例的列表。

  InstanceId  LatestModelApplied    Location    Name              ProvisioningState    ResourceGroup         VmId
------------  --------------------  ----------  ---------------   -------------------  --------------------  ------------------------------------
           1  True                  WestUS2     myScaleSet_1      Succeeded            myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
           2  True                  WestUS2     myScaleSet_2      Succeeded            myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
           4  True                  WestUS2     myScaleSet_4      Creating             myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
           5  True                  WestUS2     myScaleSet_5      Creating             myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
           6  True                  WestUS2     myScaleSet_6      Creating             myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

CPU 负载消退后,平均 CPU 负载将恢复正常。 另一个 5 分钟后,自动缩放规则会横向缩减 VM 实例数。 缩容操作将优先删除具有最高 ID 的 VM 实例。 如果规模集使用可用性集或可用性区域,则横向缩减操作将在 VM 实例商均匀分布。 以下示例输出显示在规模集进行自动横向缩减时删除了一个 VM 实例:

6  True                  WestUS2     myScaleSet_6  Deleting             myResourceGroupxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

清理资源

若要删除规模集和关联的资源,请使用首选方法手动删除资源组。

后续步骤

本教程介绍了如何使用 Azure CLI 自动进行规模集的横向缩减或扩展:

  • 对规模集使用自动缩放
  • 创建和使用自动缩放规则
  • 模拟 CPU 负载以触发自动缩放规则
  • 在需求更改时监视自动缩放操作