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

使用 Azure CLI 部署 Azure 现成虚拟机

适用于:✔️ Linux VM ✔️ 灵活规模集

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

Azure 现成虚拟机的定价因地区和 SKU 而异。 有关详细信息,请参阅针对 LinuxWindows 的 VM 定价。

可以选择设置愿意为 VM 支付的每小时最高价格。 Azure 现成虚拟机的最高价格可以美元 (USD) 形式设置,最多保留 5 位小数。 例如,值 0.98765 表示最高价格为 0.98765 美元/小时。 如果将最高价格设置为 -1,则会根据价格逐出 VM。 VM 价格是 Azure 现成虚拟机的当前价格或标准 VM 的价格(两者以较低者为准,但一定要有容量和配额可用)。 有关设置最高价格的详细信息,请参阅 Azure 现成虚拟机 - 定价

使用 Azure CLI 创建 Azure 现成虚拟机的过程与此相同,详见快速入门文章。 只需添加“--priority Spot”参数,即可将 --eviction-policy 设置为 Deallocate(默认值)或 Delete,并提供最高价格或 -1

安装 Azure CLI

要创建 Azure 现成虚拟机,需要运行 Azure CLI 版本 2.0.74 或更高版本。 若要查找版本,请运行 az --version。 如需进行安装或升级,请参阅安装 Azure CLI

使用 az login 登录到 Azure。

az login

创建 Azure 现成虚拟机

本示例演示如何部署不会基于价格而被逐出的 Linux Azure 现成虚拟机。 逐出策略设置为解除分配 VM,以便以后可以重新启动该虚拟机。 如果要在 VM 被逐出时删除该 VM 和基础磁盘,请将 --eviction-policy 设置为 Delete

az group create -n mySpotGroup -l eastus
az vm create \
    --resource-group mySpotGroup \
    --name myVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --priority Spot \
    --max-price -1 \
	--eviction-policy Deallocate

创建 VM 后,可以通过查询来查看资源组中所有 VM 的最高计费价格。

az vm list \
   -g mySpotGroup \
   --query '[].{Name:name, MaxPrice:billingProfile.maxPrice}' \
   --output table

模拟逐出

可以使用 REST、PowerShell 或 CLI 模拟 Azure 现成虚拟机逐出,以测试应用程序对突然逐出的响应情况。

大多数情况下,需要使用 REST API 虚拟机 - 模拟逐出来帮助自动测试应用程序。 对于 REST,Response Code: 204 意味着模拟逐出成功。 可以将模拟逐出与计划事件服务相结合,以自动测试应用如何响应 VM 逐出。

若要了解操作中的计划事件,请观看 Azure Friday - 使用 Azure Scheduled Events 准备 VM 维护

快速测试

要进行快速测试以显示如何进行模拟逐出,可通过演练查询计划事件服务来查看使用 Azure CLI 模拟逐出时的具体情况。

首次对事件发出请求时,要针对服务启用计划事件服务。

远程登录到 VM,然后打开命令提示符。

在 VM 的命令提示符处键入:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

第一次响应可能需要长达 2 分钟的时间。 自此之后,几乎会立即显示输出。

在已安装 Azure CLI 的计算机(例如本地计算机)中,使用 az vm simulate-eviction 模拟逐出。 将资源组名称和 VM 名称替换成自己的名称。

az vm simulate-eviction --resource-group mySpotRG --name mySpot

如果请求已成功完成,则响应输出将包括“Status: Succeeded”。

快速返回到现成虚拟机的远程连接,再次查询 Scheduled Events 终结点。 重复以下命令,直到获得包含详细信息的输出:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

当计划事件服务收到逐出通知后,将会受到与以下输出类似的响应:

{"DocumentIncarnation":1,"Events":[{"EventId":"A123BC45-1234-5678-AB90-ABCDEF123456","EventStatus":"Scheduled","EventType":"Preempt","ResourceType":"VirtualMachine","Resources":["myspotvm"],"NotBefore":"Tue, 16 Mar 2021 00:58:46 GMT","Description":"","EventSource":"Platform"}]}

可以看到 "EventType":"Preempt",资源为 VM 资源 "Resources":["myspotvm"]

此外,还可以通过查看 "NotBefore" 了解 VM 的逐出条件 - VM 在该指定时间之前不会被逐出,因为这是应用程序正常关闭的时间窗口。

后续步骤

此外,还可以通过 Azure PowerShell门户模板创建 Azure 现成虚拟机。

使用 Azure 零售价格 API查询当前的定价信息,了解有关 Azure 现成虚拟机的信息。 meterNameskuName 都包含 Spot

如果遇到错误,请参阅错误代码