Azure Spot Virtual Machines implementeren met behulp van Azure PowerShell
Van toepassing op: ✔️ Virtuele Linux-machines voor Windows-VM's ✔️ ✔️ Flexibele schaalsets
Met azure Spot Virtual Machines kunt u profiteren van onze ongebruikte capaciteit tegen aanzienlijke kostenbesparingen. Op elk moment waarop Azure de capaciteit terug nodig heeft, wordt de Azure-infrastructuur azure Spot Virtual Machines verwijderd. Azure Spot Virtual Machines zijn daarom ideaal voor workloads die onderbrekingen kunnen afhandelen, 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 mogelijkheid om een maximumprijs in te stellen die u wilt betalen, per uur, voor de virtuele machine. De maximumprijs voor een virtuele Azure Spot-machine kan worden ingesteld in AMERIKAANSE dollars (USD), met maximaal 5 decimalen. De waarde 0.98765
is bijvoorbeeld een maximumprijs van $ 0,98765 USD per uur. Als u de maximale prijs -1
instelt, wordt de VIRTUELE machine niet verwijderd op basis van de prijs. De prijs voor de virtuele machine is de huidige prijs voor spot of de prijs voor een standaard-VM, die ooit minder is, zolang er capaciteit en quota beschikbaar zijn.
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
de VM wordt dus niet verwijderd op basis van de prijs.- een bedrag in dollar, tot 5 cijfers. Dit betekent bijvoorbeeld
-MaxPrice .98765
dat de toewijzing van de VIRTUELE machine ongedaan wordt gemaakt zodra de prijs voor een spotVM ongeveer $ 98765 per uur gaat.
In dit voorbeeld wordt een spotVM gemaakt die de toewijzing niet ongedaan maakt op basis van prijzen (alleen wanneer Azure de capaciteit terug nodig heeft). Het verwijderingsbeleid is ingesteld om de toewijzing van de VIRTUELE machine ongedaan te maken, zodat deze op een later tijdstip opnieuw kan worden opgestart. Als u de virtuele machine en de onderliggende schijf wilt verwijderen wanneer de virtuele machine wordt verwijderd, stelt u deze in -EvictionPolicy
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
Nadat de virtuele machine is gemaakt, kunt u een query uitvoeren om de maximale prijs voor alle VM's in de resourcegroep weer te geven.
Get-AzVM -ResourceGroupName $resourceGroup | `
Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}
Een verwijdering simuleren
U kunt een verwijdering van een virtuele Azure Spot-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 gebruiken - Verwijdering simuleren om te helpen bij het automatisch testen van toepassingen. Voor REST betekent dit 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 u voor te bereiden op VM-onderhoud.
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 geplande gebeurtenisservice is ingeschakeld voor uw service wanneer u de eerste keer een aanvraag voor gebeurtenissen indient.
Maak een externe verbinding met uw VIRTUELE machine en open vervolgens een opdrachtprompt.
Typ vanaf de opdrachtprompt op uw VIRTUELE machine:
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 VM-naam 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 de externe verbinding met de 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 "NotBefore"
waarde te controleren. De VIRTUELE machine wordt niet verwijderd vóór de opgegeven NotBefore
tijd, zodat uw toepassing zonder problemen kan worden afgesloten.
Volgende stappen
U kunt ook een virtuele Azure Spot-machine maken met behulp van de Azure CLI, portal of een sjabloon.
Voer een query uit op de huidige prijsinformatie met behulp van de API voor azure-retailprijzen voor informatie over prijzen van Azure Spot Virtual Machine. De meterName
en skuName
zullen beide bevatten Spot
.
Als er een fout optreedt, raadpleegt u Foutcodes.