你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:使用 Azure CLI 自动缩放虚拟机规模集
创建规模集时,可定义想运行的 VM 实例数。 若应用程序需要更改,可自动增加或减少 VM 实例数。 通过自动缩放功能,可随客户需求的改变而进行调整,或在应用的整个生命周期内响应应用程序性能更改。 本教程介绍如何执行下列操作:
- 对规模集使用自动缩放
- 创建和使用自动缩放规则
- 对 VM 实例进行压力测试并触发自动缩放规则
- 在需求下降时自动横向缩减
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 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 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。
创建规模集
使用 az group create 创建资源组。
az group create --name myResourceGroup --location eastus
现在,使用 az vmss create 创建虚拟机规模集。 以下示例创建实例计数为 2 的规模集,并生成 SSH 密钥(如果不存在)。
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--image <SKU image> \
--orchestration-mode Flexible \
--instance-count 2 \
--admin-username azureuser \
--generate-ssh-keys
定义自动缩放配置文件
若要在规模集上启用自动缩放,首先要定义自动缩放配置文件。 此配置文件定义默认、最小和最大规模集容量。 这些限制可让你通过不继续创建 VM 实例来控制成本,并可使用缩小事件中保留的最小数量的实例均衡可接受的性能。 使用 az monitor autoscale create 创建自动缩放配置文件。 以下示例设置了默认值,以及最小容量 2 个 VM 实例、最大容量 10 个 VM :
az monitor autoscale create \
--resource-group myResourceGroup \
--resource myScaleSet \
--resource-type Microsoft.Compute/virtualMachineScaleSets \
--name autoscale \
--min-count 2 \
--max-count 10 \
--count 2
创建规则,以便自动横向扩展
如果应用程序需求提高,规模集中 VM 实例上的负载将会增大。 如果这种负载增大持续稳定,而不只是短暂的需求,那么可以配置自动缩放规则来增加规模集中的 VM 实例数。 创建这些 VM 实例并部署应用程序后,规模集会开始通过负载均衡器将流量分配到这些实例和应用程序。 可以控制要监视的指标、应用程序负载必须处于给定阈值内的时间,以及要添加到规模集的 VM 实例数。
使用 az monitor autoscale rule create 创建一个规则,当平均 CPU 负载在超过 5 分钟的时间段超过 70% 时,该规则会增加规模集中的 VM 实例数。 触发规则时,VM 实例数增加 3。
az monitor autoscale rule create \
--resource-group myResourceGroup \
--autoscale-name autoscale \
--condition "Percentage CPU > 70 avg 5m" \
--scale out 3
创建规则,以便自动横向缩减
在夜间或周末,应用程序需求可能会降低。 如果这种负载降低在一段时间内持续稳定,可以配置自动缩放规则来减少规模集中的 VM 实例数。 这种横向缩减操作可以减少运行规模集所需的成本,因为只运行满足当前需求所需的实例数。
让我们使用 az monitor autoscale rule create 创建另一个规则,当平均 CPU 负载随后在 5 分钟内低于 30% 时,该规则会减少规模集中的 VM 实例数。 以下示例定义将 VM 实例数减 1 的规则。
az monitor autoscale rule create \
--resource-group myResourceGroup \
--autoscale-name autoscale \
--condition "Percentage CPU < 30 avg 5m" \
--scale in 1
在规模集上生成 CPU 负载
若要测试自动缩放规则,请在规模集的 VM 实例上生成一些 CPU 负载。 这种模拟的 CPU 负载会导致自动缩放以横向扩展的方式增加 VM 实例数。 随着模拟的 CPU 负载下降,自动缩放规则会进行横向缩减,减少 VM 实例数。
若要连接到单个实例,请参阅教程:连接到虚拟机规模集实例
登录后,安装 stress 或 stress-ng 实用工具。 启动 10 个生成 CPU 负载的 stress 辅助角色。 这些辅助角色运行 420 秒,此时间足以让自动缩放规则实施所需的操作。
sudo apt-get update
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &
当 stress 显示类似于 stress: info: [2688] dispatching hogs:10 cpu, 0 io, 0 vm, 0 hdd 的输出时,按 Enter 键返回到提示符。
若要确认 stress 是否生成了 CPU 负载,请使用 top 实用工具检查活动的系统负载:
top
退出 top,然后关闭与 VM 实例的连接。 stress 继续在 VM 实例上运行。
Ctrl-c
exit
连接到第二个 VM 实例,所使用的端口号是前面的 az vmss list-instance-connection-info 列出的:
ssh azureuser@13.92.224.66 -p 50003
安装并运行 stress 或 stress-ng,然后在这第二个 VM 实例上启动十个辅助角色。
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &
当 stress 再次显示类似于 stress: info: [2713] dispatching hogs:10 cpu, 0 io, 0 vm, 0 hdd 的输出时,按 Enter 键返回到提示符。
关闭与第二个 VM 实例的连接。 stress 继续在 VM 实例上运行。
exit
监视活动的自动缩放规则
若要监视规模集中的 VM 实例数,请使用 watch。 自动缩放规则需要 5 分钟的时间才能开始横向扩展过程,以便响应由每个 VM 实例上的 stress 生成的 CPU 负载:
watch az vmss list-instances \
--resource-group myResourceGroup \
--name myScaleSet \
--output table
达到 CPU 阈值以后,自动缩放规则会增加规模集中的 VM 实例数。 以下输出显示,在规模集进行自动横向扩展时创建了 3 个 VM:
Every 2.0s: az vmss list-instances --resource-group myResourceGroup --name myScaleSet --output table
InstanceId LatestModelApplied Location Name ProvisioningState ResourceGroup VmId
------------ -------------------- ---------- ------------ ------------------- --------------- ------------------------------------
1 True eastus myScaleSet_1 Succeeded myResourceGroup 4f92f350-2b68-464f-8a01-e5e590557955
2 True eastus myScaleSet_2 Succeeded myResourceGroup d734cd3d-fb38-4302-817c-cfe35655d48e
4 True eastus myScaleSet_4 Creating myResourceGroup 061b4c90-0d73-49fc-a066-19eab0b3d95c
5 True eastus myScaleSet_5 Creating myResourceGroup 4beff8b9-4e65-40cb-9652-43899309da27
6 True eastus myScaleSet_6 Creating myResourceGroup 9e4133dd-2c57-490e-ae45-90513ce3b336
当 stress 在初始 VM 实例上停止后,平均 CPU 负载会回到正常。 另一个 5 分钟后,自动缩放规则会横向缩减 VM 实例数。 横向缩减操作会首先删除 ID 值最高的 VM 实例。 如果规模集使用可用性集或可用性区域,则横向缩减操作将均匀分布到这些 VM 实例上。 以下示例输出显示,在规模集进行自动横向缩减时删除了一个 VM 实例:
6 True eastus myScaleSet_6 Deleting myResourceGroup 9e4133dd-2c57-490e-ae45-90513ce3b336
使用 Ctrl-c
退出 watch。 规模集继续每 5 分钟横向缩减一次,每次删除一个 VM 实例,直至达到最小实例计数 2。
清理资源
若要删除规模集和其他资源,请使用 az group delete 删除资源组及其所有资源。 --no-wait
参数会使光标返回提示符处,无需等待操作完成。 --yes
参数将确认是否希望删除资源,而不会有额外提示。
az group delete --name myResourceGroup --yes --no-wait
后续步骤
本教程介绍了如何使用 Azure CLI 自动进行规模集的横向缩减或扩展:
- 对规模集使用自动缩放
- 创建和使用自动缩放规则
- 对 VM 实例进行压力测试并触发自动缩放规则
- 在需求下降时自动横向缩减