Azure Metadata Service: Scheduled Events pro virtuální počítače s Linuxem
Platí pro: ✔️ Flexibilní škálovací sady virtuálních ✔️ počítačů s Linuxem – Jednotné škálovací sady ✔️
Služba Scheduled Events je službou Azure Metadata Service, která vaší aplikaci dává čas na přípravu na údržbu virtuálního počítače. Poskytuje informace o nadcházejících událostech údržby (například restartování), aby se vaše aplikace na ně mohla připravit a omezit přerušení fungování. Je k dispozici pro všechny typy virtuálních počítačů Azure, včetně PaaS a IaaS ve Windows i Linuxu.
Informace o plánovaných událostech ve Windows naleznete v tématu Naplánované události pro virtuální počítače s Windows.
Naplánované události poskytují proaktivní oznámení o nadcházejících událostech, kde najdete reaktivní informace o událostech, ke kterým už došlo, informace o dostupnosti virtuálních počítačů v Azure Resource Graphu a vytvoření pravidla upozornění dostupnosti pro virtuální počítač Azure.
Poznámka:
Naplánované události jsou obecně dostupné ve všech oblastech Azure. Informace o nejnovější verzi najdete v tématu Dostupnost verzí a oblastí.
Proč používat plánované události?
Mnoho aplikací může využít čas na přípravu údržby virtuálního počítače. Tento čas lze využít k provedení úkolů specifických pro aplikaci, které zlepšují dostupnost, spolehlivost a použitelnost, včetně následujících možností:
- Kontrolní bod a obnovení
- Vyprázdnění připojení
- Převzetí služeb při selhání primární repliky
- Odebrání z fondu nástroje pro vyrovnávání zatížení
- Protokolování událostí
- Řádné vypnutí
Se službou Scheduled Events může vaše aplikace zjistit, kdy dojde k údržbě, a aktivovat úlohy, aby omezila její dopad.
Služba Scheduled Events poskytuje události v následujících případech použití:
- Údržba iniciovaná platformou (například restartování virtuálního počítače, migrace za provozu nebo zachování paměti pro hostitele)
- Virtuální počítač běží na sníženém hostitelském hardwaru , který se předpovídá, že brzy selže.
- Virtuální počítač běžel na hostiteli, u kterého došlo k selhání hardwaru.
- Údržba iniciovaná uživatelem (například restartování nebo opětovné nasazení virtuálního počítače)
- Vyřazení instancí spotových virtuálních počítačů a spotových škálovacích sad .
Základy
Služba metadat zveřejňuje informace o spouštění virtuálních počítačů pomocí koncového bodu REST, který je přístupný z virtuálního počítače. Informace jsou dostupné prostřednictvím nesměrovatelné IP adresy a nejsou přístupné mimo virtuální počítač.
Obor
Naplánované události se doručují a mohou být potvrzeny:
- Samostatné virtuální počítače.
- Všechny virtuální počítače v cloudové službě Azure (Classic)
- Všechny virtuální počítače ve skupině dostupnosti.
- Všechny virtuální počítače ve skupině umístění škálovací sady
Plánované události pro všechny virtuální počítače v celé skupině dostupnosti nebo skupině umístění pro škálovací sadu virtuálních počítačů se doručí do všech ostatních virtuálních počítačů ve stejné skupině nebo sadě bez ohledu na využití zóny dostupnosti.
V důsledku toho zkontrolujte Resources
pole v události a zjistěte, které virtuální počítače jsou ovlivněné.
Poznámka:
Akcelerované virtuální počítače GPU ve škálovací sadě využívající 1 doménu selhání (FD = 1) obdrží pouze plánované události pro ovlivněný prostředek. Události nebudou vysílány do všech virtuálních počítačů ve stejné skupině umístění.
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 169.254.169.254
adresy. Úplný koncový bod pro nejnovější verzi naplánovaných událostí je:
http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Pokud se virtuální počítač nevytvořil v rámci virtuální sítě, výchozí případy cloudových služeb a klasických virtuálních počítačů vyžadují další logiku ke zjištění IP adresy, která se má použít. Informace o tom, jak zjistit koncový bod hostitele, najdete v této ukázce.
Dostupnost verzí a oblastí
Služba Naplánované události je verze. Verze jsou povinné; aktuální verze je 2020-07-01
.
Verze | Typ vydání | Oblasti | Poznámky k verzi |
---|---|---|---|
2020-07-01 | Všeobecná dostupnost | Všechny | |
2019-08-01 | Všeobecná dostupnost | Všechny | |
1. 4. 2019 | Všeobecná dostupnost | Všechny | |
1. 1. 2019 | Všeobecná dostupnost | Všechny | |
2017-11-01 | Všeobecná dostupnost | Všechny | |
2017-08-01 | Všeobecná dostupnost | Všechny | |
2017-03-01 | Preview | Všechny |
Poznámka:
Předchozí verze Preview plánovaných událostí podporovaly {latest} jako verzi api. Tento formát už není podporovaný a v budoucnu bude zastaralý.
Povolení a zakázání plánovaných událostí
Naplánované události jsou pro vaši službu povoleny při prvním provedení požadavku na události. V prvním volání až dvou minut byste měli očekávat zpožděnou odpověď a během 5 minut začnete přijímat události. Naplánované události jsou pro vaši službu zakázané, pokud do koncového bodu neprovádí požadavek po dobu 24 hodin.
Údržba iniciovaná uživatelem
Údržba virtuálních počítačů iniciovaná uživatelem prostřednictvím webu Azure Portal, rozhraní API, rozhraní příkazového řádku nebo PowerShellu způsobí naplánovanou událost. Pak můžete otestovat logiku přípravy údržby ve vaší aplikaci a vaše aplikace se může připravit na údržbu iniciovanou uživatelem.
Pokud virtuální počítač restartujete, naplánuje se událost s typem Reboot
. Pokud virtuální počítač nasadíte znovu, naplánuje se událost s typem Redeploy
. Události se zdrojem událostí uživatele se obvykle dají okamžitě schválit, aby nedocházelo ke zpoždění akcí iniciovaných uživatelem. Pro případ, že primární a sekundární virtuální počítač přestane reagovat, doporučujeme, aby primární a sekundární virtuální počítač komunikoval a schválil naplánované události vygenerované uživatelem. Okamžité schválení událostí zabraňuje zpožděním při obnovení aplikace zpět do dobrého stavu.
Naplánované události pro upgrady hostovaného operačního systému služby Virtual Machine Scale Sets nebo opětovné sestavení jsou podporovány pro velikosti virtuálních počítačů pro obecné účely, které podporují pouze aktualizace pro zachování paměti. Nefunguje pro řadu G, M, N a H. Naplánované události pro upgrady hostovaného operačního systému služby Virtual Machine Scale Sets a opětovné sestavení jsou ve výchozím nastavení zakázané. Pokud chcete pro tyto operace povolit plánované události na podporovaných velikostech virtuálních počítačů, nejprve je povolte pomocí souboru OSImageNotificationProfile.
Použití rozhraní API
Základní přehled
Existují dvě hlavní komponenty pro zpracování plánovaných událostí, přípravu a obnovení. Všechny aktuální naplánované události, které mají vliv na virtuální počítač, jsou k dispozici ke čtení prostřednictvím koncového bodu naplánovaných událostí IMDS. Když událost dosáhla stavu terminálu, odebere se ze seznamu událostí. Následující diagram znázorňuje různé přechody stavu, které může zaznamenat jedna naplánovaná událost:
U událostí ve stavu EventStatus:"Scheduled" budete muset provést kroky k přípravě úlohy. Po dokončení přípravy byste měli událost schválit pomocí rozhraní API naplánované události. V opačném případě se událost automaticky schválí při dosažení času NotBefore. Pokud je virtuální počítač ve sdílené infrastruktuře, systém pak počká na schválení úlohy nebo časového limitu u všech ostatních tenantů na stejném hardwaru. Jakmile se shromáždí schválení ze všech ovlivněných virtuálních počítačů nebo je dosaženo času NotBefore, Azure vygeneruje novou naplánovanou datovou část události s událostí EventStatus:"Started" a aktivuje začátek události údržby. Když událost dosáhla stavu terminálu, odebere se ze seznamu událostí. Slouží jako signál pro zákazníka k obnovení virtuálních počítačů.
Níže je kód psudeo, který demonstruje proces čtení a správy plánovaných událostí ve vaší aplikaci:
current_list_of_scheduled_events = get_latest_from_se_endpoint()
#prepare for new events
for each event in current_list_of_scheduled_events:
if event not in previous_list_of_scheduled_events:
prepare_for_event(event)
#recover from completed events
for each event in previous_list_of_scheduled_events:
if event not in current_list_of_scheduled_events:
receover_from_event(event)
#prepare for future jobs
previous_list_of_scheduled_events = current_list_of_scheduled_events
Vzhledem k tomu, že naplánované události se často používají pro aplikace s vysokými požadavky na dostupnost, existuje několik výjimečných případů, které by se měly zvážit:
- Po dokončení a odebrání naplánované události z pole nedojde k žádným dalším dopadům bez nové události včetně jiné události EventStatus:"Scheduled"
- Azure monitoruje operace údržby v celém vozovém parku a ve výjimečných případech určuje, že operace údržby je příliš vysoká, aby se použila. V takovém případě bude naplánovaná událost přímo z pole událostí odebrána z pole událostí.
- V případě selhání hardwaru Azure obchází stav Scheduled a okamžitě přejde do stavu EventStatus:"Started".
- I když je událost stále ve stavu EventStatus:"Started", může dojít k dalšímu dopadu kratší doby trvání, než jaká byla inzerována v naplánované události.
V rámci záruky dostupnosti Azure nebudou virtuální počítače v různých doménách selhání ovlivněny rutinními operacemi údržby současně. Mohou však mít operace serializované jeden po druhém. Virtuální počítače v jedné doméně selhání můžou přijímat plánované události s událostí EventStatus:"Scheduled" krátce po dokončení údržby jiné domény selhání. Bez ohledu na to, jakou architekturu jste zvolili, vždy kontrolujte nové události čekající na virtuální počítače.
I když se přesné časování událostí liší, následující diagram poskytuje přibližné vodítko, jak probíhá typická operace údržby:
- EventStatus:"Scheduled" to Approval Timeout: 15 minutes
- Doba trvání dopadu: 7 sekund
- EventStatus:"Started" to Completed (událost odebrána z pole Události): 10 minut
Všechny operace, které mají vliv na dostupnost virtuálního počítače, způsobí naplánovanou událost, ale ne všechny naplánované události se zobrazí v jiných oblastech Azure, jako jsou protokoly aktivit Azure nebo Resource Health. Pravidelně kontrolujte naplánované události a ujistěte se, že máte nejaktuálnější informace o všech nadcházejících dopadech na vaše virtuální počítače.
Hlavičky
Při dotazování služby Metadata Service musíte zadat hlavičku Metadata:true
, abyste zajistili, že požadavek nebyl neúmyslně přesměrován. Hlavička Metadata:true
se vyžaduje pro všechny naplánované žádosti o události. Pokud do požadavku zahrnete hlavičku, výsledkem je odpověď Chybný požadavek ze služby Metadata Service.
Dotaz na události
Naplánované události můžete dotazovat provedením následujícího volání:
Ukázka bashe
curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Ukázka PowerShellu
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01" | ConvertTo-Json -Depth 64
Ukázka Pythonu
import json
import requests
metadata_url ="http://169.254.169.254/metadata/scheduledevents"
header = {'Metadata' : 'true'}
query_params = {'api-version':'2020-07-01'}
def get_scheduled_events():
resp = requests.get(metadata_url, headers = header, params = query_params)
data = resp.json()
return data
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í.
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled" | "Started",
"NotBefore": {timeInUTC},
"Description": {eventDescription},
"EventSource" : "Platform" | "User",
"DurationInSeconds" : {timeInSeconds},
}
]
}
Vlastnosti události
Vlastnost | Popis |
---|---|
Dokument inkarnace | Celé číslo, které se zvýší, když se pole událostí změní. Dokumenty se stejnou inkarnací obsahují stejné informace o události a inkarnace se zvýší při změně události. |
EventId | Globálně jedinečný identifikátor této události. Příklad:
|
Typ události | Ovlivnění této události Hodnoty:
|
ResourceType | Typ prostředku, který tato událost ovlivňuje. Hodnoty:
|
Zdroje informací | Seznam prostředků, které tato událost ovlivňuje Příklad:
|
EventStatus | Stav této události Hodnoty:
Completed nebo podobný stav. Událost se už po dokončení události nevrátí. |
NotBefore | Čas, po kterém může tato událost začít. Událost se zaručuje, že se nespustí před touto dobou. Pokud se událost už spustila, bude prázdná. Příklad:
|
Popis | Popis této události Příklad:
|
EventSource | Iniciátor události. Příklad:
|
DurationInSeconds | Očekávaná doba přerušení způsobená událostí. Během okna dopadu může dojít ke sekundárním dopadům kratší doby trvání. Příklad:
|
Plánování událostí
Každá událost je naplánována minimální dobu v budoucnu na základě typu události. Tentokrát se projeví ve vlastnosti události NotBefore
.
Typ události | Minimální oznámení |
---|---|
Zablokovat | 15 minut |
Restartujte. | 15 minut |
Opětovné nasazení | 10 minut |
Ukončit | Konfigurovatelné uživatelem: 5 až 15 minut |
To znamená, že můžete zjistit budoucí plán události alespoň minimálním časem oznámení, než dojde k události. Jakmile je událost naplánovaná, přesune se do Started
stavu po schválení nebo NotBefore
uplynutí času. Ve výjimečných případech ale azure zruší operaci před jejím spuštěním. V takovém případě se událost odebere z pole Události a dopad nebude probíhat podle předchozího plánu.
Poznámka:
V některých případech dokáže Azure předpovědět selhání hostitele kvůli sníženému hardwaru a pokusí se zmírnit přerušení vaší služby naplánováním migrace. Ovlivněné virtuální počítače obdrží naplánovanou událost s událostí NotBefore
, která je obvykle v budoucnu několik dní. Skutečný čas se liší v závislosti na předpokládaném posouzení rizik selhání. Azure se pokusí o 7denní předstih, pokud je to možné, ale skutečný čas se liší a může být menší, pokud je predikce, že existuje vysoká pravděpodobnost, že hardware selhává bezprostředně. Pokud chcete minimalizovat riziko pro vaši službu v případě selhání hardwaru před migrací zahájenou systémem, doporučujeme virtuální počítač co nejdříve nasadit sami.
Poznámka:
V případě, že u hostitelského uzlu dojde k selhání hardwaru, Azure obejití minimální dobu oznámení a okamžitě zahájí proces obnovení ovlivněných virtuálních počítačů. Tím se zkracuje doba obnovení v případě, že ovlivněné virtuální počítače nemůžou reagovat. Během procesu obnovení se vytvoří událost pro všechny ovlivněné virtuální počítače s EventType = Reboot
a EventStatus = Started
.
Frekvence dotazování
Koncový bod můžete dotazovat na aktualizace tak často nebo zřídka, jak se vám líbí. Čím delší je však doba mezi požadavky, tím více času můžete přijít o reakci na nadcházející událost. Většina událostí má 5 až 15 minut předchozího oznámení, i když v některých případech může být předběžné oznámení o 30 sekundách až 30 sekund. Pokud chcete zajistit, abyste měli co nejvíce času na zmírnění opatření, doporučujeme službu dotazovat jednou za sekundu.
Zahájení 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 tím, že zavoláte POST
službu Metadata Service.EventId
Toto volání označuje Azure, že může zkrátit minimální dobu oznámení (pokud je to možné). Událost se nemusí spustit okamžitě po schválení, v některých případech Azure před pokračováním v události vyžaduje schválení všech virtuálních počítačů hostovaných na uzlu.
V textu požadavku se očekává POST
následující ukázka JSON. Požadavek by měl obsahovat seznam .StartRequests
Každá StartRequest
obsahuje EventId
událost, kterou chcete urychlit:
{
"StartRequests" : [
{
"EventId": {EventId}
}
]
}
Služba vždy vrátí kód úspěchu 200, pokud se předá platné ID události, i když událost už schválil jiný virtuální počítač. Kód chyby 400 označuje, že hlavička požadavku nebo datová část byla poškozena.
Poznámka:
Události nepokračují, pokud nejsou schváleny prostřednictvím zprávy POST nebo uplynulého času NotBefore. To zahrnuje události aktivované uživatelem, jako jsou restartování virtuálního počítače z webu Azure Portal.
Ukázka bashe
curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Ukázka PowerShellu
Invoke-RestMethod -Headers @{"Metadata" = "true"} -Method POST -body '{"StartRequests": [{"EventId": "5DD55B64-45AD-49D3-BBC9-F57D4EA97BD7"}]}' -Uri http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01 | ConvertTo-Json -Depth 64
Ukázka Pythonu
import json
import requests
def confirm_scheduled_event(event_id):
# This payload confirms a single event with id event_id
payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
response = requests.post("http://169.254.169.254/metadata/scheduledevents",
headers = {'Metadata' : 'true'},
params = {'api-version':'2020-07-01'},
data = payload)
return response.status_code
Poznámka:
Potvrzení události umožňuje, aby událost pokračovala pro všechny Resources
události, nejen pro virtuální počítač, který tuto událost uznává. Proto můžete zvolit vodicí znak, který bude koordinovat potvrzení, což může být jednoduché jako první stroj v terénu Resources
.
Ukázkové odpovědi
Následující události jsou příkladem, který viděli dva virtuální počítače, které byly migrovány za provozu do jiného uzlu.
Mění se DocumentIncarnation
pokaždé, když jsou v Events
ní nové informace. Schválení události by umožnilo ukotvení pokračovat pro WestNO_0 i WestNO_1. Hodnota DurationInSeconds
-1 značí, že platforma neví, jak dlouho bude operace trvat.
{
"DocumentIncarnation": 1,
"Events": [
]
}
{
"DocumentIncarnation": 2,
"Events": [
{
"EventId": "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
"EventStatus": "Scheduled",
"EventType": "Freeze",
"ResourceType": "VirtualMachine",
"Resources": [
"WestNO_0",
"WestNO_1"
],
"NotBefore": "Mon, 11 Apr 2022 22:26:58 GMT",
"Description": "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
"EventSource": "Platform",
"DurationInSeconds": 5
}
]
}
{
"DocumentIncarnation": 3,
"Events": [
{
"EventId": "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
"EventStatus": "Started",
"EventType": "Freeze",
"ResourceType": "VirtualMachine",
"Resources": [
"WestNO_0",
"WestNO_1"
],
"NotBefore": "",
"Description": "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
"EventSource": "Platform",
"DurationInSeconds": 5
}
]
}
{
"DocumentIncarnation": 4,
"Events": [
]
}
Ukázka Pythonu
Následující ukázková služba dotazuje službu Metadata Service na naplánované události a schválí každou nevyřízených událostí:
#!/usr/bin/python
import json
import requests
from time import sleep
# The URL to access the metadata service
metadata_url ="http://169.254.169.254/metadata/scheduledevents"
# This must be sent otherwise the request will be ignored
header = {'Metadata' : 'true'}
# Current version of the API
query_params = {'api-version':'2020-07-01'}
def get_scheduled_events():
resp = requests.get(metadata_url, headers = header, params = query_params)
data = resp.json()
return data
def confirm_scheduled_event(event_id):
# This payload confirms a single event with id event_id
# You can confirm multiple events in a single request if needed
payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
response = requests.post(metadata_url,
headers= header,
params = query_params,
data = payload)
return response.status_code
def log(event):
# This is an optional placeholder for logging events to your system
print(event["Description"])
return
def advanced_sample(last_document_incarnation):
# Poll every second to see if there are new scheduled events to process
# Since some events may have necessarily short warning periods, it is
# recommended to poll frequently
found_document_incarnation = last_document_incarnation
while (last_document_incarnation == found_document_incarnation):
sleep(1)
payload = get_scheduled_events()
found_document_incarnation = payload["DocumentIncarnation"]
# We recommend processing all events in a document together,
# even if you won't be actioning on them right away
for event in payload["Events"]:
# Events that have already started, logged for tracking
if (event["EventStatus"] == "Started"):
log(event)
# Approve all user initiated events. These are typically created by an
# administrator and approving them immediately can help to avoid delays
# in admin actions
elif (event["EventSource"] == "User"):
confirm_scheduled_event(event["EventId"])
# For this application, freeze events less that 9 seconds are considered
# no impact. This will immediately approve them
elif (event["EventType"] == "Freeze" and
int(event["DurationInSeconds"]) >= 0 and
int(event["DurationInSeconds"]) < 9):
confirm_scheduled_event(event["EventId"])
# Events that may be impactful (for example, reboot or redeploy) may need custom
# handling for your application
else:
#TODO Custom handling for impactful events
log(event)
print("Processed events from document: " + str(found_document_incarnation))
return found_document_incarnation
def main():
# This will track the last set of events seen
last_document_incarnation = "-1"
input_text = "\
Press 1 to poll for new events \n\
Press 2 to exit \n "
program_exit = False
while program_exit == False:
user_input = input(input_text)
if (user_input == "1"):
last_document_incarnation = advanced_sample(last_document_incarnation)
elif (user_input == "2"):
program_exit = True
if __name__ == '__main__':
main()
Další kroky
- Projděte si ukázky kódu naplánovaných událostí v úložišti Azure Instance Metadata Scheduled Events na GitHubu.
- Projděte si ukázky kódu naplánovaných událostí Node.js v úložišti GitHub ukázek Azure.
- Přečtěte si další informace o rozhraních API, která jsou k dispozici ve službě Instance Metadata Service.
- Přečtěte si o plánované údržbě virtuálních počítačů s Linuxem v Azure.
- Zjistěte, jak protokolovat naplánované události pomocí služby Azure Event Hubs v úložišti GitHub ukázek Azure.