Azure Metadata Service: Scheduled Events para máquinas virtuales Linux
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:
- Mantenimiento iniciado por la plataforma (por ejemplo, reinicio de máquina virtual, migración en vivo o actualizaciones con conservación de memoria para el host)
- La máquina virtual funciona en un hardware de host degradado que se predice que fallará pronto
- Mantenimiento iniciado por el usuario (por ejemplo, el usuario reinicia o vuelve a implementar una máquina virtual)
- Expulsiones de instancias de máquina virtual de Spot y conjunto de escalado de Spot.
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.
| Versión | Tipo de versión | Regions | Notas de la versión |
|---|---|---|---|
| 01-07-2020 | Disponibilidad general | All | |
| 2019-08-01 | Disponibilidad general | All | |
| 01-04-2019 | Disponibilidad general | All | |
| 2019-01-01 | Disponibilidad general | All | |
| 01-11-2017 | Disponibilidad general | All | |
| 2017-08-01 | Disponibilidad general | All | |
| 2017-03-01 | Versión preliminar | All |
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:
|
| EventType | Es el impacto causado por el evento. Valores:
|
| ResourceType | Es el tipo de recurso al que este evento afecta. Valores:
|
| 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:
|
| EventStatus | Es el estado de este evento. Valores:
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:
|
| Descripción | Descripción de este evento. Ejemplo:
|
| EventSource | Iniciador del evento. Ejemplo:
|
| DurationInSeconds | Duración que se espera de la interrupción causada por el evento. Ejemplo:
|
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
- Mire Scheduled Events on Azure Friday (Scheduled Events en Azure Friday) para ver una demostración.
- Repase los ejemplos de código de Scheduled Events en el repositorio de GitHub Azure Instance Metadata Scheduled Events (Scheduled Events de Azure Instance Metadata).
- En Instance Metadata Service, puede obtener más información sobre las API disponibles.
- Obtenga información sobre cómo realizar el mantenimiento planeado para máquinas virtuales Linux en Azure.