Dela via


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.98765vara ett maxpris på 0,98765 USD per timme. Om du anger maxpriset till -1tas 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.