Compartilhar via


Implantar as Máquinas Virtuais de Spot usando o Azure PowerShell

Aplica-se a: ✔️ VMs Linux ✔️ VMs Windows ✔️ Conjuntos de dimensionamento flexíveis

O uso deMáquinas Virtuais de Spotpermite aproveitar vantagem da capacidade não usada com uma economia de custos significativa. A qualquer momento que o Azure precisar da capacidade de volta, a infraestrutura do Azure removerá as Máquinas Virtuais de Spot do Azure. Portanto, as Máquinas Virtuais de Spot do Azure são ótimas para cargas de trabalho que podem lidar com interrupções, como trabalhos de processamento em lotes, ambientes de desenvolvimento/teste, grandes cargas de trabalho de computação, entre outros.

O preço para as Máquinas Virtuais de Spot é variável, com base na região e SKU. Para obter mais informações, confira os preços de VM para Linux e Windows. Para obter mais informações acerca de como definir o preço máximo, consulteMáquinas Virtuais de Spot - Preços.

Você tem a opção de definir um preço máximo que esteja disposto a pagar, por hora, para a VM. O preço máximo de uma Máquina Virtual do Spot Azure pode ser definido em dólares americanos (USD), usando até 5 casas decimais. Por exemplo, o valor 0.98765seria um preço máximo de $0,98765 USD por hora. Se você definir o preço máximo como -1, a VM não será removida com base no preço. O preço da VM será o preço atual para o Spot ou o preço de uma VM padrão, o que for menor, desde que haja capacidade e cota disponíveis.

Criar a VM

Crie um spotVM usando New-AzVmConfig para criar a configuração. Inclua -Priority Spot e defina -MaxPrice como:

  • -1 para que a VM não seja removida com base no preço.
  • um valor de dólar, até 5 dígitos. Por exemplo, -MaxPrice .98765 significa que a VM será desalocada quando o preço de um spotVM for de cerca de $,98765 por hora.

Este exemplo cria um spotVM que não será desalocado com base no preço (somente quando o Azure precisar da capacidade de volta). A política de despejo é o conjunto de desalocar a VM, para que ela possa ser reiniciada posteriormente. Se você quiser excluir a VM e o disco subjacente quando a VM for despejada, defina -EvictionPolicy como Delete no 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

Após a VM ser criada, você poderá consultar para ver o preço máximo de todas as VMs no grupo de recursos.

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

Aparentar um despejo

Você pode aparentar um despejo de uma Máquina Virtual de Spot usando REST, PowerShell ou CLI para testar como seu aplicativo responderá a um despejo repentino.

Na maioria dos casos, você desejará usar as Máquinas Virtuais da API REST-Aparenta o Despejopara ajudar com o teste automatizado de aplicativos. Para REST,umResponse Code: 204meio de aparentar o despejo foi eficaz. Você pode combinar os despejos aparentados com oServiço de Evento Agendado, para automatizar como seu aplicativo responderá quando a VM for removida.

Para ver os eventos agendados em ação, assista ao vídeo Como usar os eventos agendados do Azure para preparar uma manutenção da VM do Azure Friday.

Teste rápido

Para um teste rápido, mostrar como um despejo aparentado funcionará, examinaremos a consulta do serviço de evento agendado para ver a aparência dele quando você simular um despejo usando o PowerShell.

Os Eventos Agendados serão habilitados para o serviço pela primeira vez assim que você fizer uma solicitação para eventos.

O Remoto para sua VM e, em seguida, um prompt de comando estará em aberto.

Do prompt de comando em sua VM, digite:

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

Esta primeira resposta poderá levar até 2 minutos. De agora em diante, eles devem exibir a saída quase que imediatamente.

De um computador que tenha o módulo do Az PowerShell instalado (como seu computador local), simule um despejo usando Set-AzVM. Substitua o nome do grupo de recursos e o nome da VM pelos seus próprios nomes.

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

A saída da resposta haveráStatus: Succeededse a solicitação tiver sido feita com êxito.

Retorne rapidamente para sua conexão remota da sua Máquina Virtual Spot do Azure e consulte o ponto de extremidade dos Eventos Agendados novamente. Repita o comando seguinte até obter uma saída que contenha mais informações:

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

Quando o Serviço de Evento Agendado conseguir a notificação de remoção, você receberá uma resposta semelhante a esta:

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

Você pode ver isso"EventType":"Preempt"e o recurso é a recurso da VM"Resources":["myspotvm"].

Você também pode ver quando a VM será despejada verificando o valor "NotBefore". A VM não será despejada antes do tempo fornecido em NotBefore, portanto, esta é sua janela para que o aplicativo seja fechado normalmente.

Próximas etapas

Você também pode criar uma Máquina Virtual do Spot Azure usando a CLI do Azure, o portal ou um modelo.

Consulte as informações de preços atuais usando a API de preços de varejo do Azure para obter informações sobre os preços de Máquina Virtual de Spot do Azure. Tanto meterName quanto skuName conterão Spot .

Se você encontrar um erro, confira Códigos de erro.