Azure 创建 VM 看不到可用性集怎么办?入口、CLI 与方案选择

先区分新版向导入口变化和区域能力,再决定继续用可用性集、可用区或 VMSS Flexible

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、负载均衡和跨区流量都可能收费,创建前在“查看 + 创建”页核对价格,稳定后再释放旧资源。

按钮仍然没有时按这条分支处理

  1. 确认是否为新版创建体验;若页面提供返回旧体验的提示,可用于临时完成任务,但不要把它当长期自动化入口。
  2. az vm list-skus 核对目标区域的 Aligned 可用性集 SKU。
  3. 确认可用性集与 VM 位于同一区域,并且 VM 使用托管磁盘。
  4. 若是已有 VM,不再寻找“加入”按钮,改为评估重建、VMSS Flexible 或可用区迁移。
  5. 若 CLI/ARM 也返回错误,保存时间、订阅 ID、区域、资源 ID、完整错误码和 Correlation ID,遮挡敏感信息后提交 Azure 支持请求。

完成后的验收

至少创建两台承担同一业务角色的 VM,确认它们在可用性集页面分布到不同故障域;再检查负载均衡健康、应用版本、会话和文件是否不依赖单机。只创建可用性集本身通常不额外收费,但其中的 VM、磁盘、公网地址、负载均衡和流量会计费。

需要继续比较架构层级,可阅读单可用区、多可用区和多区域怎么选云托管负载均衡和自建 Nginx 怎么选快照、备份和跨区域复制怎么选以及云服务器实例类型怎么选

官方资料与需求来源

云服务器教程Azure Front Door 一直 NotStarted 怎么办?CONFIG_NOCACHE 排查2026-09-21云服务器教程Azure Functions 显示 0 worker、HTTP 503 怎么办?实例分配与启动排查2026-09-20云服务器教程Azure 自定义域名仍绑定旧订阅怎么办?App Service 与 Static Web Apps 排查2026-09-18

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区