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:
- Door het platform geïnitieerd onderhoud (bijvoorbeeld VM opnieuw opstarten, livemigratie of updates met geheugenbehoud voor de host)
- Virtuele machine wordt uitgevoerd op gedegradeerde hosthardware die naar verwachting binnenkort zal mislukken
- Door de gebruiker geïnitieerd onderhoud (bijvoorbeeld wanneer een gebruiker een VM opnieuw start of opnieuwployeert)
- Ter plaatse VM- en spot-instanties van schaalsets.
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 | |
| 2019-08-01 | Algemene beschikbaarheid | Alles | |
| 2019-04-01 | Algemene beschikbaarheid | Alles | |
| 2019-01-01 | Algemene beschikbaarheid | Alles | |
| 2017-11-01 | Algemene beschikbaarheid | Alles | |
| 2017-08-01 | Algemene beschikbaarheid | Alles | |
| 2017-03-01 | Preview | Alles |
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:
|
| EventType | Gevolgen voor deze gebeurtenis. Waarden:
|
| ResourceType | Het type resource dat van invloed is op deze gebeurtenis. Waarden:
|
| 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:
|
| EventStatus | Status van deze gebeurtenis. Waarden:
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:
|
| Description | Beschrijving van deze gebeurtenis. Voorbeeld:
|
| EventSource | Initiator van de gebeurtenis. Voorbeeld:
|
| DurationInSeconds | De verwachte duur van de onderbreking die wordt veroorzaakt door de gebeurtenis. Voorbeeld:
|
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
- Bekijk Scheduled Events op Azure Friday om een demo te bekijken.
- Bekijk de Scheduled Events codevoorbeelden in de opslagplaats Azure Instance Metadata Scheduled Events GitHub .
- Lees meer over de API's die beschikbaar zijn in de Instance Metadata Service.
- Meer informatie over gepland onderhoud voor virtuele Linux-machines in Azure.