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

适用于虚拟机规模集的 Azure 现成虚拟机

对规模集使用 Azure 现成虚拟机,可以利用未使用的容量,同时大幅降低成本。 每当 Azure 需要回收容量时,Azure 基础结构就会逐出 Azure 现成虚拟机实例。 因此,Azure 现成虚拟机实例非常适合用于处理服务中断(例如批处理作业)的工作负载、开发/测试环境、大型计算工作负载等。

可用容量可能因大小、区域、一天内的时间等因素而异。 在规模集上部署 Azure 现成虚拟机实例时,Azure 仅在有可用容量但没有这些实例的 SLA 的情况下分配实例。 Azure 现成虚拟机规模集部署在单个容错域中,不提供高可用性保证。

限制

Azure 现成虚拟机不支持以下大小:

  • B 系列
  • 任意大小的促销版本(例如 Dv2、NV、NC、H 促销大小)

Azure 现成虚拟机可以部署到除由 21Vianet 运营的 Microsoft Azure 以外的任何区域。

当前支持以下套餐类型

  • 企业协议
  • 即用即付套餐代码 (003P)
  • 赞助(0036P 和 0136P)
  • 对于云服务提供商 (CSP),请参阅合作伙伴中心或直接联系合作伙伴。

定价

根据地区和 SKU 不同,Azure 现成虚拟机实例的定价也不尽相同。 有关详细信息,请参阅针对 LinuxWindows 的定价。

使用可变定价,你可以设置最高价格,以美元 (USD) 为单位,最多可使用五个小数位。 例如,值 0.98765 表示最高价格为 0.98765 美元/小时。 如果将最高价格设置为 -1,则不会根据价格逐出实例。 实例的价格将是 Azure 现成虚拟机的当前价格或标准实例的价格,只要有可用的容量和配额,价格就会更低。

逐出策略

使用 Azure 现成虚拟机创建规模集时,可将逐出策略设置为“解除分配”(默认值)或“删除” 。

“解除分配”策略可将逐出的实例移到已停止-已解除分配状态,以允许重新部署逐出的实例。 但是,不保证分配将成功。 已解除分配的虚拟机将计入规模集实例配额,并向你收取基础磁盘的费用。

如果希望在逐出实例后将其删除,可以将逐出策略设置为删除。 将逐出策略设置为删除后,可以通过增大规模集实例计数属性来创建新的 VM。 已逐出的虚拟机与其基础磁盘一起删除,因此不会向你收取存储费用。 也可以使用规模集的自动缩放功能来自动尝试并补偿已逐出的虚拟机,但是,不能保证分配成功。 我们建议仅当逐出策略设置为删除时才对 Azure 现成虚拟机规模集使用自动缩放功能,以免产生磁盘费用和达到配额限制。

用户可以选择通过 Azure Scheduled Events 来接收 VM 内通知。 如果正在逐出虚拟机,并且在逐出之前有 30 秒的时间完成任何作业并执行关闭任务,则会通知你。

逐出历史记录

你可以在门户中的某个区域查看每个大小的历史定价和逐出速率。 选择“查看定价历史记录并比较附近区域的价格”,查看特定大小的定价图或定价表。 下图中的定价和逐出速率只是示例。

图表

Screenshot of the region options with the difference in pricing and eviction rates as a chart.

Table

Screenshot of the region options with the difference in pricing and eviction rates as a table.

尝试还原

平台级功能使用 AI 自动尝试在一定范围内恢复已逐出的 Azure 现成虚拟机实例,以保持目标实例数。

尝试还原功能优势:

  • 尝试还原由于容量原因而逐出的 Azure 现成虚拟机。
  • 还原的 Azure 现成虚拟机预计运行持续时间较长,且容量触发逐出的可能性较低。
  • 提高 Azure 现成虚拟机生命期,使工作负载运行更长持续时间。
  • 帮助虚拟机规模集维持 Azure 现成虚拟机的目标计数,类似于维持即用即付 VM 已有的 目标计数功能。

尝试还原功能在使用自动缩放的规模集中处于禁用状态。 规模集中的 VM 数由自动缩放规则驱动。

放置组

放置组是类似于 Azure 可用性集的构造,具有自己的容错域和升级域。 默认情况下,一个规模集包含一个放置组,最大大小为 100 台 VM。 如果将名为 singlePlacementGroup 的规模集属性设置为 false,则该规模集可以由多个放置组组成,其范围为 0-1,000 台 VM。

重要

除非将 Infiniband 与 HPC 一起使用,否则强烈建议将规模集属性 singlePlacementGroup 设置为 false 以启用多个放置组,以便更好地在 Azure 区域或 DNS 区域中进行缩放。

在规模集中部署 Azure 现成虚拟机

若要在规模集中部署 Azure 现成虚拟机,可将新的 Priority 标志设置为 Spot 。 规模集中的所有 VM 都将设置为 Spot。 若要创建包含 Azure 现成虚拟机的规模集,请使用以下方法之一:

门户

创建使用 Azure 现成虚拟机的规模集的过程与入门文章中详述的过程一样。 部署规模集时,可以选择设置“现成”标志、逐出类型、逐出策略,如果要尝试还原实例:Create a scale set with Azure Spot Virtual Machines

Azure CLI

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及应执行的操作,请转到针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心

创建包含 Azure 现成虚拟机的规模集的过程与入门文章中详述的过程一样。 只需添加“--Priority Spot”,并添加 --max-price。 在此示例中,对于 --max-price,我们使用了 -1,因此系统不会基于价格来逐出实例。

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image Ubuntu2204 \
    --orchestration-mode Flexible \
    --single-placement-group false \
    --admin-username azureuser \
    --generate-ssh-keys \
    --priority Spot \
    --eviction-policy Deallocate \
    --max-price -1 \
    --enable-spot-restore True \
    --spot-restore-timeout PT1H

PowerShell

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及应执行的操作,请转到针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心

创建包含 Azure 现成虚拟机的规模集的过程与入门文章中详述的过程一样。 只需向 New-AzVmssConfig 中添加“-Priority Spot”并提供 -max-price

$vmssConfig = New-AzVmssConfig `
    -Location "East US 2" `
    -SkuCapacity 2 `
    -OrchestrationMode "Flexible" `
    -SkuName "Standard_DS2" `
    -Priority "Spot" `
    -max-price -1 `
    -EnableSpotRestore `
    -SpotRestoreTimeout 60 `
    -EvictionPolicy delete

资源管理器模板

创建使用 Azure 现成虚拟机的规模集的过程与适用于 LinuxWindows 的入门文章中详述的过程一样。

对于 Azure 现成虚拟机模板部署,请使用 "apiVersion": "2019-03-01" 或更高版本。

在模板中将 priorityevictionPolicybillingProfilespotRestoryPolicy 属性添加到 "virtualMachineProfile": 节,并将 "singlePlacementGroup": false, 属性添加到 "Microsoft.Compute/virtualMachineScaleSets" 节:


{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  },
  "properties": {
    "singlePlacementGroup": false,
    }

        "virtualMachineProfile": {
              "priority": "Spot",
                "evictionPolicy": "Deallocate",
                "billingProfile": {
                    "maxPrice": -1
                },
                "spotRestorePolicy": {
                  "enabled": "bool",
                  "restoreTimeout": "string"
    },
            },

若要在逐出实例后将其删除,请将 evictionPolicy 参数更改为 Delete

模拟逐出

可以模拟 Azure 现成虚拟机的逐出,以测试应用对突然逐出的响应情况。

将以下内容替换为你的信息:

  • subscriptionId
  • resourceGroupName
  • vmName
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction?api-version=2020-06-01

Response Code: 204 意味着模拟逐出成功。

有关详细信息,请参阅测试模拟逐出通知

常见问题解答

问:创建后,Azure 现成虚拟机实例是否与标准实例相同?

:是,但 Azure 现成虚拟机没有 SLA,可以随时将其逐出。

问: 当被逐出但仍然需要容量时,该怎么办?

答:如果马上需要容量,建议使用标准 VM,而不要使用 Azure 现成虚拟机。

问:如何为 Azure 现成虚拟机管理配额?

答:Azure 现成虚拟机实例和标准实例具有单独的配额池。 Azure 现成虚拟机配额在虚拟机和规模集实例之间共享。 有关详细信息,请参阅 Azure 订阅和服务限制、配额与约束

问:是否可以为 Azure 现成虚拟机申请额外的配额?

答:是的,可以通过标准配额请求进程提交增加 Azure 现成虚拟机配额的请求。

问:是否可以将现有规模集转换为 Azure 现成虚拟机规模集?

答: 不可以,只有在创建时才支持设置 Spot 标志。

问: 如果我过去使用的是表示低优先级规模集的 low,是否需要开始改用 Spot

答: 目前,lowSpot 都有效,但你应该开始改用 Spot

问:是否可以创建一个同时包含常规 VM 和 Azure 现成虚拟机的规模集?

答: 不可以,一个规模集只能支持一种优先级类型。

问:是否可以将自动缩放用于 Azure 现成虚拟机规模集?

答:是,可以对 Azure 现成虚拟机规模集设置自动缩放规则。 如果你的 VM 被逐出,则自动缩放可以尝试创建新的 Azure 现成虚拟机。 但记住,不保证会创建成功。

问:自动缩放是否可用于这两种收回策略(解除分配和删除)?

答:可以,但建议使用自动缩放时将收回策略设置为删除。 这是因为解除分配的实例将计入规模集的容量计数。 如果使用自动缩放,由于实例已解除分配且已收回,实例很可能会快速达到目标数。 此外,缩放操作可能会受到现成逐出的影响。 例如,在缩放操作期间,由于存在多个现成逐出,虚拟机规模集实例可能会低于设置的最小计数。

问: 我可以在何处发布问题?

答:你可以在 Q&A 中发布问题并使用 azure-spot 来标记问题。

后续步骤

有关价格详细信息,请查看虚拟机规模集定价页