Azure Spot Virtual Machines implementeren met behulp van Azure PowerShell

Van toepassing op: ✔️ Linux-VM's ✔️ Windows-VM's ✔️ Flexibele schaalsets

Met Behulp van Azure Spot Virtual Machines kunt u profiteren van onze ongebruikte capaciteit tegen aanzienlijke kostenbesparingen. Op elk moment dat Azure de capaciteit terug nodig heeft, wordt Azure Spot Virtual Machines verwijderd door de Azure-infrastructuur. Daarom zijn Azure Spot Virtual Machines ideaal voor workloads die onderbrekingen kunnen verwerken, zoals batchverwerkingstaken, ontwikkel-/testomgevingen, grote rekenworkloads en meer.

Prijzen voor Azure Spot Virtual Machines zijn variabel op basis van regio en SKU. Zie VM-prijzen voor Linux en Windows voor meer informatie. Zie Azure Spot Virtual Machines - Prijzen voor meer informatie over het instellen van de maximale prijs.

U hebt de optie om een maximumprijs in te stellen die u per uur voor de VM wilt betalen. De maximumprijs voor een Azure Spot Virtual Machine kan worden ingesteld in Amerikaanse dollars (USD), met maximaal 5 decimalen. De waarde 0.98765is bijvoorbeeld een maximale prijs van USD 0,98765 per uur. Als u de maximumprijs instelt op -1, wordt de VM niet verwijderd op basis van de prijs. De prijs voor de VM is de huidige spotprijs of de prijs voor een standaard-VM, die altijd lager is, zolang er capaciteit en quotum beschikbaar is.

De VM maken

Maak een spotVM met New-AzVmConfig om de configuratie te maken. Opnemen -Priority Spot en instellen -MaxPrice op een van de volgende opties:

  • -1 zodat de VM niet wordt verwijderd op basis van de prijs.
  • een bedrag in dollars, maximaal 5 cijfers. Betekent bijvoorbeeld -MaxPrice .98765 dat de toewijzing van de VM ongedaan wordt gemaakt zodra de prijs voor een spotVM ongeveer $ 98765 per uur bedraagt.

In dit voorbeeld wordt een spotVM gemaakt die niet ongedaan wordt gemaakt op basis van prijzen (alleen wanneer Azure de capaciteit terug nodig heeft). Het verwijderingsbeleid is ingesteld om de toewijzing van de VM ongedaan te maken, zodat deze op een later tijdstip opnieuw kan worden opgestart. Als u de VM en de onderliggende schijf wilt verwijderen wanneer de VM wordt verwijderd, stelt u in -EvictionPolicyNew-AzVMConfigop Delete .

$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

Nadat de VM is gemaakt, kunt u een query uitvoeren om de maximumprijs voor alle virtuele machines in de resourcegroep te bekijken.

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

Een verwijdering simuleren

U kunt een verwijdering van een Azure Spot Virtual Machine simuleren met behulp van REST, PowerShell of de CLI om te testen hoe goed uw toepassing reageert op een plotselinge verwijdering.

In de meeste gevallen wilt u de REST API-Virtual Machines - Verwijdering simuleren gebruiken om te helpen bij het geautomatiseerd testen van toepassingen. Voor REST betekent een Response Code: 204 dat de gesimuleerde verwijdering is geslaagd. U kunt gesimuleerde verwijderingen combineren met de geplande gebeurtenisservice om te automatiseren hoe uw app reageert wanneer de virtuele machine wordt verwijderd.

Als u geplande gebeurtenissen in actie wilt zien, bekijkt u Azure Friday - Azure Scheduled Events gebruiken om het vm-onderhoud voor te bereiden.

Snelle test

Voor een snelle test om te laten zien hoe een gesimuleerde verwijdering werkt, gaan we een query uitvoeren op de geplande gebeurtenisservice om te zien hoe deze eruitziet wanneer u een verwijdering simuleert met behulp van PowerShell.

De service Geplande gebeurtenis is ingeschakeld voor uw service wanneer u voor het eerst een aanvraag voor gebeurtenissen indient.

Ga op afstand naar uw VM en open vervolgens een opdrachtprompt.

Typ in de opdrachtprompt op uw VM:

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

Dit eerste antwoord kan maximaal 2 minuten duren. Vanaf nu moeten ze bijna onmiddellijk uitvoer weergeven.

Vanaf een computer waarop de Az PowerShell-module is geïnstalleerd (zoals uw lokale computer), simuleert u een verwijdering met behulp van Set-AzVM. Vervang de naam van de resourcegroep en de NAAM van de VM door uw eigen naam.

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

De antwoorduitvoer heeft Status: Succeeded als de aanvraag is gedaan.

Ga snel terug naar uw externe verbinding met uw virtuele spot-machine en voer opnieuw een query uit op het eindpunt Geplande gebeurtenissen. Herhaal de volgende opdracht totdat u een uitvoer krijgt die meer informatie bevat:

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

Wanneer de geplande gebeurtenisservice de verwijderingsmelding ontvangt, krijgt u een antwoord dat er ongeveer als volgt uitziet:

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

U kunt zien dat "EventType":"Preempt"en de resource de VM-resource "Resources":["myspotvm"]is.

U kunt ook zien wanneer de virtuele machine wordt verwijderd door de waarde te "NotBefore" controleren. De VM wordt niet verwijderd vóór de tijd die is opgegeven in NotBefore, dus dat is uw venster voor uw toepassing om probleemloos af te sluiten.

Volgende stappen

U kunt ook een Azure Spot Virtual Machine maken met behulp van de Azure CLI, portal of een sjabloon.

Query's uitvoeren op huidige prijsinformatie met behulp van de Api voor prijzen van Azure-detailhandelsprijzen voor informatie over prijzen voor Virtuele Azure-spot-machines. De meterName en skuName bevatten Spotbeide .

Zie Foutcodes als er een fout optreedt.