你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure CLI 部署 Azure 现成虚拟机
适用于:✔️ Linux VM ✔️ 灵活规模集
使用 Azure 现成虚拟机,可以利用未使用的容量,大幅降低成本。 每当 Azure 需要回收容量时,Azure 基础结构就会逐出 Azure 现成虚拟机。 因此,Azure 现成虚拟机非常适用于那些处理服务中断的工作负荷(例如批处理作业)、开发/测试环境、大型计算工作负荷等。
Azure 现成虚拟机的定价因地区和 SKU 而异。 有关详细信息,请参阅针对 Linux 和 Windows 的 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 现成虚拟机的信息。 meterName
和 skuName
都包含 Spot
。
如果遇到错误,请参阅错误代码。