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

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

适用于:✔️ 统一规模集

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

  • 统一业务流程:在此模式下,虚拟机规模集使用虚拟机 (VM) 配置文件或模板来纵向扩展到所需的容量。 尽管具备一些管理或自定义单独 VM 实例的功能,但统一业务流程使用相同的 VM 实例。 这些实例通过虚拟机规模集的 VM API 公开,并且与 Azure 基础结构即服务 (IaaS) VM 的标准 API 命令不兼容。 由于规模集会执行所有的实际 VM 操作,因此预留与虚拟机规模集是直接关联的。 将规模集与预留关联后,将会针对预留完成所有的后续 VM 分配。
  • 灵活业务流程:在此模式下,可以更灵活地管理单独的虚拟机规模集 VM 实例。 它们可以使用标准的 Azure IaaS VM API,而不是使用规模集接口。 要通过灵活业务流程模式使用预留,请在每台虚拟机上定义虚拟机规模集属性和产能预留属性。

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

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

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

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

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

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

重要

从 2023 年 11 月开始,如果未指定业务流程模式,则使用 PowerShell 和 Azure CLI 创建的虚拟机规模集将默认为采用灵活业务流程模式。 要详细了解此更改以及应执行的操作,请参阅面向 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 会在组中自动查找匹配的容量预留并使用预留的槽。

产能预留组“实例视图”会在 virtualMachinesAssociatedvirtualMachinesAllocated 属性下反映新的规模集 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。 要了解详细信息,请参阅过度分配产能预留

下一步