创建规模集时,可定义想运行的 VM 实例数。 若应用程序需要更改,可自动增加或减少 VM 实例数。 通过自动缩放功能,可随客户需求的改变而进行调整,或在应用的整个生命周期内响应应用程序性能更改。 本教程介绍如何执行下列操作:
- 对规模集使用自动缩放
- 创建和使用自动缩放规则
- 模拟 CPU 负载以触发自动缩放规则
- 在需求更改时监视自动缩放操作
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
先决条件
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本教程需要 Azure CLI 2.0.32 或更高版本。
创建规模集
使用 az group create 创建资源组。
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export REGION="chinanorth2"
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 chinanorth2 myScaleSet_1 Succeeded myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 True chinanorth2 myScaleSet_2 Succeeded myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4 True chinanorth2 myScaleSet_4 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5 True chinanorth2 myScaleSet_5 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6 True chinanorth2 myScaleSet_6 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CPU 负载消退后,平均 CPU 负载将恢复正常。 另一个 5 分钟后,自动缩放规则会横向缩减 VM 实例数。 缩容操作将优先删除具有最高 ID 的 VM 实例。 如果规模集使用可用性集或可用性区域,则横向缩减操作将在 VM 实例商均匀分布。 以下示例输出显示在规模集进行自动横向缩减时删除了一个 VM 实例:
6 True chinanorth2 myScaleSet_6 Deleting myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
清理资源
若要删除规模集和关联的资源,请使用首选方法手动删除资源组。
后续步骤
本教程介绍了如何使用 Azure CLI 自动进行规模集的横向缩减或扩展:
- 对规模集使用自动缩放
- 创建和使用自动缩放规则
- 模拟 CPU 负载以触发自动缩放规则
- 在需求更改时监视自动缩放操作