Azure Metadata Service: Scheduled Events pro virtuální počítače s Linuxem

Platí pro: ✔️ Virtuální počítače s Linuxem ✔️ Flexibilní škálovací sady ✔️ Jednotné škálovací sady

Scheduled Events je služba Azure Metadata Service, která vaší aplikaci poskytuje čas na přípravu na údržbu virtuálních počítačů. Poskytuje informace o nadcházejících událostech údržby (například restartování), aby se na ně vaše aplikace mohl připravit a omezit přerušení. Je k dispozici pro všechny typy Virtual Machines Azure, včetně PaaS a IaaS v Windows i Linuxu.

Informace o tom, Scheduled Events na Windows, najdete v Scheduled Events pro Windows virtuální počítače.

Poznámka

Scheduled Events je obecně dostupná ve všech oblastech Azure. Informace o nejnovější verzi najdete v tématu Dostupnost verze a oblasti.

Proč používat Scheduled Events?

Řada aplikací může využívat čas přípravy na údržbu virtuálního počítače. Čas lze použít k provádění úloh specifických pro aplikaci, které zlepšují dostupnost, spolehlivost a použitelnost, včetně:

  • 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í.
  • Bezvýkonné vypnutí.

Díky Scheduled Events může aplikace zjistit, kdy dojde k údržbě, a aktivovat úlohy, které omezují její dopad.

Scheduled Events poskytuje události v následujících případech použití:

Základy

Metadata Service zpřístupňuje informace o spouštění virtuálních počítače pomocí koncového bodu REST, který je přístupný z virtuálního počítače. Informace jsou k dispozici prostřednictvím nesměrovatelné IP adresy, takže nejsou zveřejněné mimo virtuální počítač.

Obor

Plánované události se doručí do:

  • Samostatné Virtual Machines.
  • Všechny virtuální počítače v cloudové službě.
  • Všechny virtuální počítače ve skupině dostupnosti.
  • Všechny virtuální počítače v zóně dostupnosti.
  • Všechny virtuální počítače ve skupině umístění škálovací sady

Poznámka

Naplánované události jsou specifické pro virtuální počítače v zóně dostupnosti, a to do jednoho virtuálního počítače v zóně. Pokud máte například 100 virtuálních počítače ve skupině dostupnosti a dojde k aktualizaci jednoho z nich, plánovaná událost se dostane na všech 100, zatímco pokud je v zóně 100 jednotlivých virtuálních počítače, událost se dostane jenom do ovlivněného virtuálního počítače.

V důsledku toho zkontrolujte pole v události Resources a zjistěte, které virtuální počítače jsou ovlivněné.

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

Pro virtuální počítače s podporou virtuální Metadata Service k dispozici ze statické nesměrovatelné IP adresy 169.254.169.254 . Úplný koncový bod pro nejnovější verzi Scheduled Events:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Pokud virtuální počítač není vytvořený v rámci Virtual Network, výchozí případy pro cloudové služby a klasické virtuální počítače, ke zjištění IP adresy, která se má použít, se vyžaduje další logika. Informace o zjištění koncového bodu hostitele najdetev této ukázce.

Dostupnost verzí a oblastí

Služba Scheduled Events má verzi. Verze jsou povinné. aktuální verze je 2020-07-01 .

Verze Typ verze Oblasti Poznámky k verzi
2020-07-01 Obecná dostupnost Vše
  • Přidání podpory pro dobu trvání události
  • 2019-08-01 Obecná dostupnost Vše
  • Přidání podpory pro zdroj událostí
  • 2019-04-01 Obecná dostupnost Vše
  • Přidání podpory pro popis události
  • 2019-01-01 Obecná dostupnost Vše
  • Přidání podpory pro škálovací sady virtuálních počítačů – Typ události Terminate
  • 2017-11-01 Obecná dostupnost Vše
  • Přidání podpory pro vyprázdnení spotové virtuálního počítače – Typ události Preempt
  • 2017-08-01 Obecná dostupnost Vše
  • Odebrání předpřipraveného podtržítka z názvů prostředků pro virtuální počítače IaaS
  • Požadavek na hlavičku metadat vynucovaný pro všechny požadavky
  • 2017-03-01 Preview Vše
  • Původní vydaná verze
  • Poznámka

    Předchozí verze Preview Scheduled Events verzi {latest} jako verzi api-version. Tento formát se už nepodporuje a v budoucnu bude zastaralý.

    Povolení a zakázání plánovaných událostí

    Scheduled Events služba povolená při prvním vyžádání událostí. Při prvním volání až dvou minut byste měli očekávat zpožděnou odpověď.

    Scheduled Events je pro vaši službu zakázaná, pokud po dobu 24 hodin nevyžádá žádost.

    Údržba iniciovaná uživatelem

    Při údržbě virtuálního počítače iniciované uživatelem prostřednictvím Azure Portal, rozhraní API, rozhraní příkazového řádku nebo PowerShellu dojde k plánované události. Pak můžete otestovat logiku přípravy údržby ve vaší aplikaci a vaše aplikace se může připravit na údržbu iniciované uživatelem.

    Pokud virtuální počítač restartujete, naplánuje se Reboot událost s typem . Pokud virtuální počítač nasadíte znovu, naplánována bude Redeploy událost s typem .

    Použití rozhraní API

    Hlavičky

    Při dotazování Metadata Service, musíte zadat hlavičku , abyste zajistili, že požadavek nebyl Metadata:true neúmyslně přesměrován. Hlavička Metadata:true je povinná pro všechny požadavky na naplánované události. Pokud hlavičku nezahrníte do požadavku, výsledkem bude odpověď "Chybný požadavek" z Metadata Service.

    Dotaz na události

    Na plánované události se můžete dotazovat následujícím voláním:

    Bash

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Odpověď obsahuje pole plánovaných událostí. Prázdné pole znamená, že aktuálně nejsou naplánované žádné události. V případě naplá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
    ID události Globálně jedinečný identifikátor pro tuto událost.

    Příklad:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    Typ události Dopad této události způsobí.

    Hodnoty:
    • Freeze: U virtuálního počítače se naplánovalo pozastavení na několik sekund. Může být pozastaveno připojení k procesoru a k síti, ale neexistuje žádný vliv na paměť nebo otevřené soubory.
    • Reboot: Virtuální počítač má naplánován restart (netrvalá paměť je ztracená).
    • Redeploy: Virtuální počítač má naplánovaný přesun na jiný uzel (dočasné disky se ztratí).
    • Preempt: Odstraňuje se virtuální počítač se skvrnou (dočasné disky se ztratí).
    • Terminate: Je naplánováno odstranění virtuálního počítače.
    ResourceType Typ prostředku, na který tato událost ovlivňuje.

    Hodnoty:
    • VirtualMachine
    Zdroje informací Seznam prostředků, které tato událost ovlivňuje V seznamu je zaručeno, že bude obsahovat počítače z jedné aktualizační domény, ale nemusí obsahovat všechny počítače v ud.

    Příklad:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Stav této události

    Hodnoty:
    • Scheduled: Tato událost je naplánována na spuštění po uplynutí doby zadané ve NotBefore Vlastnosti.
    • Started: Tato událost je spuštěná.
    CompletedNení k dispozici žádný nebo podobný stav. Událost již není vrácena po dokončení události.
    NotBefore Čas, po kterém může být tato událost spuštěna.

    Příklad:
    • Pondělí 19. září 2016 18:29:47 GMT
    Description Popis této události

    Příklad:
    • Hostitelský server prochází údržbou.
    EventSource Iniciátor události.

    Příklad:
    • Platform: Tato událost je iniciována platformou.
    • User: Tato událost je iniciována uživatelem.
    DurationInSeconds Očekávaná doba přerušení způsobená událostí.

    Příklad:
    • 9: Přerušení způsobené událostí bude poslední po dobu 9 sekund.
    • -1: Výchozí hodnota, která se používá v případě, že doba trvání dopadu je buď neznámá, nebo není k dispozici.

    Plánování událostí

    Každé události je naplánováno minimální množství času v budoucnu na základě typu události. Tato doba se projeví ve vlastnosti události NotBefore .

    Typ události Minimální oznámení
    Uvolnění 15 minut
    Restartování 15 minut
    Opětovné nasazení 10 minut
    Přerušen 30 sekund
    Terminate (Ukončení) Uživatelsky konfigurovatelné: 5 až 15 minut

    Poznámka

    V některých případech může Azure předpovědět selhání hostitele kvůli zhoršenému hardwaru a při plánování migrace se pokusí zmírnit přerušení služby. Ovlivněné virtuální počítače dostanou plánovanou událost NotBefore , která je obvykle několik dní v budoucnu. Skutečný čas se liší v závislosti na předpokládaném vyhodnocení rizik při selhání. Pokud je to možné, Azure se pokusí poskytnout oznámení v předstihu 7 dní, ale skutečná doba se změní a může být menší, pokud je předpověď taková, že dojde k bezprostřednímu výpadku hardwaru. Abyste minimalizovali riziko pro vaši službu pro případ, že se hardware před migrací iniciované systémem nezdařil, doporučujeme, abyste virtuální počítač co nejdříve znovu nasadili.

    Frekvence cyklického dotazování

    Koncový bod můžete podle potřeby dotazovat na aktualizace, jak často nebo často. Doba mezi požadavky však bude trvat déle, než budete chtít reagovat na nadcházející událost. Většina událostí má 5 až 15 minut oznámení předem, i když v některých případech může předběžné oznámení trvat až 30 sekund. Aby bylo zajištěno, že budete mít k dispozici co nejvíce času pro zmírňování akcí, doporučujeme, abyste službu provedli jednou za sekundu.

    Spustit událost

    Jakmile se seznámíte s nadcházející událostí a dokončíte logiku pro řádné vypnutí, můžete tuto událost schválit tím, že POST zavoláte metadata Service s EventId . Toto volání indikuje Azure, že může zkrátit minimální dobu oznámení (Pokud je to možné).

    V textu žádosti se očekává následující ukázka JSON POST . Žádost by měla obsahovat seznam StartRequests . Každý StartRequest obsahuje EventId pro událost, kterou chcete urychlit:

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

    Ukázka bash

    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
    

    Poznámka

    Potvrzení události umožní, aby událost pokračovala v případě, že událost Resources není pouze virtuálním počítačem, který potvrzuje událost. Proto můžete zvolit vedoucího, který bude koordinovat potvrzení, což může být jednoduché jako první počítač v Resources poli.

    Ukázka Pythonu

    Následující ukázkové dotazy Metadata Service pro naplánované události a schvalují každou zbývající událost:

    #!/usr/bin/python
    
    import json
    import socket
    import urllib2
    
    metadata_url = "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01"
    this_host = socket.gethostname()
    
    
    def get_scheduled_events():
        req = urllib2.Request(metadata_url)
        req.add_header('Metadata', 'true')
        resp = urllib2.urlopen(req)
        data = json.loads(resp.read())
        return data
    
    
    def handle_scheduled_events(data):
        for evt in data['Events']:
            eventid = evt['EventId']
            status = evt['EventStatus']
            resources = evt['Resources']
            eventtype = evt['EventType']
            resourcetype = evt['ResourceType']
            notbefore = evt['NotBefore'].replace(" ", "_")
        description = evt['Description']
        eventSource = evt['EventSource']
            if this_host in resources:
                print("+ Scheduled Event. This host " + this_host +
                    " is scheduled for " + eventtype + 
            " by " + eventSource + 
            " with description " + description +
            " not before " + notbefore)
                # Add logic for handling events here
    
    
    def main():
        data = get_scheduled_events()
        handle_scheduled_events(data)
    
    
    if __name__ == '__main__':
        main()
    

    Další kroky