Powiadomienie o przerwaniu dla wystąpień zestawu skalowania maszyn wirtualnych platformy Azure

Wystąpienia zestawu skalowania mogą zdecydować się na otrzymywanie powiadomień o zakończeniu wystąpienia i ustawianie wstępnie zdefiniowanego limitu czasu opóźnienia na operację zakończenia. Powiadomienie o zakończeniu jest wysyłane za pośrednictwem usługi Azure Metadata Service — zaplanowane zdarzenia, które udostępnia powiadomienia dotyczące i opóźnienia operacji wpływających na wpływ, takich jak ponowne uruchomienie i ponowne wdrożenie. Rozwiązanie dodaje kolejne zdarzenie — Zakończ — do listy Zaplanowanych zdarzeń, a skojarzone opóźnienie zdarzenia zakończenia będzie zależeć od limitu opóźnienia określonego przez użytkowników w konfiguracjach modelu zestawu skalowania.

Po zarejestrowaniu się w funkcji wystąpienia zestawu skalowania nie muszą czekać na wygaśnięcie określonego limitu czasu przed usunięciem wystąpienia. Po otrzymaniu powiadomienia o zakończeniu wystąpienie może zostać usunięte w dowolnym momencie przed wygaśnięciem limitu czasu zakończenia.

Włączanie powiadomień o zakończeniu

Istnieje wiele sposobów włączania powiadomień o zakończeniu w wystąpieniach zestawu skalowania, jak opisano w poniższych przykładach.

Azure Portal

Poniższe kroki umożliwiają zakończenie powiadamiania podczas tworzenia nowego zestawu skalowania.

  1. Przejdź do pozycji Zestawy skalowania maszyn wirtualnych.
  2. Wybierz pozycję + Dodaj , aby utworzyć nowy zestaw skalowania.
  3. Przejdź do karty Zarządzanie .
  4. Znajdź sekcję Kończenie wystąpienia .
  5. W polu Powiadomienie o zakończeniu wystąpienia wybierz pozycję Włączone.
  6. W polu Opóźnienie zakończenia (minuty) ustaw żądany domyślny limit czasu.
  7. Po zakończeniu tworzenia nowego zestawu skalowania wybierz przycisk Przejrzyj i utwórz .

Uwaga

Nie można ustawić powiadomień o zakończeniu w istniejących zestawach skalowania w Azure Portal

Interfejs API REST

Poniższy przykład umożliwia zakończenie powiadomień w modelu zestawu skalowania.

PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
  "properties": {
    "virtualMachineProfile": {
            "scheduledEventsProfile": {
                "terminateNotificationProfile": {
                    "notBeforeTimeout":"PT5M",
                    "enable":true
                }
            }
        }
    }        
}

Powyższy blok określa opóźnienie przekroczenia limitu czasu 5 minut (wskazane przez PT5M) dla każdej operacji zakończenia we wszystkich wystąpieniach w zestawie skalowania. Wartość pola notBeforeTimeout może potrwać od 5 do 15 minut w formacie ISO 8601. Domyślny limit czasu dla operacji zakończenia można zmienić, modyfikując właściwość notBeforeTimeout w obszarze terminateNotificationProfile opisanych powyżej.

Po włączeniu elementu scheduledEventsProfile w modelu zestawu skalowania i ustawieniu wartości notBeforeTimeout zaktualizuj poszczególne wystąpienia do najnowszego modelu , aby odzwierciedlały zmiany.

Uwaga

Powiadomienia o zakończeniu w wystąpieniach zestawu skalowania można włączyć tylko za pomocą interfejsu API w wersji 2019-03-01 lub nowszej

Azure PowerShell

Podczas tworzenia nowego zestawu skalowania można włączyć powiadomienia o zakończeniu w zestawie skalowania przy użyciu polecenia cmdlet New-AzVmssConfig .

Ten przykładowy skrypt przeprowadzi cię przez proces tworzenia zestawu skalowania i skojarzonych zasobów przy użyciu pliku konfiguracji: Tworzenie kompletnego zestawu skalowania maszyn wirtualnych. Aby skonfigurować powiadomienie o zakończeniu, dodaj parametry TerminateScheduledEvents i TerminateScheduledEventNotBeforeTimeoutInMinutes do obiektu konfiguracji do tworzenia zestawu skalowania. Poniższy przykład włącza funkcję z limitem czasu opóźnienia 10 minut.

New-AzVmssConfig `
  -Location "VMSSLocation" `
  -SkuCapacity 2 `
  -SkuName "Standard_DS2" `
  -UpgradePolicyMode "Automatic" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 10

Użyj polecenia cmdlet Update-AzVmsss, aby włączyć powiadomienia o zakończeniu w istniejącym zestawie skalowania.

Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 15

Powyższy przykład umożliwia zakończenie powiadomień w istniejącym zestawie skalowania i ustawia 15-minutowy limit czasu dla zdarzenia zakończenia.

Po włączeniu zaplanowanych zdarzeń w modelu zestawu skalowania i ustawieniu limitu czasu zaktualizuj poszczególne wystąpienia do najnowszego modelu , aby odzwierciedlały zmiany.

Interfejs wiersza polecenia platformy Azure 2.0

Poniższy przykład dotyczy włączania powiadomienia o zakończeniu działania podczas tworzenia nowego zestawu skalowania.

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --image UbuntuLTS \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --terminate-notification-time 10

Powyższy przykład najpierw tworzy grupę zasobów, a następnie tworzy nowy zestaw skalowania z włączonymi powiadomieniami o zakończeniu dla 10-minutowego domyślnego limitu czasu.

Poniższy przykład dotyczy włączania powiadomienia o zakończeniu w istniejącym zestawie skalowania.

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --enable-terminate-notification true \
  --terminate-notification-time 10

Pobieranie powiadomień o zakończeniu

Powiadomienia o zakończeniu są dostarczane za pośrednictwem zaplanowanych zdarzeń, czyli usługi Azure Metadata Service. Usługa Azure Metadata udostępnia informacje o uruchamianiu Virtual Machines przy użyciu punktu końcowego REST dostępnego z poziomu maszyny wirtualnej. Informacje są dostępne za pośrednictwem adresu IP bez routingu, aby nie było widoczne poza maszyną wirtualną.

Zaplanowane zdarzenia są włączone dla zestawu skalowania przy pierwszym żądaniu zdarzeń. Możesz oczekiwać opóźnionej odpowiedzi w pierwszym wywołaniu do dwóch minut. Okresowo wysyłaj zapytania do punktu końcowego, aby wykryć nadchodzące zdarzenia konserwacji i stan bieżących działań konserwacyjnych.

Zaplanowane zdarzenia są wyłączone dla zestawu skalowania, jeśli wystąpienia zestawu skalowania nie wysyłają żądania przez 24 godziny.

Odnajdywanie punktów końcowych

W przypadku maszyn wirtualnych z włączoną siecią wirtualną usługa Metadata Service jest dostępna ze statycznego adresu IP bez routingu, 169.254.169.254.

Pełny punkt końcowy dla najnowszej wersji zaplanowanych zdarzeń to:

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Odpowiedź na zapytanie

Odpowiedź zawiera tablicę zaplanowanych zdarzeń. Pusta tablica oznacza, że obecnie nie zaplanowano żadnych zdarzeń.

W przypadku wystąpienia zaplanowanych zdarzeń odpowiedź zawiera tablicę zdarzeń. W przypadku zdarzenia "Zakończ" odpowiedź będzie wyglądać następująco:

{
    "DocumentIncarnation": {IncarnationID},
    "Events": [
        {
            "EventId": {eventID},
            "EventType": "Terminate",
            "ResourceType": "VirtualMachine",
            "Resources": [{resourceName}],
            "EventStatus": "Scheduled",
            "NotBefore": {timeInUTC},
        }
    ]
}

DokumentIncarnation jest elementem ETag i zapewnia łatwy sposób sprawdzania, czy ładunek zdarzeń zmienił się od ostatniego zapytania.

Aby uzyskać więcej informacji na temat każdego z powyższych pól, zobacz dokumentację Zaplanowanych zdarzeń dla systemów Windows i Linux.

Reagowanie na zdarzenia

Po zapoznaniu się z nadchodzącym zdarzeniem i zakończeniu logiki w celu bezproblemowego zamknięcia możesz zatwierdzić zaległe zdarzenie, wykonując wywołanie POST do usługi metadanych za pomocą identyfikatora EventId. Wywołanie POST wskazuje na platformę Azure, że może kontynuować usuwanie maszyny wirtualnej.

Poniżej znajduje się kod json oczekiwany w treści żądania POST. Żądanie powinno zawierać listę elementów StartRequest. Każdy element StartRequest zawiera identyfikator EventId zdarzenia, które chcesz przyspieszyć:

{
	"StartRequests" : [
		{
			"EventId": {EventId}
		}
	]
}

Upewnij się, że każda maszyna wirtualna w zestawie skalowania zatwierdza tylko identyfikator EventID odpowiedni tylko dla tej maszyny wirtualnej. Maszyna wirtualna może uzyskać własną nazwę maszyny wirtualnej za pośrednictwem metadanych wystąpienia. Ta nazwa ma postać "{scale-set-name}_{instance-id}" i będzie wyświetlana w sekcji "Zasoby" odpowiedzi zapytania opisanej powyżej.

Możesz również zapoznać się z przykładowymi skryptami do wykonywania zapytań i reagowania na zdarzenia w języku Python.

Wskazówki i najlepsze rozwiązania

  • Kończenie powiadomień tylko w przypadku operacji usuwania — wszystkie operacje usuwania (ręczne usuwanie lub skalowanie automatyczne w skali in) wygenerują zdarzenia Zakończ, jeśli zestaw skalowania ma włączoną wartość ScheduledEventsProfile . Inne operacje, takie jak reboot, reimage, redeploy i stop/deallocate, nie generują zdarzeń zakończenia.
  • Brak obowiązkowego oczekiwania na przekroczenie limitu czasu — możesz uruchomić operację zakończenia w dowolnym momencie po odebraniu zdarzenia i przed wygaśnięciem czasu NotBefore zdarzenia.
  • Obowiązkowe usuwanie w przekroczeniu limitu czasu — nie ma możliwości rozszerzenia wartości limitu czasu po wygenerowaniu zdarzenia. Po wygaśnięciu limitu czasu oczekujące zdarzenie zakończenia zostanie przetworzone, a maszyna wirtualna zostanie usunięta.
  • Wartość limitu czasu modyfikowalnego — można zmodyfikować wartość limitu czasu w dowolnym momencie przed usunięciem wystąpienia, modyfikując właściwość notBeforeTimeout w modelu zestawu skalowania i aktualizując wystąpienia maszyn wirtualnych do najnowszego modelu.
  • Zatwierdź wszystkie oczekujące usunięcia — jeśli w VM_1 nie zostanie zatwierdzone oczekujące usunięcie, a w VM_2 zatwierdzono inne zdarzenie zakończenia, VM_2 nie zostanie usunięte, dopóki zdarzenie zakończenia VM_1 nie zostanie zatwierdzone lub upłynął limit czasu. Po zatwierdzeniu zdarzenia zakończenia dla VM_1 zostaną usunięte zarówno VM_1, jak i VM_2.
  • Zatwierdź wszystkie równoczesne usunięcia — rozszerzenie powyższego przykładu, jeśli VM_1 i VM_2 mają ten sam czas NotBefore , oba zdarzenia zakończenia muszą zostać zatwierdzone lub żadna maszyna wirtualna nie zostanie usunięta przed wygaśnięciem limitu czasu.

Rozwiązywanie problemów

Niepowodzenie włączania elementu scheduledEventsProfile

Jeśli wystąpi błąd "BadRequest" z komunikatem o błędzie z komunikatem o błędzie "Nie można odnaleźć elementu członkowskiego "scheduledEventsProfile" dla obiektu typu "VirtualMachineProfile", sprawdź wersję interfejsu API używaną dla operacji zestawu skalowania. Wymagany jest interfejs API obliczeniowy w wersji 2019-03-01 lub nowszej.

Nie można pobrać zdarzeń zakończenia

Jeśli nie otrzymujesz żadnych zdarzeń zakończenia za pośrednictwem zaplanowanych zdarzeń, sprawdź wersję interfejsu API używaną do pobierania zdarzeń. Interfejs API usługi Metadata Service w wersji 2019-01-01 lub nowszej jest wymagany w przypadku zdarzeń zakończenia.

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Getting Terminate event with incorrect NotBefore time (Pobieranie zdarzenia zakończenia z nieprawidłowym czasem notBefore)

Po włączeniu elementu scheduledEventsProfile w modelu zestawu skalowania i ustawieniu wartości notBeforeTimeout zaktualizuj poszczególne wystąpienia do najnowszego modelu , aby odzwierciedlały zmiany.

Następne kroki

Dowiedz się, jak wdrożyć aplikację w zestawach skalowania maszyn wirtualnych.