虚拟机规模集的自动区域放置允许 Azure 根据容量和 SKU 可用性为你的规模集选择可用区。 无需为每个区域指定固定区域列表,而是配置放置要求,Azure选择最能满足它们的区域。
采用统一和灵活协调模式的虚拟机规模集支持自动可用区放置。
Important
虚拟机规模集的自动可用区放置当前处于预览阶段。 需同意补充使用条款才可使用预览版。 在正式发布之前,此功能的某些方面可能会更改。
自动区域放置的工作原理
自动区域放置功能会评估 SKU 可用性、容量以及你配置的任何放置约束,以选择可用性区域并放置 VM 实例。
默认情况下,规模集适用于跨三个可用性区域分布实例。 如果配置 maxZoneCount,规模集将用于跨该数量的区域分布实例,并且永远不会超过配置的限制。 实际部署位置取决于 SKU 可用性、容量情况、规模集当前的可用区分布以及其他放置约束。 如果未配置 maxZoneCount,并且该区域具有三个以上的可用区,则规模集可扩展到默认跨三个可用区的分布范围之外;例如,如果当前可用区无法满足其横向扩展请求,则可扩展到第四个可用区。
默认情况下,自动区域部署:
- 旨在实现跨三个可用区的均匀分布。
- 要求实例分布在至少两个可用性区域。
- 将任何单个区域中的实例数限制为规模集的 50%。
- 如果当前区域没有足够的容量用于更多实例,并且该区域中提供了另一个区域,则可以扩展到其他可用性区域。
如果没有足够的容量来满足所有放置要求,Azure 会分配策略允许的尽可能多的实例,其余实例可能无法完成预配。 此行为是部分分配失败,而不是整个请求的失败。
注释
自动区域放置会在创建新实例时自动选择区域。 它不会移动或重新创建现有实例以更正区域不平衡。 若要主动纠正现有不平衡,请参阅 自动区域平衡。
何时使用自动区域放置
在以下情况下,可启用自动区域放置:
- 你希望使用区域性或跨可用区的规模集,但不要求将实例放在特定的可用区中。 可以定义区域分布要求,并允许Azure选择区域。
- 可以在区域 SKU 可用性不同的区域之间部署。 自动区域放置有助于应用一致的配置,而不是维护特定于区域的区域列表。
- 你希望Azure选择可用性区域时考虑当前容量信号。
当工作负载必须在每次放置操作中使用特定可用区时,请改用 客户选定的可用区。
Prerequisites
在配置自动区域放置之前,请确保:
- 你使用的是计算 API 版本
2026-03-01或更高版本。 - 您在支持可用性区域的 Azure 公共区域中部署规模集。
向 AFEC 注册订阅
订阅必须注册到Azure功能曝光控制(AFEC)标志Microsoft.Compute/VmssAutomaticZonePlacement。 必须完成此注册,才能为您的订阅启用自动区域放置功能。
- Portal
- Azure CLI
- Azure PowerShell
- 登录到 Azure 门户。
- 在搜索框中,输入 订阅,然后选择“ 订阅”。
- 选择订阅。
- 在 设置中,选择 预览功能。
- 搜索 VmssAutomaticZonePlacement,然后选择该功能。
- 选择注册。
Limitations
- 规模集可以使用
zones属性来实现 客户选择的区域,或使用placement.zonePlacementPolicy属性进行自动区域放置,但不能同时使用这两个属性。 - 不支持邻近放置组。
- 不支持容量预留组。
- 公开预览期间不支持虚拟机规模集的实例组合。 预计将在正式发布时提供支持。
- 不支持备用池。
- 不支持专用主机组。
- 不支持边缘区域。
- 不支持过度预配。 在添加
placement.zonePlacementPolicy之前,请确保overprovision已设置为false;否则,部署将失败。 - 不支持 Service Fabric 规模集。
- 不支持创建和附加新 VM。 如果现有区域性 VM 所在的区域符合规模集的放置配置,则可以附加该现有区域性 VM。
配置属性
以下示例显示了自动区域放置属性在规模集模型中的位置。 只需要 placement.zonePlacementPolicy 。 所有其他属性都是可选的。
{
"placement": {
"zonePlacementPolicy": "auto",
"includeZones": [
"1",
"2",
"4"
]
},
"properties": {
"zoneBalance": false,
"resiliencyPolicy": {
"zoneAllocationPolicy": {
"maxZoneCount": 2,
"maxInstancePercentPerZonePolicy": {
"enabled": true,
"value": 70
}
}
}
}
}
注释
使用 includeZones 或 excludeZones。 不能在同一规模集上配置这两个属性。
以下属性控制自动区域放置行为:
| 资产 | DESCRIPTION |
|---|---|
placement.zonePlacementPolicy |
Required. 将其设置为 "auto" 以启用自动区域放置。 |
placement.includeZones |
Optional. Azure可以考虑放置的可用性区域的列表。 Azure仅从此列表中选择区域,但可能不会在每个列出的区域中部署实例。 不能将此属性与 excludeZones 一起使用。 |
placement.excludeZones |
Optional. Azure 在部署时必须排除的区域列表。 不能将此属性与 includeZones 一起使用。 |
zoneBalance |
Optional. 控制缩放操作期间的区域均衡。 默认值为 false,它会尽力实现负载均衡。 如果启用 zoneBalance 并使用自动区域放置,则还必须指定 maxZoneCount。 如果 zoneBalance 为 false, maxZoneCount 则为可选。 |
resiliencyPolicy.zoneAllocationPolicy.maxZoneCount |
Optional. 规模集可以使用的最大区域数。 如果未指定此属性,Azure面向三个区域,并在需要时扩展到其他区域以满足缩放请求。 |
resiliencyPolicy.zoneAllocationPolicy.maxInstancePercentPerZonePolicy.enabled |
Optional. 启用或禁用“每个区域最大实例百分比”策略。 仅当 false 为 zoneBalance 时,才支持此策略。 |
resiliencyPolicy.zoneAllocationPolicy.maxInstancePercentPerZonePolicy.value |
Optional. 可分配给单个区域的规模集目标容量的最大百分比。 如果满足请求将超过此值,Azure分配符合策略的实例,其余实例可能无法预配。 |
使用自动区域放置创建规模集
以下方案演示如何配置自动区域放置并说明预期的放置行为。 在部署虚拟机规模集之前,请先完成操作系统、存储和网络配置。
使用默认放置方式
- REST API
- Azure CLI
- Azure PowerShell
将 placement.zonePlacementPolicy 添加到规模集资源。 使用计算 API 版本 2026-03-01 或更高版本。
PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2026-03-01
{
"placement": {
"zonePlacementPolicy": "auto"
}
}
将此配置添加到完整的虚拟机规模集请求。
预期行为
如果未指定任何放置约束,Azure将实例均匀分布到三个区域。 例如,具有 100 个实例的规模集可能分布为 34、33 和 33。
如果甚至无法进行三区域分布,Azure要求实例跨越至少两个区域,并在任一区域中应用 50% 的默认实例限制。 即使未显式配置 maxInstancePercentPerZonePolicy,平台也会应用此限制。
例如,假设在三个区域中请求 100 个实例和可用容量为 70、30 和 0。 Azure 会尝试按 50、30 和 20 的比例进行分配。 由于第三个区域没有容量,因此最终分发为 50、30 和 0,并且 20 个实例无法预配。 若要将分配成功优先于默认分发限制,请配置更高的 maxInstancePercentPerZonePolicy.value配置。
配置符合条件的区域
使用 includeZones 或 excludeZones 来控制 Azure 在放置时考虑哪些区域。 不能在同一规模集上配置这两个属性。
- REST API
- Azure CLI
- Azure PowerShell
以下示例将 Azure 的放置范围限制为仅在1和2可用区中进行放置。
PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2026-03-01
{
"placement": {
"zonePlacementPolicy": "auto",
"includeZones": [
"1",
"2"
]
}
}
或者,用于excludeZones防止Azure选择特定区域。 以下示例排除区域 3:
{
"placement": {
"zonePlacementPolicy": "auto",
"excludeZones": [
"3"
]
}
}
预期行为
配置includeZones时,Azure仅从指定列表中选择区域。 此设置不保证Azure在每个列出的区域中放置实例。 在放置实例时,Azure 仍会考虑容量、SKU 可用性、当前分布以及你的其他放置约束。
配置excludeZones时,Azure不会选择或放置排除区域中的新实例。 所有其他受支持的区域仍符合条件。 无法在同一个缩放比例集中同时使用 includeZones 和 excludeZones。
限制一个区域中实例的百分比
使用 maxInstancePercentPerZonePolicy 来控制可分配给任一可用区的规模集目标容量的最大百分比。 较高的百分比使Azure更灵活地满足分配请求,但允许更多的实例集中在一个区域中。
仅当 false 为 zoneBalance 时,才支持该策略。
最小实例百分比
最小值取决于 Azure 应用 includeZones、excludeZones 和 maxZoneCount 后符合放置条件的可用性区域数量:
minimum instance percentage = ceil(100 / number of eligible zones)
例如,假设 includeZones 包含区域 1, 2以及 4,并且 maxZoneCount 是 2。 符合条件的区域的有效数目为 2,因此最小有效百分比为 50。
一个区域中的最大实例数
Azure根据规模集的目标容量计算一个区域中允许的最大实例数:
maximum instances per zone = ceil(maximum instance percentage * target capacity / 100)
Azure将结果向上舍入为最接近的整数。 例如,如果目标容量为 101 个实例,最大实例百分比为 85,则规模集可以在单个区域中最多放置 86 个实例。
- REST API
- Azure CLI
- Azure PowerShell
以下示例允许一个区域中最多 85% 的实例:
PUT or PATCH https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2026-03-01
{
"placement": {
"zonePlacementPolicy": "auto"
},
"properties": {
"resiliencyPolicy": {
"zoneAllocationPolicy": {
"maxInstancePercentPerZonePolicy": {
"enabled": true,
"value": 85
}
}
}
}
}
预期行为
Azure 会先尝试将实例均匀分布在三个可用区中。 如果偶数分布是不可能的,Azure最多可以将 85% 的实例分配给一个区域。 此设置使 Azure 能够更灵活地满足分配请求,但也会导致实例更集中在同一个可用区中。
区域达到计算最大值后,Azure尝试将剩余实例放置在其他符合条件的区域中。 如果这些区域没有足够的容量,其余实例可能无法预配。
例如,假设在三个区域中请求 100 个实例和可用容量为 90、10 和 0。 Azure 尝试采用 85、10 和 5 的分配比例。 由于第三个区域没有容量,因此最终分发为 85、10 和 0,并且 5 个实例无法预配。
使用严格的区域均衡
将 true 设置为 zoneBalance,以要求在所选区域之间实现均衡分布。 必须指定 maxZoneCount 何时启用严格的区域均衡。
- REST API
- Azure CLI
- Azure PowerShell
以下示例支持跨三个区域进行严格的区域均衡。
PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2026-03-01
{
"placement": {
"zonePlacementPolicy": "auto"
},
"properties": {
"zoneBalance": true,
"resiliencyPolicy": {
"zoneAllocationPolicy": {
"maxZoneCount": 3
}
}
}
}
预期行为
Azure 要求所选可用区之间的实例计数彼此相差不超过一个实例。 如果设置为maxZoneCount3,Azure最多选择三个区域,并在正在使用的区域之间保持严格的平衡。
如果 Azure 由于容量或可用区可用性而无法保持严格均衡,则无法按照该策略放置的实例将预配失败。 因此,与尽力均衡相比,严格的区域均衡可能会降低分配成功率。
在现有规模集上启用自动区域放置
可以在使用客户选择的区域或区域放置的现有规模集上启用自动区域放置。
Warning
在区域规模集上启用自动区域放置后,无法将规模集返回到区域放置。 现有区域实例保持不变,但Azure将新实例置于可用性区域中。
在区域规模集上启用自动区域放置之前,请查看 “准备区域扩展”。
对于使用客户所选区域的规模集,请清除zones属性并在相同的更新操作中设置为autoplacement.zonePlacementPolicy。 对于区域规模集,将 placement.zonePlacementPolicy 设置为 auto。
- REST API
- Azure CLI
- Azure PowerShell
将 PATCH 请求发送到以下终结点:
PATCH https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2026-03-01
对于使用客户所选区域的规模集,请清除 zones 并在同一请求中启用自动区域放置:
{
"zones": [],
"placement": {
"zonePlacementPolicy": "auto"
}
}
对于区域规模集,在不指定 zones的情况下启用自动区域放置:
{
"placement": {
"zonePlacementPolicy": "auto"
}
}
预期行为
更新为新实例启用自动区域放置。 不会移动或重新创建现有实例。
对于使用客户选择的区域的规模集,现有实例将保留在其当前可用性区域中。 对于区域规模集,现有区域实例仍为区域实例。 Azure放置新实例时使用自动区域放置。
如果放置要求发生更改,则可以从自动区域放置切换回客户选择的区域。 在同一更新操作中,清除 placement.zonePlacementPolicy 并设置 zones 属性。 此更新不会移动或重新创建现有实例。
后续步骤
- 查看虚拟机规模集的可用性区域选项。
- 了解虚拟机规模集中的区域均衡。
- 了解 自动区域平衡。