Ukončení oznámení o instancích škálovací sady virtuálních počítačů Azure

Instance škálovací sady se můžou rozhodnout přijímat oznámení o ukončení instance a nastavit předem definovaný časový limit zpoždění na operaci ukončení. Oznámení o ukončení se odesílá prostřednictvím služby Azure Metadata Service – plánované události, které poskytují oznámení o ovlivněných operacích, jako jsou restartování a opětovné nasazení. Řešení přidá další událost – Terminate – do seznamu plánovaných událostí a přidružené zpoždění události ukončení bude záviset na limitu zpoždění, jak určí uživatelé v konfiguracích modelu škálovací sady.

Jakmile se zaregistrujete do plánovaných událostí voláním příslušného koncového bodu služby Metadata Service, instance škálovací sady nemusí čekat na vypršení zadaného časového limitu, než se instance odstraní. Po přijetí oznámení o ukončení se instance může kdykoli rozhodnout, že se má odstranit před vypršením časového limitu ukončení. V spotových instancích nelze povolit oznámení o ukončení. Další informace o spotových instancích najdete v tématu Azure Spot Virtual Machines pro škálovací sady virtuálních počítačů.

Povolení oznámení o ukončení

Oznámení o ukončení ve vašich instancích škálovací sady můžete povolit několika způsoby, jak je popsáno v následujících příkladech.

portál Azure

Následující kroky umožňují ukončit oznámení při vytváření nové škálovací sady.

  1. Přejděte do škálovacích sad virtuálních počítačů.
  2. Vyberte + Přidat a vytvořte novou škálovací sadu.
  3. Přejděte na kartu Správa .
  4. Vyhledejte část Ukončení instance.
  5. V případě oznámení o ukončení instance vyberte Zapnuto.
  6. V případě zpoždění ukončení (minuty) nastavte požadovaný výchozí časový limit.
  7. Po vytvoření nové škálovací sady vyberte tlačítko Zkontrolovat a vytvořit .

Oznámení o ukončení můžete povolit také u existující škálovací sady.

  1. Přejděte na požadovanou škálovací sadu.
  2. Přechod na kartu Konfigurace
  3. Pokud chcete povolit oznámení o ukončení instance, vyberte Zapnuto.
  4. V případě zpoždění ukončení (minuty) nastavte požadovaný výchozí časový limit.
  5. Vyberte tlačítko Uložit .

REST API

Následující příklad umožňuje ukončit oznámení o modelu škálovací sady.

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

Výše uvedený blok určuje zpoždění časového limitu 5 minut (jak označuje PT5M) pro všechny operace ukončení ve všech instancích ve škálovací sadě. Pole notBeforeTimeout může ve formátu ISO 8601 trvat libovolnou hodnotu od 5 do 15 minut. Výchozí časový limit operace ukončení můžete změnit úpravou vlastnosti notBeforeTimeout v části terminateNotificationProfile popsané výše.

Po povolení scheduledEventsProfile v modelu škálovací sady a nastavení notBeforeTimeout aktualizujte jednotlivé instance na nejnovější model tak, aby odrážely změny.

Poznámka:

Ukončení oznámení v instancích škálovací sady je možné povolit pouze s rozhraním API verze 2019-03-01 a vyšší.

Azure PowerShell

Při vytváření nové škálovací sady můžete povolit oznámení o ukončení ve škálovací sadě pomocí rutiny New-AzVmssConfig .

Tento ukázkový skript vás provede vytvořením škálovací sady a přidružených prostředků pomocí konfiguračního souboru: Vytvoření kompletní škálovací sady virtuálních počítačů. Oznámení o konfiguraci ukončení můžete poskytnout přidáním parametrů TerminateScheduledEvents a TerminateScheduledEventNotBeforeTimeoutInMinutes do objektu konfigurace pro vytvoření škálovací sady. Následující příklad umožňuje funkci s časovým limitem zpoždění 10 minut.

Důležité

Od listopadu 2023 se škálovací sady virtuálních počítačů vytvořené pomocí PowerShellu a Azure CLI ve výchozím nastavení nastaví do flexibilního režimu orchestrace, pokud není zadaný žádný režim orchestrace. Další informace o této změně a akcích, které byste měli provést, najdete v tématu Zásadní změna pro zákazníky PowerShellu nebo rozhraní příkazového řádku VMSS – Microsoft Community Hub.

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

Pomocí rutiny Update-AzVmss povolte oznámení o ukončení ve stávající škálovací sadě.

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

Výše uvedený příklad umožňuje ukončit oznámení v existující škálovací sadě a nastaví 15minutový časový limit pro událost ukončení.

Po povolení plánovaných událostí v modelu škálovací sady a nastavení časového limitu aktualizujte jednotlivé instance na nejnovější model , aby odrážely změny.

Azure CLI 2.0

Následující příklad slouží k povolení oznámení o ukončení při vytváření nové škálovací sady.

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

Výše uvedený příklad nejprve vytvoří skupinu prostředků a pak vytvoří novou škálovací sadu s povolenými oznámeními o ukončení 10minutového výchozího časového limitu.

Následující příklad slouží k povolení oznámení o ukončení ve stávající škálovací sadě.

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

Získání oznámení o ukončení

Oznámení o ukončení se doručují prostřednictvím plánovaných událostí, což je služba Azure Metadata Service. Služba Azure Metadata zveřejňuje informace o spouštění virtuálních počítačů pomocí koncového bodu REST přístupného z virtuálního počítače. Informace jsou dostupné prostřednictvím nesměrovatelné IP adresy, aby se nezpřístupnily mimo virtuální počítač.

Naplánované události jsou pro škálovací sadu povolené při prvním vytvoření požadavku na události. V prvním volání až o dvě minuty můžete očekávat zpožděnou odpověď. Na koncový bod se pravidelně dotazujte, abyste zjistili nadcházející události údržby a stav probíhajících aktivit údržby.

Naplánované události jsou pro vaši škálovací sadu zakázané, pokud instance škálovací sady nesdělují požadavek na 24 hodin.

Zjišťování koncových bodů

Pro virtuální počítače s povolenou virtuální sítí je služba metadat dostupná ze statické nesměrovatelné IP adresy 169.254.169.254.

Úplný koncový bod pro nejnovější verzi naplánovaných událostí je:

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

Odpověď dotazu

Odpověď obsahuje pole naplánovaných událostí. Prázdné pole znamená, že aktuálně nejsou naplánované žádné události.

V případě plánovaných událostí obsahuje odpověď pole událostí. U události Terminate bude odpověď vypadat takto:

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

DocumentIncarnation je značkou ETag a poskytuje snadný způsob, jak zkontrolovat, jestli se datová část Událostí od posledního dotazu změnila.

Další informace o jednotlivých polích výše najdete v dokumentaci k plánovaným událostem pro Windows a Linux.

Reakce na události

Jakmile se seznámíte s nadcházející událostí a dokončíte logiku pro řádné vypnutí, můžete schvalovat nevyrovnanou událost voláním POST do služby metadat pomocí Id události. Volání POST označuje Azure, že může pokračovat odstraněním virtuálního počítače.

Níže je json očekávaný v textu požadavku POST. Požadavek by měl obsahovat seznam startRequests. Každý startRequest obsahuje ID události, kterou chcete urychlit:

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

Ujistěte se, že každý virtuální počítač ve škálovací sadě schvaluje pouze ID události relevantní pro tento virtuální počítač. Virtuální počítač může získat vlastní název virtuálního počítače prostřednictvím metadat instance. Tento název má tvar {scale-set-name}_{instance-id} a zobrazí se v části Zdroje odpovědi dotazu popsané výše.

Můžete se také podívat na ukázkové skripty pro dotazování a reagování na události v Pythonu.

Tipy a osvědčené postupy

  • Ukončit oznámení pouze v operacích odstranění – Všechny operace odstranění (ruční odstranění nebo automatické škálování iniciované škálováním) vygenerují události Ukončení, pokud je ve vaší škálovací sadě povolená možnost ScheduledEventsProfile . Jiné operace, jako je restartování, opětovné sestavení, opětovné nasazení a zastavení nebo zrušení přidělení, negenerují události Terminate.
  • Žádné povinné čekání na vypršení časového limitu – operaci ukončení můžete spustit kdykoli po přijetí události a před vypršením platnosti události NotBefore .
  • Povinné odstranění v vypršení časového limitu – Neexistuje žádná možnost prodloužení hodnoty časového limitu po vygenerování události. Po vypršení časového limitu se zpracuje událost čekajícího ukončení a virtuální počítač se odstraní.
  • Upravitelná hodnota časového limitu – Hodnotu časového limitu můžete kdykoli před odstraněním instance upravit úpravou vlastnosti notBeforeTimeout v modelu škálovací sady a aktualizací instancí virtuálních počítačů na nejnovější model.
  • Schválit všechny nevyřízené odstranění – pokud u VM_1, která není schválená, a schválili jste další událost ukončení VM_2, VM_2 se neodstraní, dokud nedojde ke schválení události ukončení VM_1 nebo jeho vypršení časového limitu. Jakmile událost ukončení schválíte pro VM_1, odstraní se VM_1 i VM_2.
  • Schválit všechny souběžné odstranění – Rozšíření výše uvedeného příkladu, pokud VM_1 a VM_2 mají stejný čas NotBefore , musí být obě události ukončení schváleny nebo ani jeden virtuální počítač odstraněn před vypršením časového limitu.

Odstranění potíží

Selhání povolení plánovaného souboruEventsProfile

Pokud se zobrazí chyba BadRequest s chybovou zprávou "Nepodařilo se najít člena scheduledEventsProfile u objektu typu VirtualMachineProfile", zkontrolujte verzi rozhraní API použitou pro operace škálovací sady. Vyžaduje se výpočetní rozhraní API verze 2019-03-01 nebo vyšší.

Selhání získání událostí ukončení

Pokud nedostáváte žádné události Ukončení prostřednictvím plánovaných událostí, zkontrolujte verzi rozhraní API použitou k získání událostí. Pro události Ukončení se vyžaduje rozhraní API služby Metadata Service verze 2019-01-01 nebo vyšší.

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

Získání události Terminate s nesprávným časem NotBefore

Po povolení scheduledEventsProfile v modelu škálovací sady a nastavení notBeforeTimeout aktualizujte jednotlivé instance na nejnovější model tak, aby odrážely změny.

Další kroky

Zjistěte, jak nasadit aplikaci ve škálovacích sadách virtuálních počítačů.