在灵活业务流程中将部署和资源迁移到虚拟机规模集

与可用性集一样,虚拟机规模集也支持跨多个容错域分布虚拟机。 带有灵活业务流程的虚拟机规模集让你可以将处于统一业务流程模式的虚拟机规模集的可伸缩性与可用性集的区域可用性保证相结合。 本文介绍切换到虚拟机规模集的灵活业务流程模式时的迁移注意事项。

更新可用性集部署模板和脚本

首先,需要通过 Azure CLIAzure PowerShellARM 模板创建没有自动缩放配置文件的虚拟机规模集。 Azure 门户仅允许使用自动缩放配置文件创建虚拟机规模集。 如果不希望或不需要自动缩放配置文件,并且想要使用 Azure 门户创建规模集,则可将初始容量设置为 0。

必须为虚拟机规模集指定容错域计数。 对于区域性(非地带性)部署,虚拟机规模集提供与可用性集相同的容错域保证。 但可纵向扩展到 1000 个实例。 对于跨多个可用性区域分布实例的区域性部署,容错域计数必须设置为 1。

灵活业务流程模式已弃用更新域。 大多数具有常规用途 SKU 的平台更新都可使用实时迁移执行,不需要重启实例。 当平台维护要求重新启动实例时,可按容错域逐一应用更新。

虚拟机规模集的灵活业务流程还支持跨多个可用性区域部署实例。 建议考虑更新 VM 部署,以分散到多个可用性区域。

此过程的最后一步是创建虚拟机。 请指定虚拟机规模集,而不是指定可用性集。 (可选)可指定要在其中放置 VM 的可用性区域或容错域。

迁移现有可用性集 VM

目前还没有自动化工具可直接将可用性集中的现有实例移到虚拟机规模集。 但可使用多种策略将现有实例迁移到灵活规模集:

蓝/绿或并排迁移

  1. 将新的规模集虚拟机实例(其配置与可用性中的 VM 类似)引入同一资源组、虚拟网络、负载均衡器等
  2. 迁移数据、网络流量等以使用新的规模集实例
  3. 解除分配或删除原始可用性集虚拟机,使规模集 VM 针对应用程序运行

替换 VM 实例

  1. 请注意要从虚拟机保留的参数(名称、NIC ID、OS 和数据磁盘 ID、VM 配置设置、容错域放置等)
  2. 删除可用性集虚拟机。 不会删除 VM 的 NIC 和磁盘
  3. 使用原始 VM 中的参数创建新的虚拟机对象
    • NIC ID
    • OS 和数据磁盘
    • 容错域放置
    • 其他 VM 设置

更新统一规模集部署模板和脚本

更新统一虚拟机规模集部署模板和脚本以使用灵活业务流程。 更改模板中的以下元素以成功完成该过程。

  • 删除 LoadBalancerNATPool(对 flex 无效)
  • 删除超量预配参数(对 flex 无效)
  • 删除 upgradePolicy(还是对 flex 无效)
  • 将计算 API 版本更新为 2021-03-01
  • 添加业务流程模式 flexible
  • 需要 platformFaultDomainCount
  • 需要 singlePlacementGroup=false
  • 将网络 API 版本添加到 2021-11-01 更高版本
  • 将 IP configuration.properties.primary 设置为 true(出站规则需要)

迁移现有的统一规模集

目前没有自动化工具可直接移动现有实例或将统一规模集升级为灵活虚拟机规模集。 但可使用下面的策略将现有实例迁移到灵活规模集:

蓝/绿或并排迁移

  1. 将新的灵活业务流程模式规模集(其配置与处于统一业务流程模式的原始规模集类似)引入同一资源组、虚拟网络、负载均衡器等
  2. 迁移数据、网络流量等以使用新的规模集实例
  3. 纵向缩减或删除原始统一规模集虚拟机,使规模集虚拟机针对应用程序运行

灵活的规模集注意事项

带有灵活业务流程的虚拟机规模集让你可以将统一业务流程中的虚拟机规模集的可伸缩性与可用性集的区域可用性保证相结合。 下面是决定使用灵活业务流程模式时的主要注意事项。

创建可缩放的网络连接

网络出站访问行为将根据你选择在规模集中创建虚拟机的方式而有所不同。 手动添加的 VM 实例具有默认的出站连接访问权限。 隐式创建的 VM 实例没有默认访问权限。

为了增强默认网络安全性,通过自动缩放配置文件隐式创建的虚拟机实例没有默认出站访问权限。 若要将虚拟机规模集与隐式创建的 VM 实例一起使用,必须通过以下方法之一显式定义出站访问:

  • 对于大多数方案,我们建议使用已附加到子网的 NAT 网关
  • 对于安全要求较高的方案,或者在使用 Azure 防火墙或网络虚拟设备 (NVA) 时,你可以将自定义的用户定义路由指定为防火墙中的下一个跃点。
  • 实例位于标准 SKU 实例 Azure 负载均衡器的后端池。
  • 将公共 IP 地址附加到实例网络接口。

需要显式出站连接的常见方案包括:

  • Windows VM 激活要求你已定义从 VM 实例到 Windows 激活密钥管理服务 (KMS) 的出站连接。 有关详细信息,请参阅排查 Windows VM 激活问题
  • 访问存储帐户或 Key Vault。 你还可以通过专用链接与 Azure 服务建立连接。
  • Windows 更新。
  • 对 Linux 包管理器的访问。

有关详细信息,请参阅 Azure 中的默认出站访问

对于显式创建 NIC 的单个实例 VM,将提供默认出站访问。 统一业务流程模式下的虚拟机规模集也具有默认出站连接。

重要

确认已建立显式出站网络连接。 有关详细信息,请参阅 Azure 中的虚拟网络和虚拟机,并确保遵循 Azure 的网络最佳做法

创建 VM 期间分配容错域

可为灵活业务流程规模集选择容错域的数目。 默认情况下,将 VM 添加到灵活规模集时,Azure 会在多个容错域之间均匀分散实例。 尽管我们建议让 Azure 分配容错域,但对于高级或故障排除方案,你可以替代此默认行为,指定要将实例放入哪个容错域。

az vm create -vmss "myVMSS"  --platform_fault_domain 1

实例命名

创建 VM 并将其添加到灵活规模集时,可以在 Azure 命名约定规则中全面控制实例名称。 通过自动缩放将 VM 自动添加到规模集时,你可以提供一个前缀,而 Azure 会在名称的末尾追加唯一的编号。

列出规模集 VM API 更改

虚拟机规模集允许列出属于该规模集的实例。 对于灵活业务流程,“列出虚拟机规模集 VM”命令将提供规模集 VM ID 的列表。 然后,可以调用“获取虚拟机规模集 VM”命令,以获取有关规模集如何使用 VM 实例的更多详细信息。 若要获取 VM 的完整详细信息,请使用标准的“获取 VM”命令或 Azure Resource Graph

查询实例以获取电源状态

首选方法是使用 Azure Resource Graph 查询虚拟机规模集中的所有 VM。 Azure Resource Graph 针对各个订阅中的 Azure 资源提供大规模有效查询功能。

| where type =~ 'Microsoft.Compute/virtualMachines'
| where properties.virtualMachineScaleSet contains "demo"
| extend powerState = properties.extended.instanceView.powerState.code
| project name, resourceGroup, location, powerState
| order by resourceGroup desc, name desc

使用 Azure Resource Graph 查询资源是查询 Azure 资源的方便高效方式,并可以最大程度地减少对资源提供程序的 API 调用。 Azure Resource Graph 是最终一致性缓存,其中的新资源或已更新的资源可能在最长 60 秒内不会反映出来。 方法:

  • 列出资源组或订阅中的 VM。
  • 使用展开选项检索订阅中所有 VM 的实例视图(容错域分配、电源和预配状态)。
  • 使用“获取 VM”API 和命令获取单个实例的模型与实例视图。

规模集 VM 批处理操作

使用标准 VM 命令来启动、停止、重启、删除实例,而无需使用虚拟机规模集 VM API。 虚拟机规模集 VM 批处理操作(全部启动、全部停止、全部重置映像等)不适合与灵活业务流程模式配合使用。

监视应用程序运行状况

应用程序运行状况监视可让应用程序为 Azure 提供检测信号,以确定应用程序是否正常。 Azure 可以自动替换不正常的 VM 实例。 对于灵活规模集实例,必须在虚拟机上安装并配置应用程序运行状况扩展。 对于统一规模集实例,可以使用应用程序运行状况扩展,或者使用 Azure 负载均衡器自定义运行状况探测来度量运行状况。

检索启动诊断数据

使用标准 VM API 和命令检索实例启动诊断数据和屏幕截图。 虚拟机规模集 VM 启动诊断 API 和命令不适用于灵活业务流程模式实例。

VM 扩展

使用面向标准虚拟机的扩展,而不是面向统一业务流程模式实例的扩展。

防止删除实例

灵活业务流程模式下的虚拟机规模集当前没有实例保护选项。 如果在虚拟机规模集上启用了自动缩放,则某些 VM 在缩减过程中可能会面临被删除的风险。 如果要保护某些 VM 实例免遭删除,请使用Azure 资源管理器锁定

后续步骤