Azure Metadata Service: Geplande gebeurtenissen voor Linux-VM’s

Van toepassing op: ✔️ Virtuele Linux-heavy_check_mark: flexibele schaalsets ✔️ uniforme schaalsets

Scheduled Events is een Azure-Metadata Service die uw toepassing tijd geeft om het onderhoud van virtuele machines (VM's) voor te bereiden. Het bevat informatie over aanstaande onderhoudsgebeurtenissen (bijvoorbeeld opnieuw opstarten), zodat uw toepassing zich erop kan voorbereiden en onderbrekingen kan beperken. Het is beschikbaar voor alle Azure Virtual Machines-typen, waaronder PaaS en IaaS op zowel Windows als Linux.

Zie VM'Scheduled Events Windows voor Scheduled Events informatie over Windows VM's.

Notitie

Scheduled Events is algemeen beschikbaar in alle Azure-regio's. Zie Beschikbaarheid van versies en regio's voor de meest recente release-informatie.

Waarom zou u Scheduled Events?

Veel toepassingen kunnen profiteren van tijd tot voorbereiding op VM-onderhoud. De tijd kan worden gebruikt om toepassingsspecifieke taken uit te voeren die de beschikbaarheid, betrouwbaarheid en servicebaarheid verbeteren, waaronder:

  • Controlepunt en herstel.
  • Verbindingsafvoer.
  • Failover van primaire replica.
  • Verwijderen uit een load balancer groep.
  • Logboekregistratie.
  • Het afsluiten is zonder meer goed.

Met Scheduled Events kan uw toepassing ontdekken wanneer onderhoud wordt uitgevoerd en taken activeren om de impact ervan te beperken.

Scheduled Events biedt gebeurtenissen in de volgende use cases:

De basisbeginselen

Metadata Service geeft informatie weer over het uitvoeren van VM's met behulp van een REST-eindpunt dat toegankelijk is vanuit de VM. De informatie is beschikbaar via een niet-omsleerbaar IP-adres, zodat deze niet buiten de VM beschikbaar wordt gemaakt.

Bereik

Geplande gebeurtenissen worden geleverd aan:

  • Zelfstandige Virtual Machines.
  • Alle VM's in een cloudservice.
  • Alle VM's in een beschikbaarheidsset.
  • Alle VM's in een beschikbaarheidszone.
  • Alle VM's in een plaatsingsgroep voor schaalsets.

Notitie

De geplande gebeurtenissen zijn specifiek voor VM's in een beschikbaarheidszone en gaan naar enkele VM's in een zone. Als u bijvoorbeeld 100 VM's in een beschikbaarheidsset hebt en er een update van een van deze VM's is, gaat de geplande gebeurtenis naar alle 100, terwijl als er 100 enkele VM's in een zone zijn, de gebeurtenis alleen naar de VM gaat die wordt beïnvloed.

Als gevolg hiervan controleert u het Resources veld in de gebeurtenis om te bepalen welke VM's worden beïnvloed.

Eindpuntdetectie

Voor VNET-VM's is Metadata Service beschikbaar via een statisch niet-routeerbaar IP-adres, 169.254.169.254 . Het volledige eindpunt voor de meest recente versie van Scheduled Events is:

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

Als de VM niet is gemaakt binnen een Virtual Network, de standaardgevallen voor cloudservices en klassieke VM's, is extra logica vereist om het IP-adres te ontdekken dat moet worden gebruikt. Zie dit voorbeeld voor meer informatie over het ontdekkenvan het host-eindpunt.

Beschikbaarheid van versie en regio

Er is Scheduled Events versie van de service. Versies zijn verplicht; de huidige versie is 2020-07-01 .

Versie Releasetype Regio's Opmerkingen bij de release
2020-07-01 Algemene beschikbaarheid Alles
  • Ondersteuning toegevoegd voor duur van gebeurtenis
  • 2019-08-01 Algemene beschikbaarheid Alles
  • Ondersteuning toegevoegd voor gebeurtenisbron
  • 2019-04-01 Algemene beschikbaarheid Alles
  • Ondersteuning toegevoegd voor beschrijving van gebeurtenis
  • 2019-01-01 Algemene beschikbaarheid Alles
  • Ondersteuning toegevoegd voor virtuele-machineschaalsets EventType 'Terminate'
  • 2017-11-01 Algemene beschikbaarheid Alles
  • Ondersteuning toegevoegd voor de uitzetting van spot-VM's, EventType 'Preempt'
  • 2017-08-01 Algemene beschikbaarheid Alles
  • Voorgedaald onderstrepingsteken verwijderd uit resourcenamen voor IaaS-VM's
  • Vereiste voor metagegevensheader afgedwongen voor alle aanvragen
  • 2017-03-01 Preview Alles
  • Eerste release
  • Notitie

    Eerdere preview-versies van Scheduled Events ondersteund {latest} als api-versie. Deze indeling wordt niet meer ondersteund en wordt in de toekomst afgeschaft.

    Geplande gebeurtenissen in- en uitschakelen

    Scheduled Events is ingeschakeld voor uw service de eerste keer dat u een aanvraag voor gebeurtenissen doet. U kunt een vertraagd antwoord verwachten in uw eerste aanroep van maximaal twee minuten.

    Scheduled Events is uitgeschakeld voor uw service als er 24 uur geen aanvraag wordt ingediend.

    Door de gebruiker geïnitieerd onderhoud

    Door de gebruiker geïnitieerd VM-onderhoud via de Azure Portal, API, CLI of PowerShell resulteert in een geplande gebeurtenis. Vervolgens kunt u de logica voor onderhoudsvoorbereiding in uw toepassing testen en uw toepassing kan worden voorbereid op door de gebruiker geïnitieerd onderhoud.

    Als u een VM opnieuw opstart, wordt er een gebeurtenis met het type Reboot gepland. Als u een VM opnieuw wilt plannen, wordt er een gebeurtenis met het type Redeploy gepland.

    De API gebruiken

    Kopteksten

    Wanneer u een query Metadata Service, moet u de header verstrekken om ervoor te zorgen dat de aanvraag niet per ongeluk Metadata:true is omgeleid. De Metadata:true header is vereist voor alle geplande gebeurtenissenaanvragen. Het niet opnemen van de header in de aanvraag resulteert in een 'Bad Request'-antwoord van Metadata Service.

    Query uitvoeren op gebeurtenissen

    U kunt een query uitvoeren op geplande gebeurtenissen door de volgende aanroep uit te voeren:

    Bash

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

    Een antwoord bevat een matrix met geplande gebeurtenissen. Een lege matrix betekent dat er momenteel geen gebeurtenissen zijn gepland. In het geval dat er geplande gebeurtenissen zijn, bevat het antwoord een matrix met gebeurtenissen.

    {
        "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},
            }
        ]
    }
    

    Gebeurteniseigenschappen

    Eigenschap Beschrijving
    EventId Wereldwijd unieke id voor deze gebeurtenis.

    Voorbeeld:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Gevolgen voor deze gebeurtenis.

    Waarden:
    • Freeze: De virtuele machine is gepland om een paar seconden te onderbreken. DE CPU- en netwerkconnectiviteit kunnen worden opgeschort, maar dit heeft geen invloed op het geheugen of geopende bestanden.
    • Reboot: De virtuele machine is gepland voor opnieuw opstarten (niet-permanent geheugen gaat verloren).
    • Redeploy: De virtuele machine is gepland om te worden verplaatst naar een ander knooppunt (kortstondige schijven gaan verloren).
    • Preempt: De virtuele spot-machine wordt verwijderd (kortstondige schijven gaan verloren).
    • Terminate: De virtuele machine is gepland om te worden verwijderd.
    ResourceType Het type resource dat van invloed is op deze gebeurtenis.

    Waarden:
    • VirtualMachine
    Resources Lijst met resources die van invloed zijn op deze gebeurtenis. De lijst bevat gegarandeerd machines uit ten beste één updatedomein,maar bevat mogelijk niet alle computers in de UD.

    Voorbeeld:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Status van deze gebeurtenis.

    Waarden:
    • Scheduled: Deze gebeurtenis wordt gepland om te beginnen na de tijd die is opgegeven in de NotBefore eigenschap .
    • Started: deze gebeurtenis is gestart.
    Er Completed wordt nooit een of vergelijkbare status opgegeven. De gebeurtenis wordt niet meer geretourneerd wanneer de gebeurtenis is voltooid.
    NotBefore Het tijdstip waarna deze gebeurtenis kan starten.

    Voorbeeld:
    • Ma, 19 sep 2016 18:29:47 GMT
    Description Beschrijving van deze gebeurtenis.

    Voorbeeld:
    • De hostserver ondergaat onderhoud.
    EventSource Initiator van de gebeurtenis.

    Voorbeeld:
    • Platform: Deze gebeurtenis wordt geïnitieerd per platform.
    • User: Deze gebeurtenis wordt geïnitieerd door de gebruiker.
    DurationInSeconds De verwachte duur van de onderbreking die wordt veroorzaakt door de gebeurtenis.

    Voorbeeld:
    • 9: De onderbreking die wordt veroorzaakt door de gebeurtenis duurt 9 seconden.
    • -1: De standaardwaarde die wordt gebruikt als de duur van de impact onbekend of niet van toepassing is.

    Gebeurtenisplanning

    Elke gebeurtenis wordt gepland voor een minimale hoeveelheid tijd in de toekomst op basis van het gebeurtenistype. Deze tijd wordt weerspiegeld in de eigenschap van een NotBefore gebeurtenis.

    EventType Minimale kennisgeving
    Bevriezen 15 minuten
    Opnieuw opstarten 15 minuten
    Opnieuw implementeren 10 minuten
    Toe-eigenen 30 seconden
    Terminate Configureerbaar door gebruiker:5 tot 15 minuten

    Notitie

    In sommige gevallen kan Azure hoststoringen voorspellen als gevolg van gedegradeerde hardware en wordt geprobeerd onderbrekingen van uw service te beperken door een migratie te plannen. Betrokken virtuele machines ontvangen een geplande gebeurtenis met een NotBefore die doorgaans een paar dagen in de toekomst is. De werkelijke tijd varieert afhankelijk van de voorspelde risicoanalyse voor fouten. Azure probeert waar mogelijk zeven dagen vooraf te melden, maar de werkelijke tijd varieert en is mogelijk kleiner als de voorspelling is dat er een grote kans is dat de hardware aanzienlijk defect is. Om het risico voor uw service te minimaliseren als de hardware vóór de door het systeem geïnitieerde migratie uitvalt, raden we u aan uw virtuele machine zo snel mogelijk zelf opnieuw te gaan gebruiken.

    Pollingfrequentie

    U kunt het eindpunt zo vaak of niet regelmatig peilen naar updates als u wilt. Hoe langer de tijd tussen aanvragen, hoe meer tijd u mogelijk kwijt bent om te reageren op een aanstaande gebeurtenis. De meeste gebeurtenissen hebben een kennisgeving van 5 tot 15 minuten vooraf, hoewel de kennisgeving in sommige gevallen maar 30 seconden kan duren. Om ervoor te zorgen dat u zoveel mogelijk tijd hebt om mitiging-acties uit te voeren, wordt u aangeraden de service één keer per seconde te peilen.

    Een gebeurtenis starten

    Nadat u een aanstaande gebeurtenis hebt geleerd en uw logica voor een goede afsluiting hebt beëindigd, kunt u de openstaande gebeurtenis goedkeuren door een aanroep te doen naar Metadata Service POST met EventId . Deze aanroep geeft azure aan dat de minimale meldingstijd kan worden verkort (indien mogelijk).

    Het volgende JSON-voorbeeld wordt verwacht in de POST aanvraag body. De aanvraag moet een lijst met StartRequests bevatten. Elk StartRequest bevat voor de gebeurtenis die u wilt EventId versnellen:

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

    Bash-voorbeeld

    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
    

    Notitie

    Als u een gebeurtenis bevestigt, kan de gebeurtenis doorgaan voor alle gebeurtenissen, niet alleen voor de VM die Resources de gebeurtenis bevestigt. Daarom kunt u ervoor kiezen om een leider te kiezen om de bevestiging te coördineren, wat net zo eenvoudig kan zijn als de eerste computer in het Resources veld.

    Python-voorbeeld

    In het volgende voorbeeld worden Metadata Service geplande gebeurtenissen en wordt elke openstaande gebeurtenis goedgekeurd:

    #!/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()
    

    Volgende stappen