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

将采用统一业务流程的虚拟机规模集关联到产能预留组

适用于:✔️ 统一规模集

虚拟机规模集有两种模式:

  • 统一业务流程模式:在此模式中,虚拟机规模集使用虚拟机 (VM) 配置文件或模板来纵向扩展到所需的容量。 统一模式使用相同的 VM 实例,不过在一定程度上也能够管理或自定义单独的 VM 实例。 这些实例是通过虚拟机规模集 VM API 公开的,与标准 Azure IaaS VM API 命令不兼容。 规模集执行所有的实际 VM 操作,因此预留项与虚拟机规模集直接关联。 将规模集与预留进行关联后,将针对预留完成所有的后续 VM 分配。
  • 灵活业务流程模式:在此模式中,你能够更灵活地管理单个虚拟机规模集 VM 实例,因为它们可使用标准 Azure IaaS VM API,而不是使用规模集界面。 若要使用采用灵活业务流程模式的预留,请在每个虚拟机上定义虚拟机规模集属性和产能预留属性。

若要详细了解这些模式,请转到虚拟机规模集业务流程模式

此内容适用于统一业务流程模式。 对于灵活业务流程模式,请转到将采用灵活业务流程的虚拟机规模集关联到产能预留组

统一业务流程中的规模集限制

  • 若要使统一业务流程中的虚拟机规模集与容量预留兼容,singlePlacementGroup 属性必须设置为 False。
  • 容量预留不支持多区域统一规模集的“静态固定分布”可用性选项。 此选项要求使用 5 个容错域,而预留最多支持 3 个容错域来实现常规用途大小。 建议的方法是使用“最大分布”选项,它将 VM 分布到每个区域中尽可能多的容错域 (FD) 中。 如果需要,请将自定义容错域配置设为 3 或更小。

使用容量预留时,还有其他一些限制。 有关完整列表,请参阅容量预留概述

将新的虚拟机规模集与产能预留组进行关联

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及你应采取哪些操作,请访问针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心

若要将新的统一虚拟机规模集与产能预留组进行关联,请向 Microsoft.Compute 提供程序构造以下 PUT 请求:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}?api-version=2021-04-01

virtualMachineProfile 属性中添加 capacityReservationGroup 属性:

{ 
    "name": "<VMScaleSetName>", 
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}", 
    "type": "Microsoft.Compute/virtualMachineScaleSets", 
    "location": "eastus", 
    "sku": { 
        "name": "Standard_D2s_v3", 
        "tier": "Standard", 
        "capacity": 3 
}, 
"properties": { 
    "virtualMachineProfile": { 
        "capacityReservation": { 
            "capacityReservationGroup":{ 
                "id":"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroup/{CapacityReservationGroupName}" 
            } 
         }, 
        "osProfile": { 
            … 
        }, 
        "storageProfile": { 
            … 
        }, 
        "networkProfile": { 
            …,
            "extensionProfile": { 
                … 
            } 
        } 
    } 

将现有虚拟机规模集与产能预留组进行关联

将现有的产能预留组添加到现有的统一规模集:

  • 停止规模集以解除分配 VM 实例
  • 将规模集更新为使用匹配的产能预留组
  • 启动规模集

此过程可确保区域中的产能预留和规模集的安排兼容。

有关升级策略的重要说明

  • 自动升级 - 在此模式中,规模集 VM 实例与产能预留组自动关联,无需你的任何进一步操作。 规模集 VM 重新分配后,会开始使用预留容量。
  • 滚动升级 - 在此模式中,规模集 VM 实例与产能预留组进行关联,无需你的任何进一步操作。 不过,它们是分批更新的,各批次之间有一个可选的暂停时间。 规模集 VM 重新分配后,会开始使用预留容量。
  • 手动升级 - 在此模式中,当虚拟机规模集附加到产能预留组时,规模集 VM 实例将保持原样。 你需要对每个规模集 VM 进行更新,方法是使用最新的规模集模型进行升级
  1. 解除分配虚拟机规模集。

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroupname}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}/deallocate?api-version=2021-04-01
    
  2. 向规模集模型添加 capacityReservationGroup 属性。 向 Microsoft.Compute 提供程序构造以下 PUT 请求:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroupname}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}?api-version=2021-04-01
    

    在请求正文包含 capacityReservationGroup 属性:

    "location": "eastus",
    "properties": {
        "virtualMachineProfile": {
             "capacityReservation": {
                      "capacityReservationGroup": {
                            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}"
                      }
                }
        }
    }
    

在实例视图中查看虚拟机规模集关联情况

将统一虚拟机规模集与产能预留组进行关联后,将针对产能预留进行所有后续 VM 分配。 Azure 会在组中自动查找匹配的容量预留并使用预留的槽。

产能预留组实例视图virtualMachinesAssociated & virtualMachinesAllocated 属性下反映新的规模集 VM:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}?$expand=instanceview&api-version=2021-04-01 
{ 
    "name": "<CapacityReservationGroupName>", 
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}", 
    "type": "Microsoft.Compute/capacityReservationGroups", 
    "location": "eastus" 
}, 
    "properties": { 
        "capacityReservations": [ 
            { 
                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{CapacityReservationName}" 
            } 
        ], 
        "virtualMachinesAssociated": [ 
            { 
                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}/virtualMachines/{VirtualMachineId}" 
            } 
        ], 
        "instanceView": { 
            "capacityReservations": [ 
                { 
                    "name": "<CapacityReservationName>", 
                    "utilizationInfo": { 
                        "virtualMachinesAllocated": [ 
                            { 
                                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMScaleSetName}/virtualMachines/{VirtualMachineId}" 
                            } 
                        ] 
                    },
                    "statuses": [ 
                        { 
                            "code": "ProvisioningState/succeeded", 
                            "level": "Info", 
                            "displayStatus": "Provisioning succeeded", 
                            "time": "2021-05-25T15:12:10.4165243+00:00" 
                        } 
                    ] 
                } 
            ] 
        } 
    } 
} 

地区和可用性区域注意事项

虚拟机规模集可在地区创建,或者在一个或多个可用性区域中创建,从而免受数据中心级故障影响。 若要详细了解多区域虚拟机规模集,请参阅使用可用性区域的虚拟机规模集

重要

虚拟机规模集和产能预留组的位置(区域和可用性区域)必须匹配,这样才能成功关联。 对于地区性规模集,地区必须在规模集和产能预留组之间匹配。 对于区域性规模集,地区和区域在规模集和产能预留组之间都必须匹配。

如果某规模集分布在多个区域,那么它始终尝试在包含的可用性区域中均匀部署。 由于这种均匀部署,产能预留组在每个区域应始终具有相同数量的预留 VM。 为了说明这一点的重要性,来看看下面的示例。

在本例中,每个区域预留了不同的数量。 假设虚拟机规模集横向扩展到 75 个实例。 由于规模集将始终尝试跨区域均匀部署,因此 VM 分发应如下所示:

区域 预留数量 不是。 每个区域中的规模集 VM 数 未使用的预留数量 过度分配数
1 40 25 15 0
2 20 25 0 5
3 15 25 0 10

在此情况下,对于区域 1 中 15 个未使用的实例,规模集会产生额外费用。 横向扩展还依赖于区域 2 中的 5 个 VM 和区域 3 中的 10 个 VM,它们不受产能预留保护。 如果每个区域都预留 25 个容量实例,那么全部 75 个 VM 将受到产能预留保护,部署将不对未使用的实例产生任何额外费用。

预留可能会过度分配,因此规模集可超出预留限制继续正常缩放。 唯一的区别是,超出预留数量分配的 VM 不涵盖在产能预留 SLA 中。 若要了解详细信息,请转到容量预留过度分配

后续步骤