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

Wystąpienia zestawu skalowania mogą wyrazić zgodę na otrzymywanie powiadomień o zakończeniu wystąpienia i ustawianie wstępnie zdefiniowanego limitu czasu opóźnienia dla operacji 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óźniają operacje mające wpływ, takie jak ponowne uruchomienie i ponowne wdrażanie. 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 zaplanowanych zdarzeniach przez wywołanie odpowiedniego punktu końcowego usługi metadanych 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. Nie można włączyć powiadomień o zakończeniu w wystąpieniach typu spot. Aby uzyskać więcej informacji na temat wystąpień typu spot, zobacz Maszyny wirtualne usługi Azure Spot dla zestawów skalowania maszyn wirtualnych

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ą powiadomienie o zakończeniu 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ę Zakończenie wystąpienia.
  5. W obszarze Powiadomienie o zakończeniu wystąpienia wybierz pozycję Włączone.
  6. W polu Opóźnienie zakończenia (w minutach) ustaw żądany domyślny limit czasu.
  7. Po zakończeniu tworzenia nowego zestawu skalowania wybierz przycisk Przejrzyj i utwórz .

Powiadomienia o zakończeniu można również włączyć w istniejącym zestawie skalowania.

  1. Przejdź do żądanego zestawu skalowania
  2. Przejdź do karty Konfiguracja
  3. W obszarze Włącz powiadomienie o zakończeniu wystąpienia wybierz pozycję Włączone.
  4. W polu Opóźnienie zakończenia (w minutach) ustaw żądany domyślny limit czasu.
  5. Wybierz przycisk Zapisz .

Interfejs API REST

Poniższy przykład umożliwia powiadomienie o zakończeniu 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 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 opisanym 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: Utwórz kompletny zestaw skalowania maszyn wirtualnych. Możesz podać powiadomienia o zakończeniu konfigurowania, dodając parametry TerminateScheduledEvents i TerminateScheduledEventNotBeforeTimeoutInMinutes do obiektu konfiguracji na potrzeby tworzenia zestawu skalowania. Poniższy przykład umożliwia korzystanie z funkcji z limitem czasu opóźnienia 10 minut.

Ważne

Od listopada 2023 r. zestawy skalowania maszyn wirtualnych utworzone przy użyciu programu PowerShell i interfejsu wiersza polecenia platformy Azure będą domyślnie ustawiać tryb elastycznej orkiestracji, jeśli nie określono trybu aranżacji. Aby uzyskać więcej informacji na temat tej zmiany i akcji, które należy wykonać, zobacz Zmiana powodująca niezgodność dla klientów programu PowerShell/interfejsu wiersza polecenia usługi VMSS — Microsoft Community Hub

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

Użyj polecenia cmdlet Update-AzVmss, aby włączyć powiadomienia o zakończeniu działania 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 pracy podczas tworzenia nowego zestawu skalowania.

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --image Ubuntu2204 \
  --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 maszyn wirtualnych przy użyciu punktu końcowego REST dostępnego z poziomu maszyny wirtualnej. Informacje są dostępne za pośrednictwem adresu IP, który nie jest routingiem, dzięki czemu nie jest uwidoczniony 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 wykonuj zapytania dotyczące 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 metadanych jest dostępna na podstawie 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ń uległ zmianie 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 uzyskaniu informacji o nadchodzącym zdarzeniu i zakończeniu logiki bezpiecznego zamykania 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 StartRequests. Każde zdarzenie 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 pomocą 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ę ze skryptami przykładowymi na potrzeby wykonywania zapytań i reagowania na zdarzenia w języku Python.

Wskazówki i najlepsze rozwiązania

  • Powiadomienia o zakończeniu tylko w operacjach usuwania — wszystkie operacje usuwania (ręczne usuwanie lub skalowanie automatyczne inicjowane przez skalowanie w pionie) będą generować zdarzenia Zakończenia, jeśli zestaw skalowania ma włączony harmonogramEventsProfile . Inne operacje, takie jak ponowny rozruch, reimage, ponowne wdrożenie i zatrzymanie/cofnięcie przydziału, 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 po przekroczeniu limitu czasu — nie ma możliwości rozszerzania wartości limitu czasu po wygenerowaniu zdarzenia. Po wygaśnięciu limitu czasu zostanie przetworzone oczekujące zdarzenie zakończenia, a maszyna wirtualna zostanie usunięta.
  • Wartość limitu czasu modyfikowalnego — wartość limitu czasu można zmodyfikować 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 i zatwierdzono inne zdarzenie zakończenia w VM_2, VM_2 nie zostanie usunięte, dopóki zdarzenie zakończenia dla 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 jednoczesne 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 upływem limitu czasu.

Rozwiązywanie problemów

Nie można włączyć 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" na obiekcie typu "VirtualMachineProfile", sprawdź wersję interfejsu API używaną dla operacji zestawu skalowania. Wymagany jest interfejs API obliczeń 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"

Pobieranie zdarzenia Zakończenie z niepoprawnym 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.