什么是 Azure 中的虚拟机规模集?

虚拟机规模集是一种 Azure 计算资源,可用于部署和管理一组相同的 VM。 由于所有 VM 的配置都相同,因此无需对 VM 进行任何预先配置。 这样就可以更方便地构建面向大型计算、大数据、容器化工作负荷的大规模服务。

对于需要扩大和缩小计算资源的应用程序,缩放操作在容错域和更新域之间进行隐式平衡。 有关规模集的更多介绍,请参阅 Azure 博客公告

创建和管理规模集

可以在 Azure 门户中创建规模集,方法是:选择“新建”,然后在搜索栏中键入“规模”。 结果中会列出“虚拟机规模集”。 从这里,可以填写必填字段,自定义和部署规模集。

也可以使用 JSON 模板与 REST API 来定义和部署规模集,就像定义和部署单个 Azure Resource Manager VM 一样。 因此,可以使用任何标准的 Azure Resource Manager 部署方法。 有关模板的详细信息,请参阅创作 Azure Resource Manager 模板

可在 Azure 快速入门模板 GitHub 存储库中找到一组虚拟机规模集的示例模板。 (查找标题中含有 vmss 的模板。)

以“快速启动”模板为例,每个模板的自述文件中的“部署到 Azure”按钮都会链接到门户部署功能。 如果要部署规模集,请单击该按钮,并填写门户中所需的任何参数。

扩大和缩小规模集

若要在 Azure 门户中更改规模集的容量,可单击“设置”下的“缩放”部分。

若要在命令行中更改规模集容量,请在 Azure CLI 中使用 scale 命令。 例如,使用以下命令可将规模集设置为 10 个 VM 的容量:

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

az vmss scale -g resourcegroupname -n scalesetname --new-capacity 10 

若要通过 PowerShell 在规模集中设置 VM 数,请使用 Update-AzureRmVmss 命令:

$vmss = Get-AzureRmVmss -ResourceGroupName resourcegroupname -VMScaleSetName scalesetname  
$vmss.Sku.Capacity = 10
Update-AzureRmVmss -ResourceGroupName resourcegroupname -Name scalesetname -VirtualMachineScaleSet $vmss

若要通过 Azure Resource Manager 模板增加或减少规模集中的虚拟机数,请更改 capacity 属性并重新部署模板。

若要重新部署 Azure Resource Manager 模板以更改容量,可以定义一个小得多的模板,只包括 SKU 属性数据包和更新的容量。 下面是一个示例

监视规模集

Azure 门户列出规模集并显示其属性。 门户还支持管理操作。 可以针对规模集和规模集中的单个 VM 执行这些操作。 该门户还提供了一个可自定义的资源使用情况图。

规模集方案

本部分列出了一些典型的规模集方案。 一些高级 Azure 服务(如批处理、Service Fabric 和容器服务)使用这些方案。

  • 使用 RDP 或 SSH 连接到规模集实例:在虚拟网络中创建规模集,默认情况下不为规模集中的单个 VM 分配公共 IP 地址。 此策略避免了将独立的公共 IP 地址分配给计算网格中的所有节点所需的支出和管理开销。 如果确实需要通过直接的外部连接来连接到规模集 VM,则可将规模集配置为自动将公共 IP 地址分配到新的 VM。 也可从虚拟网络中可以为其分配公共 IP 地址的其他资源(例如,负载均衡器和独立虚拟机)连接到这些 VM。
  • 使用 NAT 规则连接到 VM:可以创建一个公共 IP 地址,并将其分配给负载均衡器,然后定义入站 NAT 池。 这些操作将 IP 地址上的端口映射到规模集中 VM 上的端口。 例如:

    Source Port 目标 Destination Port
    公共 IP 端口 50000 vmss_0 端口 22
    公共 IP 端口 50001 vmss_1 端口 22
    公共 IP 端口 50002 vmss_2 端口 22

    此示例中定义了 NAT 规则,以便通过单个公共 IP 地址实现与规模集中每个 VM 的 SSH 连接。

    此示例使用 RDP 和 Windows 实现相同的目的。

  • 使用“jumpbox”连接到 VM:如果在同一个虚拟网络中创建一个规模集和一个独立 VM,则该独立 VM 和规模集 VM 能够使用其由虚拟网络或子网定义的内部 IP 地址彼此连接。 如果创建一个公共 IP 地址并将其分配给独立 VM,可以使用 RDP 或 SSH 连接到该独立 VM。 然后,可从该虚拟机连接到规模集实例。 此时你可能会发现,与使用其默认配置中的公共 IP 地址的简单独立 VM 相比,简单的规模集本质上更安全。

    例如,此模板使用一个独立的 VM 部署简单的规模集。

  • 负载均衡到规模集实例:如果想要使用轮循机制方法向 VM 的计算群集交付工作,可以使用第 4 层负载均衡规则对 Azure 负载均衡器进行相应的配置。 可以定义探测,通过使用指定的协议、间隔和请求路径对端口执行 ping 操作来验证应用程序是否正在运行。 Azure 应用程序网关也支持规模集,以及第 7 层和更复杂的负载均衡方案。

    此示例创建运行 Apache Web 服务器的规模集,并使用负载均衡器来均衡每个 VM 接收的负载。 (查看 Microsoft.Network/loadBalancers 资源类型以及 virtualMachineScaleSet 中的 networkProfile 和 extensionProfile。)

    此 Linux 示例此 Windows 示例使用应用程序网关。

  • 在 PaaS 群集管理器中将规模集部署为计算群集:规模集有时描述为下一代辅助角色。 这是有效的描述,但也可能导致将规模集功能与 Azure 云服务功能混淆。 在某种意义上,规模集提供真正的辅助角色或辅助角色资源。 规模集是通用计算资源,独立于平台/运行时、可自定义且可集成到 Azure Resource Manager IaaS 中。

    云服务辅助角色虽然在平台/运行时支持方面受到限制(仅限 Windows 平台映像), 但它也包括多项服务,如 VIP 交换,可配置的升级设置,以及特定于运行时/应用部署的设置。 这些服务尚未在规模集中提供,或者由 Azure Service Fabric 等其他更高级别 PaaS 服务提供。 可以将规模集视为支持 PaaS 的基础结构。 PaaS 解决方案(例如 Service Fabric)基于该基础结构。

规模集性能和缩放指南

  • 一个规模集最多支持 1,000 个 VM。 如果创建和上传自己的自定义 VM 映像,则该限制为 300。 如需使用大型规模集时的注意事项,请参阅使用大型虚拟机规模集
  • 无需预先创建 Azure 存储帐户即可使用规模集。 规模集支持 Azure 托管磁盘,因此不需担心因单个存储帐户磁盘数不足而造成的性能问题。 有关详细信息,请参阅 Azure 虚拟机规模集和托管磁盘
  • 可以考虑使用 Azure 高级存储而不是 Azure 存储,以便加快 VM 预配速度、提高 VM 预配时间的可预测性,以及改进 I/O 性能。
  • 可以创建的 VM 数受到在其中进行部署的区域中核心配额的限制。 即使目前用于 Azure 云服务的核心数上限已较高,也仍可能需要联系客户支持来提高计算配额限制。 若要查询配额,请运行以下 Azure CLI 命令:azure vm list-usage。 或者,运行以下 PowerShell 命令:Get-AzureRmVMUsage

有关规模集的常见问题

问: 可在规模集中包含多少个 VM?

答: 一个规模集可以包含 0 到 1,000 个基于平台映像的 VM,或者 0 到 300 个基于自定义映像的 VM。

问: 规模集是否支持数据磁盘?

答: 是的。 规模集可以定义适用于集中所有 VM 的附加数据磁盘配置。 有关详细信息,请参阅 Azure scale sets and attached data disks(Azure 规模集和附加的数据磁盘)。 可用于存储数据的其他选项包括:

  • Azure 文件(SMB 共享驱动器)
  • OS 驱动器
  • 临时驱动器(本地,不是以 Azure 存储为基础)
  • Azure 数据服务(例如 Azure 表、Azure Blob)
  • 外部数据服务(例如远程数据库)

问: 哪些 Azure 区域支持规模集?

答: 所有区域都支持规模集。

问: 如何使用自定义映像创建规模集?

答: 根据自定义映像 VHD 创建托管磁盘,并在规模集模板中引用该磁盘。 下面是一个示例

问: 如果我将规模集容量从 20 减少到 15,将删除哪些 VM?

答: 将从跨更新域和容错域的规模集中均匀地删除虚拟机,以最大限度地提高可用性。 首先删除 ID 最大的 VM。

问: 如果将容量从 15 增加到 18,会发生什么情况?

答: 如果将容量增加到 18,则创建 3 个新 VM。 每增加容量一次,VM 实例 ID 就会从以前的最高值(例如 20、21、22)递增。 容错域与和更新域中的 VM 是均衡的。

问: 在一个规模集中使用多个扩展时,是否可以强制规定执行序列?

答: 不能直接强制执行,但对于 customScript 扩展,脚本可以等待另一个扩展来完成。 在 Extension Sequencing in Azure VM Scale Sets(Azure VM 规模集中的扩展序列)博客文章中可以获取有关扩展序列的其他指导。

问: 规模集是否适用于 Azure 可用性集?

答: 是的。 规模集是包含 5 个容错域和 5 个更新域的隐式可用性集。 规模集如果包含 100 个以上的 VM,则会跨多个位置组,等效于多个可用性集。 有关位置组的详细信息,请参阅使用大型虚拟机规模集。 由 VM 组成的可用性集可以与由 VM 组成的规模集位于相同的虚拟网络中。 常见的配置是将控件节点 VM(经常需要独特的配置)放在可用性集中,将数据节点放在规模集中。

可在 Azure 虚拟机规模集常见问题中找到有关规模集的更多常见问题解答。