使用 Azure CLI 來部署 Azure Spot Virtual Machines

適用於:✔️ Linux VM ✔️ 彈性擴展集

使用 Azure Spot Virtual Machines 可讓您以大幅降低的成本使用我們未運用的容量。 在任何時候,只要 Azure 又需要這些容量,Azure 基礎結構就會收回 Azure Spot Virtual Machines。 因此,Azure Spot Virtual Machines 很適合可因應中斷的工作負載,例如批次處理工作、開發/測試環境、大量計算工作負載等。

Azure Spot Virtual Machines 的定價是根據區域和 SKU 的變數為準。 如需詳細資訊,請參閱 LinuxWindows 的 VM 定價。

您可以選擇為 VM 設定您願意支付的每小時價格上限。 Azure 現成虛擬機器的最高價格可以設為美元 (USD),且最多可取小數點後 5 位。 例如,0.98765 值表示價格上限為每小時 $0.98765 美元。 如果您將最大價格設為 -1,則會根據價格來收回 VM。 只要有可用的容量和配額,VM 的價格是 Azure Spot Virtual Machine 目前的價格或標準 VM 的價格 (以價低者計)。 如需設定價格上限的詳細資訊,請參閱 Azure Spot Virtual Machines - 定價

使用 Azure CLI 建立 Azure Spot Virtual Machine 的程序與快速入門文章中所述的一樣。 只要新增 '--priority Spot' 參數,將 --eviction-policy 設定為 Deallocate (預設值) 或 Delete,並提供最高價格或 -1

安裝 Azure CLI

若要建立 Azure Spot Virtual Machines,您必須執行 Azure CLI 2.0.74 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI 模組

使用 az login 登入 Azure。

az login

建立 Azure Spot Virtual Machine

此範例示範如何部署未根據價格收回的 Linux Azure Spot Virtual Machine。 將收回原則設定為解除配置 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 Spot Virtual Machine 的收回動作,以測試您的應用程式對突然收回的回應程度。

在大部分情況下,您會想要使用 REST API Virtual Machines - Simulate Eviction 來協助自動測試應用程式。 對於 REST,Response Code: 204 表示模擬的收回動作成功。 您可以將模擬的收回動作與排程事件服務結合,以自動測試您的應用程式在收回 VM 時會如何回應。

若要查看實際執行的排程事件,請觀看 Azure Friday - 使用 Azure 排程事件來準備 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

快速回到您的 Spot Virtual Machine 的遠端連線,然後再次查詢排程事件端點。 重複下列命令,直到您取得包含更多資訊的輸出為止:

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 Spot Virtual Machine。

如需 Azure Spot Virtual Machine 的相關資訊,請使用 Azure retail prices API 來查詢目前的定價資訊。 meterNameskuName 都包含 Spot

如果您遇到錯誤,請參閱錯誤碼