Wdrażanie usługi Azure Spot Virtual Machines przy użyciu Azure PowerShell

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny wirtualne z systemem Windows — elastyczne zestawy ✔️ ✔️ skalowania

Korzystanie z usługi Azure Spot Virtual Machines umożliwia korzystanie z nieużywanej pojemności przy znacznych oszczędnościach kosztów. W dowolnym momencie, gdy platforma Azure potrzebuje pojemności z powrotem, infrastruktura platformy Azure wykluczy usługę Azure Spot Virtual Machines. W związku z tym usługa Azure Spot Virtual Machines doskonale sprawdza się w przypadku obciążeń, które mogą obsługiwać przerwy, takie jak zadania przetwarzania wsadowego, środowiska deweloperskie/testowe, duże obciążenia obliczeniowe i inne.

Cennik usługi Azure Spot Virtual Machines jest zmienny na podstawie regionu i jednostki SKU. Aby uzyskać więcej informacji, zobacz Cennik maszyn wirtualnych dla systemów Linux i Windows. Aby uzyskać więcej informacji na temat ustawiania maksymalnej ceny, zobacz Azure Spot Virtual Machines — cennik.

Możesz ustawić maksymalną cenę, którą chcesz zapłacić za godzinę dla maszyny wirtualnej. Maksymalna cena maszyny wirtualnej typu spot platformy Azure można ustawić w dolarach amerykańskich (USD), używając maksymalnie 5 miejsc dziesiętnych. Na przykład wartość 0.98765będzie maksymalną ceną 0,98765 USD za godzinę. Jeśli ustawisz maksymalną cenę na -1wartość , maszyna wirtualna nie zostanie wykluczona na podstawie ceny. Cena maszyny wirtualnej będzie bieżącą ceną maszyny wirtualnej typu spot lub ceną standardowej maszyny wirtualnej, która jest coraz mniejsza, o ile jest dostępna pojemność i limit przydziału.

Tworzenie maszyny wirtualnej

Utwórz maszynę spotVM przy użyciu polecenia New-AzVmConfig , aby utworzyć konfigurację. Uwzględnij -Priority Spot i ustaw na jedną z następujących wartości -MaxPrice :

  • -1 więc maszyna wirtualna nie jest eksmitowana na podstawie ceny.
  • kwota w dolarach, do 5 cyfr. Na przykład oznacza, -MaxPrice .98765 że przydział maszyny wirtualnej zostanie cofnięty, gdy cena maszyny spotVM przekroczy około 98765 USD za godzinę.

Ten przykład tworzy maszynę spotVM, która nie zostanie cofnięto przydziału na podstawie cen (tylko wtedy, gdy platforma Azure potrzebuje pojemności z powrotem). Zasady eksmisji są ustawione na cofnięcie przydziału maszyny wirtualnej, aby można było ją uruchomić ponownie w późniejszym czasie. Jeśli chcesz usunąć maszynę wirtualną i dysk źródłowy, gdy maszyna wirtualna zostanie wykluczona, ustaw wartość Delete na .-EvictionPolicyNew-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

Po utworzeniu maszyny wirtualnej możesz wykonać zapytanie, aby zobaczyć maksymalną cenę dla wszystkich maszyn wirtualnych w grupie zasobów.

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

Symulowanie eksmisji

Możesz symulować eksmisję maszyny wirtualnej typu spot platformy Azure przy użyciu interfejsu wiersza polecenia, programu REST, programu PowerShell lub interfejsu wiersza polecenia, aby sprawdzić, jak dobrze aplikacja będzie reagować na nagłe eksmisji.

W większości przypadków należy użyć Virtual Machines interfejsu API REST — symulowanie eksmisji w celu ułatwienia zautomatyzowanego testowania aplikacji. W przypadku architektury REST oznacza, Response Code: 204 że symulowana eksmisja zakończyła się pomyślnie. Możesz połączyć symulowane eksmisji z usługą Zaplanowane zdarzenia, aby zautomatyzować sposób reagowania aplikacji po eksmitowaniu maszyny wirtualnej.

Aby zobaczyć zaplanowane zdarzenia w akcji, zobacz Azure Friday — Using Azure Scheduled Events to prepare for VM maintenance (Usługa Azure Friday — używanie zaplanowanych zdarzeń platformy Azure do przygotowania do konserwacji maszyny wirtualnej).

Szybki test

Aby uzyskać szybki test pokazujący, jak będzie działać symulowana eksmisja, przeprowadźmy wykonywanie zapytań dotyczących zaplanowanej usługi zdarzeń, aby zobaczyć, jak wygląda podczas symulowania eksmisji przy użyciu programu PowerShell.

Usługa Zaplanowane zdarzenie jest włączona dla usługi przy pierwszym żądaniu zdarzeń.

Przejdź zdalnie do maszyny wirtualnej, a następnie otwórz wiersz polecenia.

W wierszu polecenia na maszynie wirtualnej wpisz:

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

Pierwsza odpowiedź może potrwać do 2 minut. Od teraz powinny wyświetlać dane wyjściowe niemal natychmiast.

Na komputerze z zainstalowanym modułem Az programu PowerShell (takim jak maszyna lokalna) symuluj eksmisję przy użyciu polecenia Set-AzVM. Zastąp nazwę grupy zasobów i nazwę maszyny wirtualnej własną.

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

Dane wyjściowe odpowiedzi będą miały Status: Succeeded miejsce, jeśli żądanie zostało wykonane pomyślnie.

Szybko wróć do połączenia zdalnego z maszyną wirtualną typu spot i ponownie wykonaj zapytanie dotyczące punktu końcowego Zaplanowane zdarzenia. Powtórz następujące polecenie, dopóki nie uzyskasz danych wyjściowych zawierających więcej informacji:

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

Gdy usługa zaplanowanego zdarzenia otrzymuje powiadomienie o eksmisji, otrzymasz odpowiedź podobną do następującej:

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

Zobaczysz, że "EventType":"Preempt"zasób , a zasób to zasób "Resources":["myspotvm"]maszyny wirtualnej .

Możesz również sprawdzić, kiedy maszyna wirtualna zostanie eksmitowana, sprawdzając "NotBefore" wartość. Maszyna wirtualna nie zostanie eksmitowana przed upływem czasu podanego w NotBeforeelemencie , aby aplikacja mogła bezpiecznie zamknąć okno.

Następne kroki

Maszynę wirtualną typu spot platformy Azure można również utworzyć przy użyciu interfejsu wiersza polecenia platformy Azure, portalu lub szablonu.

Wykonaj zapytanie o bieżące informacje o cenach za pomocą interfejsu API cen detalicznych platformy Azure , aby uzyskać informacje o cenach maszyn wirtualnych typu spot platformy Azure. Elementy meterName i skuName będą zawierać Spotwartość .

Jeśli wystąpi błąd, zobacz Kody błędów.