Azure Spot-Virtual Machines implementeren met Azure PowerShell
Van toepassing op: ✔️ Virtuele Linux-heavy_check_mark: Windows virtuele heavy_check_mark: flexibele schaalsets
Door Azure Spot Virtual Machines kunt u profiteren van onze ongebruikte capaciteit tegen aanzienlijke kostenbesparingen. Op elk moment waarop Azure de capaciteit terug nodig heeft, zal de Azure-infrastructuur Azure Spot-Virtual Machines. Daarom zijn Azure Spot Virtual Machines zeer goed voor workloads die onderbrekingen kunnen afhandelen, zoals batchverwerkingstaken, dev/test-omgevingen, 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 Windows. Zie Azure Spot Virtual Machines - Pricing voor meer informatie over het instellen van de maximumprijs.
U hebt de mogelijkheid om een maximumprijs in te stellen die u per uur voor de VM wilt betalen. De maximumprijs voor een virtuele Azure Spot-machine kan worden ingesteld in Amerikaanse dollars (USD), met maximaal 5 decimalen. De waarde zou bijvoorbeeld 0.98765 een maximale prijs van $ 0,98765 USD per uur zijn. Als u de maximumprijs in stelt op , wordt de VM niet op basis van -1 de prijs onbetaald. De prijs voor de VM is de huidige prijs voor spot of de prijs voor een standaard-VM, die ooit lager is, zolang er capaciteit en quotum beschikbaar zijn.
De VM maken
Maak een spotVM met New-AzVmConfig om de configuratie te maken. Opnemen -Priority Spot en instellen op een van de -MaxPrice volgende:
-1zodat de VM niet wordt onbetaald op basis van de prijs.- een bedrag in dollars, maximaal 5 cijfers. Betekent bijvoorbeeld dat de toewijzing van de VM wordt teruggeplaatst zodra de prijs voor een
-MaxPrice .98765spotVM ongeveer $.98765 per uur bedraagt.
In dit voorbeeld wordt een spotVM gemaakt die niet opnieuw wordt toegewezen op basis van prijzen (alleen wanneer Azure de capaciteit weer nodig heeft). Het beleid voor het uitzettingsbeleid wordt zo ingesteld dat de toewijzing van de VM wordt teruggeplaatst, 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 -EvictionPolicy Delete in op . 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
Nadat de VM is gemaakt, kunt u een query uitvoeren om de maximale prijs voor alle VM's in de resourcegroep te bekijken.
Get-AzVM -ResourceGroupName $resourceGroup | `
Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}
Een verwijdering simuleren
U kunt een azure spot-virtuele machine simuleren met REST, PowerShell of de CLI om te testen hoe goed uw toepassing reageert op een plotselinge uitzetting.
In de meeste gevallen wilt u de REST API Virtual Machines - Simulate Eviction gebruiken om te helpen bij het automatisch testen van toepassingen. Voor REST betekent Response Code: 204 een dat de gesimuleerde uitzetting is geslaagd. U kunt gesimuleerde uitzettingen combineren met de service Geplandegebeurtenis om te automatiseren hoe uw app reageert wanneer de VM wordt verwijderen.
Als u geplande gebeurtenissen in actie wilt zien, bekijkt u Azure Friday - Azure Scheduled Events voorbereiden op VM-onderhoud.
Snelle test
Voor een snelle test om te laten zien hoe een gesimuleerde uitzetting werkt, gaan we een query uitvoeren op de geplande gebeurtenisservice om te zien hoe deze eruit ziet wanneer u een uitzetting simuleert met behulp van PowerShell.
De service Geplande gebeurtenis wordt ingeschakeld voor uw service wanneer u voor het eerst een aanvraag voor gebeurtenissen doet.
Ga op afstand naar uw VM en open vervolgens een opdrachtprompt.
Typ het volgende vanaf de opdrachtprompt op de VM:
curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01
Dit eerste antwoord kan maximaal twee minuten duren. Vanaf nu moeten ze vrijwel onmiddellijk uitvoer weergeven.
Simuleer op een computer met de Az PowerShell-module (zoals uw lokale computer) een uitzetting met behulp van Set-AzVM. Vervang de naam van de resourcegroep en de VM door uw eigen naam.
Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction
De antwoorduitvoer heeft Status: Succeeded als de aanvraag is gemaakt.
Ga snel terug naar uw externe verbinding met uw virtuele spot-machine en Scheduled Events eindpunt opnieuw op. Herhaal de volgende opdracht totdat u een uitvoer met meer informatie krijgt:
curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01
Wanneer de geplande gebeurtenisservice de melding van de uitzetting ontvangt, krijgt u een antwoord dat er ongeveer als het volgende 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 VM wordt weg gezet door de waarde te "NotBefore" controleren. De VM wordt niet vóór de tijd die is opgegeven in , dus dit is het venster waarin uw toepassing op een goede manier NotBefore wordt afgesloten.
Volgende stappen
U kunt ook een virtuele Azure Spot-machine maken met behulp van de Azure CLI, de portal of een sjabloon.
Vraag de huidige prijsinformatie op met behulp van de API voor azure-retailprijzen voor informatie over prijzen van Spot Virtual Machine voor Azure. De meterName en bevatten beide skuName Spot .
Zie Foutcodes als er een fout is opgetreden.