Azure 创建虚拟机时找不到可用性集,先核对新版向导与区域能力,再用 CLI 创建,并比较可用区和 VMSS Flexible 的适用边界。
Azure 创建虚拟机时看不到“可用性集”,不等于该功能已下线。先确认自己是否进入了新版创建向导,并用 Azure CLI 只读检查目标区域是否提供托管可用性集。新建业务优先比较可用区或灵活编排模式虚拟机规模集;只有既有架构必须继续使用可用性集时,才通过仍提供该字段的向导、CLI、PowerShell 或模板创建。
可用性集只能在创建虚拟机时指定。已经运行的 VM 不能直接点一下加入;若必须调整,通常要删除 VM 计算资源并用保留的托管磁盘、网卡和配置重新创建。这个过程会停机,错误的磁盘删除选项还可能丢数据,所以不要为了找回一个下拉选项直接删除生产 VM。
先确认你遇到的是入口变化还是能力限制
在 Azure 门户进入“虚拟机 → 创建 → Azure 虚拟机”,查看“基本信息”页的“可用性选项”。如果只显示“可用区”和“不需要基础结构冗余”,先不要据此判断可用性集已经废止。2026 年 9 月的两个 Microsoft Q&A 问题都报告了新版创建体验隐藏可用性集入口;社区答案指出旧体验或命令行仍可使用。不过,界面提示可能继续变化,正文不把某个临时按钮写成永久入口。
下面的 Azure CLI 命令只查询区域提供的托管可用性集故障域数量,不创建也不修改资源。可以在 Azure Cloud Shell 的 Bash 环境执行;结果中的区域名是 Azure 内部名称。
az vm list-skus \
--resource-type availabilitySets \
--query "[?name=='Aligned'].{Location:locationInfo[0].location,MaximumFaultDomainCount:capabilities[0].value}" \
-o table
在输出中找到目标区域,说明该区域公开了托管可用性集 SKU;MaximumFaultDomainCount 是该区域可用的最大故障域数量。没有目标区域时,不要猜测镜像或 VM 规格,先核对订阅、云环境、区域名称和官方支持信息,再决定改用可用区或提交支持请求。
可用性集、可用区和 VMSS Flexible 怎么选
| 方案 | 适合什么情况 | 主要边界 |
|---|---|---|
| 可用性集 | 区域不提供可用区,或既有架构依赖故障域/更新域 | 仍在同一数据中心范围内;应创建两台或更多 VM;必须在创建 VM 时加入 |
| 可用区 | 区域支持可用区,业务要降低单个数据中心故障影响 | 应用、入口和数据层都要跨区;可能产生跨区流量与冗余资源费用 |
| VMSS Flexible | 需要统一管理多台 VM、自动扩缩或滚动更新 | 要先验证镜像、健康检查、实例替换和应用无状态边界 |
| 不需要基础结构冗余 | 开发、测试或允许较长停机的单机任务 | 单 VM 或单数据中心故障会中断服务,不能当生产高可用方案 |
Microsoft Learn 当前更推荐灵活编排模式虚拟机规模集,因为它提供更广的高可用与管理能力;可用区对数据中心级故障的隔离能力也高于可用性集。但这不代表所有旧系统都应立即迁移。若应用只有一个实例、数据库只在本机、会话和上传文件没有外置,换一个可用性选项也不会自动变成高可用。
必须继续用可用性集时怎样创建
先在同一资源组和区域创建可用性集,再创建 VM 时传入它。下面示例会创建资源并开始计费,执行前把变量替换成自己的资源组、区域、可用性集名称、VM 名称和镜像。示例使用新 VM,不适合直接处理唯一的生产 VM。
RESOURCE_GROUP="<资源组名>"
LOCATION="<区域名,例如 eastasia>"
AVAILABILITY_SET="<可用性集名称>"
VM_NAME="<虚拟机名称>"
az vm availability-set create \
--resource-group "$RESOURCE_GROUP" \
--name "$AVAILABILITY_SET" \
--location "$LOCATION"
az vm create \
--resource-group "$RESOURCE_GROUP" \
--name "$VM_NAME" \
--image Ubuntu2204 \
--availability-set "$AVAILABILITY_SET" \
--generate-ssh-keys
创建完成后,不要只看命令返回“成功”。继续查询 VM 的可用性集引用,并在门户打开对应可用性集,确认 VM 出现在其虚拟机列表中。
az vm show \
--resource-group "$RESOURCE_GROUP" \
--name "$VM_NAME" \
--query "{powerState:powerState,availabilitySet:availabilitySet.id,location:location}" \
-d -o json
availabilitySet 返回目标资源 ID,才说明关联已写入。若返回空值,先停止后续部署,检查创建命令是否实际引用了可用性集、资源是否同区域,以及当前身份是否有读取和创建 VM 的权限。
从已有 OS 磁盘创建时为什么更容易选不到
从现有 OS 磁盘创建 VM 时,可用性选择会同时受到磁盘位置、磁盘类型和创建路径约束。Microsoft Learn 明确说明:托管可用性集中只能创建使用托管磁盘的 VM。目标可用性集、OS 磁盘、网卡和新 VM 还必须位于兼容的区域与资源关系中。
如果这是恢复或迁移操作,先执行只读查询并保存结果。不要先删磁盘或网卡。
az disk show --resource-group "<资源组名>" --name "<OS 磁盘名>" \
--query "{location:location,managedBy:managedBy,sku:sku.name,diskState:diskState}" -o json
az vm availability-set show --resource-group "<资源组名>" --name "<可用性集名称>" \
--query "{location:location,sku:sku.name,virtualMachines:virtualMachines[].id}" -o json
磁盘仍被其他 VM 的 managedBy 引用时,不能当作自由 OS 磁盘重复附加。区域不同也不能直接放入目标可用性集。应先明确是“新建副本”“恢复旧 VM”还是“迁移高可用方案”,分别使用快照/复制、保留磁盘重建或正式迁移流程。
已有 VM 想加入可用性集时的停机与数据风险
Azure 官方说明,可用性集是在 VM 创建时确定的;变更需要删除并重新创建 VM。删除前必须逐项确认 OS 磁盘和数据盘的删除选项为保留,导出 VM 配置,记录网卡、私网 IP、公网 IP、NSG、负载均衡、扩展、托管身份和磁盘 LUN。生产业务还要准备维护窗口和可验证的备份。
更安全的默认方案是:从磁盘或镜像先创建一台新 VM,加入目标可用性集;完成启动、挂载、网络、监控和应用验收后再切流量。出现异常就把流量切回旧 VM。新 VM、磁盘副本、公网 IP、负载均衡和跨区流量都可能收费,创建前在“查看 + 创建”页核对价格,稳定后再释放旧资源。
按钮仍然没有时按这条分支处理
- 确认是否为新版创建体验;若页面提供返回旧体验的提示,可用于临时完成任务,但不要把它当长期自动化入口。
- 用
az vm list-skus核对目标区域的Aligned可用性集 SKU。 - 确认可用性集与 VM 位于同一区域,并且 VM 使用托管磁盘。
- 若是已有 VM,不再寻找“加入”按钮,改为评估重建、VMSS Flexible 或可用区迁移。
- 若 CLI/ARM 也返回错误,保存时间、订阅 ID、区域、资源 ID、完整错误码和 Correlation ID,遮挡敏感信息后提交 Azure 支持请求。
完成后的验收
至少创建两台承担同一业务角色的 VM,确认它们在可用性集页面分布到不同故障域;再检查负载均衡健康、应用版本、会话和文件是否不依赖单机。只创建可用性集本身通常不额外收费,但其中的 VM、磁盘、公网地址、负载均衡和流量会计费。
需要继续比较架构层级,可阅读单可用区、多可用区和多区域怎么选、云托管负载均衡和自建 Nginx 怎么选、快照、备份和跨区域复制怎么选以及云服务器实例类型怎么选。
官方资料与需求来源
- Microsoft Learn:Availability sets overview
- Microsoft Learn:Availability options for Azure Virtual Machines
- Microsoft Learn:Change the availability set for a VM
- Microsoft Learn:Create a Linux VM and availability set with Azure CLI
- 需求现场:Unable to see Availability Set option when creating VM in Azure
- 需求现场:Availability sets no longer available in the Portal

