Azure Metadata Service: Scheduled Events para máquinas virtuales Linux

Versión Tipo de versión Regions Notas de la versión
01-07-2020 Disponibilidad general All
  • Compatibilidad agregada con la duración de eventos
  • 2019-08-01 Disponibilidad general All
  • Compatibilidad agregada con el origen del evento
  • 01-04-2019 Disponibilidad general All
  • Compatibilidad agregada con la descripción de eventos
  • 2019-01-01 Disponibilidad general All
  • Compatibilidad agregada con conjuntos de escalado de máquinas virtuales EventType "Terminate"
  • 01-11-2017 Disponibilidad general All
  • Se agregó compatibilidad para la expulsión de la máquina virtual de Azure Spot EventType 'Preempt'
  • 2017-08-01 Disponibilidad general All
  • Se quitó el guion bajo antepuesto de los nombres de recursos en las máquinas virtuales de IaaS
  • Se aplicó el requisito de encabezado de metadatos para todas las solicitudes
  • 2017-03-01 Vista previa All
  • Versión inicial
  • Nota

    Versiones preliminares de Scheduled Events admitidas {más recientes} como la versión de API. Este formato ya no es compatible y dejará de utilizarse en el futuro.

    Habilitación y deshabilitación de Scheduled Events

    Scheduled Events se habilita para un servicio la primera vez que se realiza una solicitud de eventos. Debe esperar hasta dos minutos de demora en la respuesta en la primera llamada.

    Scheduled Events se deshabilita para el servicio si no se realiza una solicitud durante 24 horas.

    Mantenimiento iniciado por el usuario

    El mantenimiento de las máquinas virtuales iniciado por el usuario a través de Azure Portal, API, CLI o PowerShell, da lugar a un evento programado. Esto permite probar la lógica de preparación del mantenimiento en la aplicación, además de que la aplicación pueda prepararse para el mantenimiento iniciado por el usuario.

    Si reinicia una máquina virtual, se programa un evento del tipo Reboot. Si vuelve a implementar una máquina virtual, se programa un evento del tipo Redeploy.

    Uso de la API

    encabezados

    Al realizar consultas a Metadata Service, debe proporcionar el encabezado Metadata:true para asegurarse de que la solicitud no se haya redirigido de manera involuntaria. El encabezado Metadata:true es necesario para todas las solicitudes de eventos programados. Un error al incluir el encabezado en la solicitud generará una respuesta del tipo "Solicitud incorrecta" de Metadata Service.

    Consulta de eventos

    Puede consultar los eventos programados; para ello, simplemente haga la siguiente llamada:

    Bash

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

    Una respuesta contiene una matriz de eventos programados. Una matriz vacía significa que actualmente no hay eventos programados. En caso de que haya eventos programados, la respuesta contiene una matriz de eventos.

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

    Propiedades de evento

    Propiedad Descripción
    EventId Es un identificador único global del evento.

    Ejemplo:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Es el impacto causado por el evento.

    Valores:
    • Freeze: la máquina virtual está programada para pausarse durante unos segundos. Puede que se suspenda la conectividad de la CPU y la red, pero no afecta a la memoria ni a los archivos abiertos.
    • Reboot: la máquina virtual está programada para reiniciarse (se borrará la memoria no persistente).
    • Redeploy: la máquina virtual está programada para moverse a otro nodo (los discos efímeros se pierden).
    • Preempt: se está eliminando la máquina virtual de Azure Spot (se pierden los discos efímeros).
    • Terminate: la máquina virtual está programada para eliminarse.
    ResourceType Es el tipo de recurso al que este evento afecta.

    Valores:
    • VirtualMachine
    Recursos Es la lista de recursos a los que este evento afecta. Se garantiza que contenga máquinas de un dominio de actualización como máximo, pero puede no contener todas las máquinas en dicho dominio.

    Ejemplo:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Es el estado de este evento.

    Valores:
    • Scheduled: este evento está programado para iniciarse después de la hora especificada en la propiedad NotBefore.
    • Started: este evento se ha iniciado.
    Ni Completed ni otro estado similar se han proporcionado antes. El evento ya no vuelve cuando finaliza el evento.
    NotBefore Hora a partir de la que puede iniciarse este evento.

    Ejemplo:
    • Lunes, 19 de septiembre de 2016, 18:29:47 GMT
    Descripción Descripción de este evento.

    Ejemplo:
    • El servidor host está en mantenimiento.
    EventSource Iniciador del evento.

    Ejemplo:
    • Platform: la plataforma inicia este evento.
    • User: el usuario inicia este evento.
    DurationInSeconds Duración que se espera de la interrupción causada por el evento.

    Ejemplo:
    • 9: la interrupción causada por el evento durará 9 segundos.
    • -1: valor predeterminado que se usa si la duración del impacto se desconoce o no es aplicable.

    Programación de eventos

    Cada evento se programa una cantidad mínima de tiempo en el futuro en función de su tipo. Este tiempo se refleja en la propiedad NotBefore de un evento.

    EventType Aviso mínimo
    Freeze 15 minutos
    Reboot 15 minutos
    Volver a implementar 10 minutos
    Preempt 30 segundos
    Terminate Configurable por el usuario: de 5 a 15 minutos

    Nota

    En algunos casos, Azure puede predecir errores en el host debidos a que el hardware está degradado e intentará mitigar la interrupción del servicio mediante la programación de una migración. Las máquinas virtuales afectadas recibirán un evento programado con un valor de NotBefore que habitualmente es unos días posteriores. El tiempo real varía en función de la valoración de riesgo de error predicha. Azure intenta avisar con 7 días de antelación siempre que sea posible, pero el tiempo real varía y puede ser menor si la predicción es que sea muy probable que se produzcan errores en el hardware de forma inminente. Para minimizar el riesgo para el servicio si se produce un error en el hardware antes de la migración iniciada por el sistema, se recomienda volver a implementar automáticamente la máquina virtual lo antes posible.

    Frecuencia de sondeo

    Puede sondear el punto de conexión para obtener las actualizaciones con la frecuencia que quiera. Sin embargo, cuanto más tiempo transcurre entre solicitudes, más tiempo se pierde para reaccionar ante un evento próximo. La mayoría de los eventos tienen un aviso previo de 5 a 15 minutos, aunque en algunos casos el aviso previo podría llegar con muy poca antelación, como 30 segundos. Para asegurarse de que tiene tanto tiempo como sea posible para llevar a cabo acciones de mitigación, se recomienda sondear el servicio una vez por segundo.

    Inicio de un evento

    Cuando se haya enterado de un evento próximo y completado la lógica para llevar a cabo un apagado estable, puede aprobar el evento pendiente mediante una llamada de POST a Metadata Service con EventId. Esta llamada indica a Azure que puede acortar el tiempo de notificación mínimo (cuando sea posible).

    A continuación se muestra el JSON de ejemplo en el cuerpo de la solicitud POST. La solicitud debe contener una lista de StartRequests. Cada StartRequest contiene el elemento EventId para el evento que desea acelerar:

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

    Ejemplo de 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
    

    Nota

    Reconocer un evento permite a este continuar para todos sus elementos Resources, no solo para la máquina virtual que lo reconoce. Por tanto, puede optar por elegir un líder para que coordine el reconocimiento. Este puede ser tan sencillo como la primera máquina del campo Resources.

    Ejemplo de Python

    En el siguiente ejemplo se realiza una consulta a Metadata Service para eventos programados y se aprueban todos los eventos pendientes:

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

    Pasos siguientes

    Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Conjuntos de escalado flexibles ✔️ Conjuntos de escalado uniformes

    Scheduled Events es un servicio de Azure Metadata Service que proporciona el tiempo de aplicación para prepararse para el mantenimiento de la máquina virtual. Da información sobre los eventos de mantenimiento próximos (por ejemplo, un reinicio) para que la aplicación pueda prepararlos y así limitar las interrupciones. Está disponible para todos los tipos de máquina virtual de Azure, incluidos IaaS y PaaS, tanto en Windows como en Linux.

    Para más información acerca de Scheduled Events en Windows, consulte Scheduled Events para máquinas virtuales Windows.

    Nota

    Scheduled Events está disponible con carácter general en todas las regiones de Azure. Consulte el apartado sobre la disponibilidad por región y versión para obtener información sobre la versión más reciente.

    ¿Por qué usar Scheduled Events?

    Muchas aplicaciones pueden aprovechar el tiempo para preparar el mantenimiento de las máquinas virtuales. Este tiempo se puede usar para realizar tareas específicas de la aplicación con el fin de mejorar la disponibilidad, la confiabilidad y la capacidad de servicio, lo que incluye:

    • Punto de control y restauración.
    • Purga de la conexión.
    • Conmutación por error de la réplica principal.
    • Eliminación de un grupo de equilibradores de carga.
    • Registros de eventos.
    • Cierre estable.

    Con Scheduled Events, la aplicación puede detectar cuándo se producirá el mantenimiento y desencadenar tareas para limitar sus efectos.

    Eventos programados proporciona eventos en los casos de uso siguientes:

    Conceptos básicos

    Metadata Service expone información sobre la ejecución de máquinas virtuales mediante un punto de conexión de REST accesible desde la propia máquina virtual. La información se encuentra disponible a través de una dirección IP no enrutable, de modo que no se expone fuera de la máquina virtual.

    Ámbito

    Los eventos programados se entregan a:

    • Máquinas virtuales independientes.
    • Todas las máquinas virtuales en un servicio de nube.
    • Todas las máquinas virtuales de un conjunto de disponibilidad.
    • Todas las máquinas virtuales de una zona de disponibilidad.
    • Todas las máquinas virtuales de un grupo de selección de ubicación de conjunto de escalado.

    Nota

    En cuanto a las máquinas virtuales de una zona de disponibilidad, los eventos programados van a las máquinas virtuales individuales de una zona. Por ejemplo, si tiene cien máquinas virtuales en un conjunto de disponibilidad y hay una actualización de una de ellas, el evento programado irá a todas esas cien máquinas, mientras que si hay cien máquinas virtuales únicas en una zona, el evento solo irá a la máquina virtual que se ve afectada.

    Por ello, revise el campo Resources del evento para identificar cuáles son las máquinas virtuales que se verán afectadas.

    Detección de punto de conexión

    En el caso de las máquinas virtuales con red virtual habilitada, el servicio de metadatos está disponible desde una dirección IP no enrutable estática, 169.254.169.254. El punto de conexión completo de la versión más reciente de Scheduled Events es:

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

    Si la máquina virtual no se crea dentro de una red virtual (la opción predeterminada para servicios en la nube y máquinas virtuales clásicas), se necesita lógica adicional para detectar la dirección IP que se va a usar. Para aprender a detectar el punto de conexión de host, consulte este ejemplo.

    Disponibilidad por región y versión

    El servicio Scheduled Events tiene versiones. Las versiones son obligatorias; la actual es 2020-07-01.