通过


排查在 Azure 中创建或调整 VM 大小时的分配失败问题

应用到: ✔️ Linux VM ✔️ Windows VM

总结

本文说明一些常见分配故障的原因,并建议可能的补救方法。 在首选区域中提供首选的 VM 类型前,建议遇到部署问题的客户考虑本指南,作为临时解决办法。

症状

创建虚拟机(VM)、启动任何已停止的(已取消分配)VM 或调整 VM 大小时,Microsoft Azure 将计算资源分配给您的订阅。 我们会不断投入其他基础结构和功能,确保始终提供可用于支持客户需求的所有 VM 类型。 但是,由于特定区域中Azure服务的需求空前增长,有时可能会遇到资源分配失败。 尝试在区域中创建、启动 VM 或调整 VM 大小时,可能会出现此问题,同时 VM 可能会显示错误代码和消息,如以下文本所示:

错误代码:AllocationFailed 或 ZonalAllocationFailed

错误消息:“分配失败。 对于此区域中请求的 VM 大小,我们的容量不够。 有关提高分配成功可能性的详细信息,请参阅https://aka.ms/allocation-guidance";

备用建议:收到备用建议意味着所请求的 VM 大小当前在所选区域中不可用。 要增加成功分配虚拟机的机会,可以选择一种备用选项。 只需对 VM 输入选择应用更改,或使用所需选项调整当前现有 VM 的大小,然后尝试重新启动或创建 VM。

例如,请尝试以下替代选项之一,以提高分配成功的可能性:

  • 同一区域的备用 VM 大小:Standard_A2_v2、Standard_A2m_v2 或 Standard_D2a_v4
  • 相同 VM 大小和区域的备用区域:区域 1 和 3

备注

如果要对虚拟机规模集 (VMSS) 进行故障排除,则过程与标准 VM 相同。 要解决此问题,应按照本文中的说明进行操作。

错误消息:“分配失败。 如果尝试将新 VM 添加到包含单个放置组的虚拟机规模集,或者更新虚拟机规模集中包含单个放置组的现有 VM /调整其大小,请注意,此类分配可能仅限于单个群集,并且群集的容量可能不足。 有关提高分配成功可能性的详细信息,请参阅http://aka.ms/allocation-guidance.";

本文说明一些常见分配故障的原因,并建议可能的补救方法。

在首选区域中提供首选的 VM 类型前,建议遇到部署问题的客户考虑本指南,作为临时解决办法。

确定最适合你的情况的方案,然后使用对应的建议解决办法重试分配请求,增加分配成功的可能性。 或者,您可以稍后再试。 这是因为在集群、区域或区中可能已释放了足够的资源,可以满足你的请求。

为确保容量始终可用于工作负载,请考虑使用按需容量预留。 使用此选项可以提前预留计算容量,确保可以根据需要部署 VM,而不会出现分配失败问题。 此方法可以提高部署的可靠性和可预测性。

独立 VM

原因

如果Azure中具有独立 VM,这意味着它不是可用性集或与其他 VM 邻近放置组的一部分, 尝试 CreateStartRedeploy 操作时遇到分配失败,这表明Azure当前缺少足够的容量来满足指定区域或区域中的请求。

解决方法

若要解决此问题,请使用以下某种方法:

  • 重试分配

    有时,此问题可能是暂时的,在短时间内重试分配可以解决问题。

  • 调整 VM 大小

    请考虑将 VM 更改为在区域中可能具有更高可用性的其他大小。

  • 更改地区或区域

    如果当前区域需求较高,请尝试在可能有更多容量的其他区域或可用性区域部署 VM。

根据现有可用性集调整 VM 大小、添加 VM 或启动部分停止的(已解除分配)VM

备注

只有在创建 VM 期间才能将 VM 添加到可用性集。 要将现有 VM 添加到可用性集,或更改 VM 的可用性集,必须删除并重新创建 VM。 有关详细信息,请参阅 使用 Azure PowerShell0 更改 VM 的可用性集。

原因

必须在托管现有可用性集的原始群集上请求调整 VM 大小或向现有可用性集添加 VM。 群集可能不支持请求的 VM 大小,或者当前容量不够。

部分解除分配是指在可用性集中停止(解除分配)了一台或多台(但不是全部)虚拟机。 解除分配 VM 时会释放相关联的资源。 在已部分解除分配的可用性集中启动 VM 相当于向现有可用性集添加 VM。 因此,必须在托管容量可能不足的现有可用性集的原始群集上发出分配请求。

解决方法

若要解决此问题,请使用以下某种方法:

  • 对于新的 VM 部署,如果此 VM 可以属于不同的可用性集,则请在不同的可用性集(位于相同区域)中创建 VM。 然后,可以将这个新的 VM 添加到相同的虚拟网络中。

  • 请考虑将 VM 大小调整为可能在区域中具有更高可用性的其他大小。 要确保可用性集中支持 VM 大小,请使用“可用性集”-“列出可用大小”-“REST API”

  • 停止(解除分配)在同一可用性集中的所有 VM,然后批量启动所有相关的 VM,以允许从所有可用的群集进行分配,而不是仅从当前可用性集所在的群集进行分配。

    要停止可用性集中的所有 VM,请执行以下步骤:

    1. 在 Azure 门户中进入 虚拟机
    2. 选择“添加筛选器”并为要管理的可用性集添加筛选器。
    3. 选中可用性集中所有 VM 的复选框。
    4. 选择“停止”,然后等待操作完成,并等待所有 VM 报告“已停止(已解除分配)”状态。
    5. 选择“启动”以再次分配所有 VM。

在可用性集中启动完全停止(已解除分配)的 VM

原因

完全解除分配是指在可用性集中停止并解除分配所有虚拟机(VM)。 启动这些 VM 的分配请求将针对区域中支持所需大小的所有群集。

解决方法

若要解决此问题,请使用以下某种方法:

  • 重试分配

    有时,此问题可能是暂时的,在短时间内重试分配可以解决问题。

  • 调整 VM 大小

    请考虑将 VM 大小调整为可能在区域中具有更高可用性的其他大小。 要确保可用性集中支持 VM 大小,请使用“可用性集”-“列出可用大小”-“REST API”

  • 更改地区或区域

    如果当前区域需求较高,请尝试将 VM 部署或迁移到可能有更多容量的其他区域或可用性区域。

可用区中虚拟机的分配失败

原因

Azure可用性区域是在物理和逻辑上分开的Azure区域内的数据中心。 每个可用性区域都有自己独立的电源、冷却和网络基础结构。 它们旨在将故障隔离到单个区域,以确保高可用性和复原能力,从而最大限度地减少对同一区域中其他区域的影响。

但是,与可用性区域关联的其他部署约束条件可能会导致分配失败。

解决方法

若要解决此问题,请使用以下某种方法:

  • 重试分配

    有时,稍后重试分配请求可能会有所帮助,因为资源可能已在该区域内释放。

  • 调整 VM 大小

    请考虑将 VM 大小调整为可能在区域中具有更高可用性的其他大小。

  • 更改地区或区域

    如果当前区域需求较高,请尝试将 VM 部署或迁移到可能有更多容量的其他区域或可用性区域。 可以使用以下方法更改区域:

    • 在不同区域中使用 OS 磁盘的副本,或者在没有区域限制的情况下创建新的 VM。 移除区域约束会将分配选项扩展到整个区域,而不是将其限制为单个区域。

      有关详细信息,请参阅以下文章:

    • 在不同区域中迁移或创建 VM。 有关详细信息,请参阅 跨区域迁移 Azure 虚拟机

约束过多导致的分配失败

原因

当Azure计算平台无法分配 VM 以满足请求中指定的所需约束时,会发生过度约束的分配失败。 当在可用资源中无法满足特定要求时,通常会发生这些故障。 类似OverconstrainedZonalAllocationRequestOverconstrainedAllocationRequest的错误通常指示它们的存在。

这些约束通常(但并非总是)包含以下项:

  • VM 大小/SKU
  • 加速网络
  • 可用性区域
  • 临时磁盘
  • 邻近放置组 (PPG)
  • Ultra Disk 或 PremiumSSDv2

解决方法

若要解决此问题,请使用以下某种方法:

  • 重试分配

    有时,稍后重试分配请求可能会有所帮助,因为资源可能已在该区域内释放。

  • 调整 VM 大小

    请考虑将 VM 大小调整为可能在区域中具有更高可用性的其他大小。

  • 更改地区或区域

    如果当前区域需求较高,请尝试将 VM 部署或迁移到可能有更多容量的其他区域或可用性区域。 可以使用以下方法更改区域:

    • 在不同区域中使用 OS 磁盘的副本,或者在没有区域限制的情况下创建新的 VM。 移除区域约束会将分配选项扩展到整个区域,而不是将其限制为单个区域。

      有关详细信息,请参阅以下文章:

    • 在不同区域中迁移或创建 VM。 有关详细信息,请参阅 跨区域迁移 Azure 虚拟机

  • 调整可能限制分配的约束:该区域可能对 VM SKU 有充足的可用性。 但是,定义的约束可能会阻止分配。 要增加成功分配的可能性,请考虑通过以下方式调整约束:

    • 禁用加速网络。
    • 从任何邻近放置组中移除 VM。
    • 移除任何 UltraSSD 或 PemiumSSDv2 磁盘。

使用邻近放置组的虚拟机分配失败

邻近放置组可确保资源并置在同一数据中心内,以减少延迟。 但是,添加的部署约束有时可能会导致分配失败。 有关详细信息和最佳做法,请参阅邻近放置组

原因

请求启动或分配邻近放置组中的第一个 VM 时,将自动选择数据中心。 如果所需的 VM 大小在该数据中心不可用,请求将失败。 在动态添加或移除 VM 实例的弹性工作负载的情况下,强制实施邻近放置组约束可能会导致分配失败,指示无法完成分配请求。

解决方法

解除分配邻近放置组中的所有 VM,并尝试更改启动 VM 的顺序。 首先使用限制最严格的 SKU 启动 VM 可以增加分配成功的可能性。

针对较旧 VM 大小(Av1、Dv1、DSv1、D15v2、DS15v2 等)的分配失败

随着Azure基础结构的扩展,我们部署了旨在支持最新虚拟机类型的较新一代硬件。 某些较旧 VM 系列不在我们最新的基础结构上运行。 因此,客户偶尔可能遇到这些旧版 SKU 的分配失败。 为避免此问题,建议使用旧版虚拟机系列的客户考虑按以下建议迁移至等效的新版 VM。 这些 VM 已针对最新的硬件进行优化,使你能够享受更高的性价比。

旧版 VM 系列/大小 建议使用较新的虚拟机系列和大小 详细信息
Av1 系列 Av2 系列 https://azure.microsoft.com/blog/new-av2-series-vm-sizes/
Dv1 或 DSv1 系列(D1 到 D5) Dv3 或 DSv3 系列 https://azure.microsoft.com/blog/introducing-the-new-dv3-and-ev3-vm-sizes/
Dv1 或 DSv1 系列(D11 到 D14) Ev3 或 ESv3 系列
D15v2 或 DS15v2 请考虑迁移到 D16v3/DS16v3 或 D32v3/DS32v3。 这些为在最新硬件上运行而设计。 如果要确保 VM 实例独立于单个客户专用的硬件,请考虑迁移到新的独立 VM 大小(E64i_v3 或 E64is_v3),这些大小旨在在最新一代硬件上运行。 https://azure.microsoft.com/blog/new-isolated-vm-sizes-now-available/

大型部署(超过 500 个核心)的分配失败

减少请求的 VM 大小的实例数,然后重试部署操作。 此外,对于较大的部署,可能需要使用多个放置组评估Azure虚拟机规模集。 VM 实例的数量可根据需求或预定的计划自动增加或减少,而在作为多放置组部署时,由于部署可以跨多个群集进行分布,因此分配成功的可能性更大。 详细了解如何使用大型虚拟机规模集,以及如何将现有规模集转换为跨多个放置组。 请注意,你可以将规模集从支持单个放置组更改为支持多个放置组,但无法执行另一个方向的转换。

背景信息

分配的工作原理

Azure数据中心中的服务器分区为群集。 通常,在多个群集中尝试分配请求,但分配请求中的某些约束(例如 VM 大小、超级 SSD 和邻近放置组)可能会强制Azure平台仅尝试一个群集中的请求。 以下示例图 1 演示在多个群集中尝试正常分配的情况。

示例图 1 的屏幕截图,其中显示在多个群集中尝试的分配。

发生分配失败的原因

如果分配包含大量约束条件,由于可用的资源池较小,很可能找不到闲置资源。 此外,如果分配请求受到限制(例如,使用邻近放置组时,但所请求的资源类型不受群集集和附近群集的支持),则即使群集具有可用资源,请求也会失败。 以下示例图 2 演示分配失败的情况,因为与邻近放置组关联的候选群集没有闲置资源。 图 3 演示了分配失败的情况,因为与邻近放置组关联的候选群集不支持所请求的 VM 大小,即使群集具有可用资源。

示例图 2 的屏幕截图,显示因没有可用的闲置资源导致的分配失败,示例图 3 显示因大小不受支持导致的分配失败。