Distribuire Macchine virtuali di Azure Spot usando Azure PowerShell

Si applica a: ✔️ Macchine ✔️ virtuali Linux Macchine virtuali ✔️ Windows Set di scalabilità flessibili

L'uso di Azure Spot Macchine virtuali consente di sfruttare la capacità inutilizzata con un risparmio significativo sui costi. Ogni volta che Azure necessita di nuovo di capacità, l'infrastruttura di Azure eliminerà le macchine virtuali di Azure Spot Virtual Machines. Le macchine virtuali di Azure Spot Virtual Machines sono pertanto ideali per i carichi di lavoro in grado di gestire le interruzioni, come i processi di elaborazione batch, gli ambienti di sviluppo/test, i carichi di lavoro di calcolo di grandi dimensioni e altro ancora.

I prezzi per Azure Spot Macchine virtuali sono variabili, in base all'area e agli SKU. Per altre informazioni, vedere i prezzi delle macchine virtuali per Linux e Windows. Per altre informazioni sull'impostazione del prezzo massimo, vedere Azure Spot Macchine virtuali - Prezzi.

È possibile impostare un prezzo massimo che si è disposti a pagare, per ora, per la macchina virtuale. Il prezzo massimo per una macchina virtuale Spot di Azure può essere impostato in dollari USA (USD), usando fino a 5 posizioni decimali. Ad esempio, il valore 0.98765sarebbe un prezzo massimo di 0,98765 USD all'ora. Se si imposta il prezzo massimo su -1, la macchina virtuale non verrà eliminata in base al prezzo. Il prezzo della macchina virtuale corrisponderà al prezzo corrente per spot o al prezzo di una macchina virtuale standard, a seconda di quale sia il più basso, purché siano disponibili capacità e quota.

Creare la macchina virtuale

Creare una spotVM usando New-AzVmConfig per creare la configurazione. Includere -Priority Spot e impostare -MaxPrice su entrambi:

  • -1 quindi la macchina virtuale non viene rimossa in base al prezzo.
  • importo del dollaro, fino a 5 cifre. Ad esempio, -MaxPrice .98765 significa che la macchina virtuale verrà deallocata una volta che il prezzo per una macchina virtuale spotVM passa circa $.98765 all'ora.

In questo esempio viene creata una macchina virtuale spot che non verrà deallocata in base ai prezzi (solo quando Azure necessita della capacità indietro). Il criterio di rimozione è impostato per deallocare la macchina virtuale, in modo che possa essere riavviato in un secondo momento. Se si vuole eliminare la macchina virtuale e il disco sottostante quando la macchina virtuale viene rimossa, impostata -EvictionPolicy su Delete in 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

Dopo aver creato la macchina virtuale, è possibile eseguire una query per visualizzare il prezzo massimo per tutte le macchine virtuali nel gruppo di risorse.

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

Simulare un'operazione di rimozione

È possibile simulare una rimozione di una macchina virtuale Spot di Azure usando REST, PowerShell o l'interfaccia della riga di comando per testare il modo in cui l'applicazione risponderà a una rimozione improvvisa.

Nella maggior parte dei casi, si vuole usare l'API REST Macchine virtuali - Simulare la rimozione per consentire il test automatizzato delle applicazioni. Per REST, un Response Code: 204 significa che la rimozione simulata ha avuto esito positivo. È possibile combinare le eliminazioni simulate con il servizio eventi pianificato, per automatizzare la risposta dell'app quando la macchina virtuale viene rimossa.

Per visualizzare gli eventi pianificati in azione, guardare Azure Friday - Uso di Eventi pianificati di Azure per preparare la manutenzione della macchina virtuale.

Test rapido

Per un test rapido per illustrare il funzionamento di una rimozione simulata, verrà eseguita una query sul servizio eventi pianificato per visualizzare l'aspetto di una rimozione simulata usando PowerShell.

Il servizio eventi pianificato è abilitato per il servizio la prima volta che si effettua una richiesta di eventi.

Remoto nella macchina virtuale e quindi aprire un prompt dei comandi.

Dal prompt dei comandi della macchina virtuale digitare:

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

Questa prima risposta potrebbe richiedere fino a 2 minuti. Da ora in poi, dovrebbero visualizzare quasi immediatamente l'output.

Da un computer con il modulo Az PowerShell installato (ad esempio il computer locale), simulare una rimozione usando Set-AzVM. Sostituire il nome del gruppo di risorse e il nome della macchina virtuale con il proprio.

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

L'output della risposta avrà Status: Succeeded se la richiesta è stata effettuata correttamente.

Tornare rapidamente alla connessione remota alla macchina virtuale Spot ed eseguire nuovamente una query sull'endpoint Eventi pianificati. Ripetere il comando seguente finché non viene visualizzato un output contenente altre informazioni:

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

Quando il servizio eventi pianificato ottiene la notifica di rimozione, si otterrà una risposta simile a questa:

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

È possibile notare che "EventType":"Preempt"e la risorsa è la risorsa "Resources":["myspotvm"]della macchina virtuale .

È anche possibile vedere quando la macchina virtuale verrà rimossa controllando il "NotBefore" valore. La macchina virtuale non verrà rimossa prima dell'ora specificata in NotBefore, in modo che sia la finestra per chiudere correttamente l'applicazione.

Passaggi successivi

È anche possibile creare una macchina virtuale Spot di Azure usando l'interfaccia della riga di comando di Azure, il portale o un modello.

Eseguire query sulle informazioni sui prezzi correnti usando l'API Prezzi al dettaglio di Azure per informazioni sui prezzi della macchina virtuale Spot di Azure. L'oggetto meterName e skuName conterrà Spotentrambi .

Se si verifica un errore, vedere Codici di errore.