Obtén avisos de migración en vivo


El servidor de metadatos proporciona información sobre las opciones y la configuración de programación de una instancia de máquina virtual (VM) mediante la lista del directorio de metadatos scheduling/ y la clave de metadatos maintenance-event. Puedes usar estas claves de metadatos a fin de obtener información sobre las opciones de programación de una VM y para notificarte cuando esté por suceder un evento de mantenimiento.

De forma predeterminada, todas las VMs (excepto Z3) (Vista previa)) están configuradas como migración en vivo y el servidor de metadatos recibe notificaciones de eventos de mantenimiento antes de que una instancia de VM se migre en vivo. Sin embargo, si eliges una opción de programación diferente, los eventos de mantenimiento y el comportamiento de la VM pueden variar. Para obtener más información sobre los eventos de mantenimiento y el comportamiento de las VMs durante estos eventos, consulta Descripción general del mantenimiento del host.

Antes de comenzar

  • Para VM de Windows Server, usa PowerShell 3.0 o versiones posteriores. Te recomendamos que uses ctrl+v para pegar los bloques de código copiados.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Para usar las muestras de Python de esta página desde un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Instala Google Cloud CLI.
    2. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

      gcloud init
    3. Crea credenciales de autenticación locales para tu Cuenta de Google:

      gcloud auth application-default login

    Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Obtén avisos de migración en vivo

Puedes saber cuándo ocurrirá un evento de mantenimiento si consultas de forma periódica la clave de metadatos maintenance-event.

La clave de metadatos maintenance-event se propaga para los eventos de mantenimiento solo si configuraste la opción de programación de la VM como migrate o si la VM tiene una GPU conectada.

El valor de esta clave de metadatos cambia 60 segundos antes de que se inicie un evento de mantenimiento, lo que le da al código de la aplicación una forma de activar cualquier tarea que desees realizar antes de un evento de mantenimiento, como crear una copia de seguridad de los datos o actualizar registros.

En resumen, Compute Engine da la advertencia de 60 segundos solo si se cumplen estas condiciones:

  • Si estableciste las opciones de disponibilidad de la VM para la migración en vivo durante un evento de mantenimiento.

  • Si consultaste la clave de metadatos maintenance-event al menos una vez desde el último evento de mantenimiento.

    • Si nunca consultaste la clave de metadatos maintenance-event o no la hiciste desde la última migración, Compute Engine supone que la VM no requiere una advertencia previa a los eventos de mantenimiento. El evento de mantenimiento se inicia de inmediato y omite la advertencia de 60 segundos.

    • Si no deseas omitir la advertencia de 60 segundos, asegúrate de que el código del cliente consulte la clave de metadatos maintenance-event al menos una vez entre los eventos de migración. Debes consultar la clave de metadatos maintenance-event directamente para Compute Engine a fin de determinar si la estás mirando. Consultar metadatos de nivel superior no activa la notificación previa.

En el caso de las VM con GPU conectadas, el valor cambia 60 minutos antes de que se detengan las VM a fin de que tengas tiempo de apagar y reiniciar en otro host. Las VM con GPU conectadas no se migran en vivo, en su lugar se detienen y se reinician de forma opcional. Para obtener más información, consulta Controla eventos de mantenimiento del host de la GPU.

Para un conjunto específico de VMs, las opciones de mantenimiento de VMs son más flexibles. Para obtener más información, consulta Supervisa y planifica un evento de mantenimiento del host.

Consulta la clave de metadatos del evento de mantenimiento

VM de Linux

Para consultar la clave de metadatos maintenance-event en las VM de Linux, ejecuta el siguiente comando:

user@myinst:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event -H "Metadata-Flavor: Google"

El resultado es similar al siguiente:

NONE

VM de Windows

Para consultar la clave de metadatos maintenance-event en las VM de Windows, ejecuta el siguiente comando:

PS C:\> 
$value = (Invoke-RestMethod `
         -Headers @{'Metadata-Flavor' = 'Google'} `
         -Uri "http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event")
$value

El resultado es similar al siguiente:

NONE

Python

Puedes usar la clave de metadatos maintenance-event con la función de espera de actualizaciones para notificar a tus secuencias de comandos y aplicaciones cuando un evento de mantenimiento esté por comenzar y finalizar. Esto te permite automatizar cualquier acción que desees ejecutar antes o después del evento.

La muestra siguiente de Python proporciona un ejemplo de cómo puedes implementar estas dos funciones.


import time
from typing import Callable, NoReturn, Optional

import requests


METADATA_URL = "http://metadata.google.internal/computeMetadata/v1/"
METADATA_HEADERS = {"Metadata-Flavor": "Google"}


def wait_for_maintenance(callback: Callable[[Optional[str]], None]) -> NoReturn:
    """
    Start an infinite loop waiting for maintenance signal.

    Args:
        callback: Function to be called when a maintenance is scheduled.

    Returns:
        Never returns, unless there's an error.
    """
    url = METADATA_URL + "instance/maintenance-event"
    last_maintenance_event = None
    last_etag = "0"

    while True:
        r = requests.get(
            url,
            params={"last_etag": last_etag, "wait_for_change": True},
            headers=METADATA_HEADERS,
        )

        # During maintenance the service can return a 503, so these should
        # be retried.
        if r.status_code == 503:
            time.sleep(1)
            continue
        r.raise_for_status()

        last_etag = r.headers["etag"]

        if r.text == "NONE":
            maintenance_event = None
        else:
            maintenance_event = r.text

        if maintenance_event != last_maintenance_event:
            last_maintenance_event = maintenance_event
            callback(maintenance_event)


def maintenance_callback(event: Optional[str]) -> None:
    """
    Example callback function to handle the maintenance event.

    Args:
        event: details about scheduled maintenance.
    """
    if event:
        print(f"Undergoing host maintenance: {event}")
    else:
        print("Finished host maintenance")


def main():
    wait_for_maintenance(maintenance_callback)


if __name__ == "__main__":
    main()

Revisa los resultados

El valor inicial y predeterminado de la clave de metadatos maintenance-event es NONE.

  • En las VM con GPU conectadas, durante un evento de mantenimiento, el valor cambia de NONE a TERMINATE_ON_HOST_MAINTENANCE. Este valor se actualiza 60 minutos antes de que comience el evento de detención.

  • En las VM sin GPU con una opción de programación de migrate, el valor maintenance-event cambia de la siguiente manera:

    1. Al comienzo del evento de migración, el valor cambia de NONE a MIGRATE_ON_HOST_MAINTENANCE. Este valor se actualiza 60 segundos antes de que comience el evento de detención.
    2. Mientras dura el evento y la instancia de VM se migra en vivo, el valor permanece como MIGRATE_ON_HOST_MAINTENANCE.
    3. Cuando finaliza el evento de mantenimiento, el valor vuelve a ser NONE.
  • Para las VMs de usuario único, durante un evento de mantenimiento del host, el valor de la clave de metadatos maintenance-event no cambia y permanece NONE desde el inicio hasta el final del evento.

¿Qué sigue?