Wdrażanie maszyn wirtualnych typu spot platformy Azure przy użyciu programu Azure PowerShell
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny wirtualne z systemem Windows — elastyczne zestawy ✔️ ✔️ skalowania
Korzystanie z maszyn wirtualnych typu spot platformy Azure umożliwia korzystanie z nieużywanej pojemności przy znacznych oszczędnościach. W dowolnym momencie, gdy platforma Azure potrzebuje pojemności z powrotem, infrastruktura platformy Azure wykluczy maszyny wirtualne typu spot platformy Azure. W związku z tym maszyny wirtualne typu spot platformy Azure doskonale nadają się do obsługi obciążeń, które mogą obsługiwać przerwy, takie jak zadania przetwarzania wsadowego, środowiska deweloperskie/testowe, duże obciążenia obliczeniowe i nie tylko.
Cennik maszyn wirtualnych typu Spot platformy Azure 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.98765
będzie maksymalną ceną 0,98765 USD za godzinę. Jeśli ustawisz maksymalną cenę na -1
, maszyna wirtualna nie zostanie wykluczona na podstawie ceny. Cena maszyny wirtualnej będzie bieżącą ceną dla maszyny wirtualnej typu spot lub ceną standardowej maszyny wirtualnej, która kiedykolwiek jest 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 -MaxPrice
jedną z następujących wartości:
-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ę.
W tym przykładzie jest tworzona maszyna 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 podczas eksmitowania maszyny wirtualnej, ustaw wartość -EvictionPolicy
Delete
na .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
Po utworzeniu maszyny wirtualnej możesz wykonać zapytanie, aby wyświetlić 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 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ć maszyn wirtualnych interfejsu API REST — symulowanie eksmisji w celu ułatwienia zautomatyzowanego testowania aplikacji. W przypadku architektury REST oznacza, że Response Code: 204
symulowana eksmisja zakończyła się pomyślnie. Możesz połączyć symulowane eksmisje z usługą Zaplanowane zdarzenie, aby zautomatyzować sposób reagowania aplikacji podczas eksmitowania maszyny wirtualnej.
Aby zobaczyć zaplanowane zdarzenia w akcji, obejrzyj artykuł 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ń.
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
Ta pierwsza odpowiedź może potrwać do 2 minut. Od tej pory 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 własną nazwę grupy zasobów i nazwę maszyny wirtualnej.
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 wykluczony, sprawdzając "NotBefore"
wartość. Maszyna wirtualna nie zostanie eksmitowana przed upływem czasu podanego w NotBefore
elemencie , aby okno aplikacji było bezpiecznie zamykane.
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 dotyczące bieżących informacji o cenach detalicznych platformy Azure przy użyciu interfejsu API cen detalicznych platformy Azure, aby uzyskać informacje o cenach maszyn wirtualnych typu spot platformy Azure. Wartości meterName
i skuName
będą zawierać Spot
wartość .
Jeśli wystąpi błąd, zobacz Kody błędów.