Distribuera Azure Spot Virtual Machines med Azure PowerShell

Gäller för: ✔️ Virtuella Linux-datorer:heavy_check_mark: Windows virtuella datorer:heavy_check_mark: Flexibla skalningsuppsättningar

Med Azure Spot Virtual Machines kan du dra nytta av vår outnyttjade kapacitet med betydande kostnadsbesparingar. När Azure behöver kapaciteten tillbaka 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 varierar beroende på region och SKU. Mer information finns i Prissättning för virtuella datorer för Linux och Windows. Mer information om hur du anger maxpriset finns i Azure Spot Virtual Machines – Priser.

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 AMERIKANSKA dollar (USD) med upp till 5 decimaler. Värdet skulle till exempel 0.98765 vara ett maxpris på 0,98765 USD per timme. Om du anger det högsta priset till avlägsnas inte den virtuella datorn baserat -1 på priset. Priset för den virtuella datorn är det aktuella priset för punkt eller priset för en standard-VM, som någonsin är mindre, så länge det finns tillgänglig kapacitet och kvot.

Skapa den virtuella datorn

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

  • -1 så den virtuella datorn avlägsnas inte baserat på priset.
  • ett dollarbelopp, upp till 5 siffror. Det innebär till exempel att den virtuella datorn kommer att friplaceras när priset för en spotVM går ungefär -MaxPrice .98765 98765 USD per timme.

Det här exemplet skapar en spotVM som inte kommer att friplaceras baserat på priser (endast när Azure behöver kapaciteten tillbaka). Avlägsningsprincipen är inställd på att frisöka 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 avlägsnas 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 Allow
$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 avlägsning 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 avlägsning.

I de flesta fall bör du använda funktionen REST API Virtual Machines simulera avlägsning för att hjälpa till med automatiserad testning av program. För REST innebär Response Code: 204 det att den simulerade avlägsning lyckades. Du kan kombinera simulerade avlägsningar med tjänsten Schemalagd händelse föratt automatisera hur din app 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 Azure Schemalagda händelser för att förbereda för underhåll av virtuella datorer.

Kort guide

För ett snabbtest som visar hur en simulerad avlägsning fungerar ska vi gå igenom hur tjänsten för schemalagda händelser ser ut när du simulerar en avlägsning med Hjälp av PowerShell.

Tjänsten Schemalagd händelse aktiveras för tjänsten första gången du gör en begäran om händelser.

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

I 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.

Simulera en avlägsning med Set-AzVMfrån en dator där Az PowerShell-modulen är installerad (t.ex. din lokala dator). Ersätt resursgruppens namn och namnet på den virtuella datorn med ditt eget.

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

Svarsutdata har Status: Succeeded om begäran har gjorts.

Gå snabbt tillbaka till fjärranslutningen till den virtuella spotdatorn och fråga efter Schemalagda händelser slutpunkten 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 tjänsten Schemalagd händelse 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 avlägsnas genom att kontrollera "NotBefore" värdet. Den virtuella datorn avlägsnas inte före den tid som anges i , så det är ditt fönster för att programmet NotBefore ska 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 detaljhandelspriser i Azure för information om priser för virtuella Azure-datorer för SPOT. och meterName skuName innehåller båda Spot .

Om du stöter på ett fel kan du se Felkoder.