Distribuera Azure Spot Virtual Machines med hjälp av Azure PowerShell

Gäller för: ✔️ Virtuella Linux-datorer ✔️ med virtuella Windows-datorer ✔️ – flexibla skalningsuppsättningar

Med Azure Spot Virtual Machines kan du dra nytta av vår outnyttjade kapacitet till betydande kostnadsbesparingar. När Som helst när Azure behöver tillbaka kapaciteten avlägsnar Azure-infrastrukturen Azure Spot-Virtual Machines. Därför är Azure Spot Virtual Machines bra för arbetsbelastningar som kan hantera avbrott som batchbearbetningsjobb, utvecklings-/testmiljöer, stora beräkningsarbetsbelastningar med mera.

Prissättningen för Azure Spot Virtual Machines är variabel, baserat på region och SKU. Mer information finns i Priser för virtuella datorer för Linux och Windows. Mer information om hur du anger maxpriset finns i Azure Spot Virtual Machines – prissättning.

Du kan välja att ange ett högsta pris som du är villig att betala per timme för den virtuella datorn. Det maximala priset för en virtuell Azure Spot-dator kan anges i US-dollar (USD) med upp till 5 decimaler. Värdet 0.98765skulle till exempel vara ett maxpris på 0,98765 USD per timme. Om du anger maxpriset till -1tas den virtuella datorn inte bort baserat på pris. Priset för den virtuella datorn är det aktuella priset för spot eller priset för en vanlig virtuell dator, vilket någonsin är mindre, så länge det finns tillgänglig kapacitet och kvot.

Skapa den virtuella datorn

Skapa en spotVM med New-AzVmConfig för att skapa konfigurationen. Inkludera -Priority Spot och ställ in -MaxPrice på något av följande:

  • -1 så att den virtuella datorn inte avlägsnas baserat på pris.
  • ett dollarbelopp, upp till 5 siffror. Det innebär till exempel -MaxPrice .98765 att den virtuella datorn frigörs när priset för en spotVM kostar cirka 9 8765 USD per timme.

I det här exemplet skapas en spotVM som inte frigörs baserat på prissättning (endast när Azure behöver tillbaka kapaciteten). Borttagningsprincipen är inställd på att frigöra den virtuella datorn så att den kan startas om vid ett senare tillfälle. Om du vill ta bort den virtuella datorn och den underliggande disken när den virtuella datorn tas bort anger du -EvictionPolicy till Delete i New-AzVMConfig.

$resourceGroup = "mySpotRG"
$location = "eastus"
$vmName = "mySpotVM"
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
New-AzResourceGroup -Name $resourceGroup -Location $location
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
   -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup `
   -Location $location -Name MYvNET -AddressPrefix 192.168.0.0/16 `
   -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration and set this to be an Azure Spot Virtual Machine

$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1 -Priority "Spot" -MaxPrice -1 -EvictionPolicy Deallocate | `
Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzVMNetworkInterface -Id $nic.Id

New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

När den virtuella datorn har skapats kan du fråga för att se maxpriset för alla virtuella datorer i resursgruppen.

Get-AzVM -ResourceGroupName $resourceGroup | `
   Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}

Simulera en avlägsning

Du kan simulera en borttagning av en virtuell Azure Spot-dator med hjälp av REST, PowerShell eller CLI för att testa hur väl ditt program svarar på en plötslig borttagning.

I de flesta fall vill du använda REST-API:et Virtual Machines – Simulera borttagning för att hjälpa till med automatiserad testning av program. För REST innebär det Response Code: 204 att den simulerade avlägsningen lyckades. Du kan kombinera simulerade borttagningar med tjänsten Schemalagd händelse för att automatisera hur appen svarar när den virtuella datorn avlägsnas.

Om du vill se schemalagda händelser i praktiken kan du titta på Azure Friday – Använda Schemalagda Händelser i Azure för att förbereda för underhåll av virtuella datorer.

Kort guide

För ett snabbtest som visar hur en simulerad borttagning fungerar ska vi gå igenom frågan till den schemalagda händelsetjänsten för att se hur det ser ut när du simulerar en avlägsning med Hjälp av PowerShell.

Tjänsten Schemalagd händelse är aktiverad för din tjänst första gången du begär händelser.

Fjärranslut till den virtuella datorn och öppna sedan en kommandotolk.

Från kommandotolken på den virtuella datorn skriver du:

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

Det första svaret kan ta upp till 2 minuter. Från och med nu bör de visa utdata nästan omedelbart.

Från en dator där Az PowerShell-modulen är installerad (till exempel din lokala dator) simulerar du en borttagning med Set-AzVM. Ersätt resursgruppens namn och VM-namn med ditt eget.

Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction

Svarsutdata kommer att ha Status: Succeeded om begäran har gjorts.

Gå snabbt tillbaka till fjärranslutningen till den virtuella datorn för oanvänd kapacitet och fråga slutpunkten Schemalagda händelser igen. Upprepa följande kommando tills du får utdata som innehåller mer information:

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

När den schemalagda händelsetjänsten får avlägsningsmeddelandet får du ett svar som ser ut ungefär så här:

{"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"}]}

Du kan se att "EventType":"Preempt", och resursen är VM-resursen "Resources":["myspotvm"].

Du kan också se när den virtuella datorn tas bort genom att kontrollera värdet "NotBefore" . Den virtuella datorn tas inte bort före den angivna tiden i NotBefore, så det är ditt fönster där programmet kan stängas på ett smidigt sätt.

Nästa steg

Du kan också skapa en virtuell Azure Spot-dator med hjälp av Azure CLI, portalen eller en mall.

Fråga aktuell prisinformation med hjälp av API:et för azure-detaljhandelspriser för information om priser för virtuella Azure-datorer för oanvänd kapacitet. meterName Och skuName innehåller Spotbåda .

Om du stöter på ett fel läser du Felkoder.