Distribuera virtuella Azure Spot-datorer med 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 tar Azure-infrastrukturen bort virtuella Azure Spot-datorer. Därför är Virtuella Azure Spot-datorer bra för arbetsbelastningar som kan hantera avbrott som batchbearbetningsjobb, utvecklings-/testmiljöer, stora beräkningsarbetsbelastningar med mera.
Prissättningen för virtuella Azure Spot-datorer ä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 ställer in maxpriset finns i Azure Spot Virtual Machines – Pricing (Virtuella Azure Spot-datorer – prissättning).
Du har möjlighet att ange ett högsta pris som du är villig att betala per timme för den virtuella datorn. Maxpriset för en virtuell Azure Spot-dator kan anges i US-dollar (USD) med upp till 5 decimaler. Till exempel skulle värdet 0.98765
vara ett maxpris på 0,98765 USD per timme. Om du anger maxpriset till -1
tas inte den virtuella datorn bort baserat på pris. Priset för den virtuella datorn kommer att vara det aktuella priset för spot eller priset för en vanlig virtuell dator, som någonsin är mindre, så länge det finns kapacitet och kvot tillgänglig.
Skapa den virtuella datorn
Skapa en spotVM med New-AzVmConfig för att skapa konfigurationen. Inkludera -Priority Spot
och ange -MaxPrice
till antingen:
-1
så den virtuella datorn tas inte bort baserat på pris.- 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.
Det här exemplet skapar en spotVM som inte frigörs baserat på priser (endast när Azure behöver kapaciteten tillbaka). 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
i Delete
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 programmet svarar på en plötslig borttagning.
I de flesta fall vill du använda REST API Virtual Machines – Simulate Eviction för att hjälpa till med automatiserad testning av program. För REST innebär det Response Code: 204
att den simulerade borttagningen lyckades. Du kan kombinera simulerade borttagningar med tjänsten Schemalagd händelse för att automatisera hur appen svarar när den virtuella datorn tas bort.
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 vm-underhåll.
Snabbtest
För ett snabbt test 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 borttagning 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 som har Az PowerShell-modulen 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 efter 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 hämtar avhysningsmeddelandet 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 den virtuella datorresursen "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 tid som anges i NotBefore
, så det är ditt fönster där programmet kan stängas korrekt.
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 AZURE-pris-API:et för detaljhandelspriser för information om priser för virtuella Azure Spot-datorer. Och meterName
skuName
innehåller båda Spot
.
Om du stöter på ett fel läser du Felkoder.