Ricevi notifiche sulla migrazione live

Il server di metadati fornisce informazioni sulle opzioni e sulle impostazioni di pianificazione di un'istanza di macchina virtuale (VM) tramite l'elenco della directory dei metadati scheduling/ e la chiave di metadati maintenance-event. Puoi utilizzare queste chiavi di metadati per conoscere le opzioni di pianificazione di una VM, nonché per ricevere una notifica quando sta per verificarsi un evento di manutenzione.

Per impostazione predefinita, tutte le VM (tranne Z3) sono impostate sulla migrazione live e il server dei metadati riceve avvisi di eventi di manutenzione prima della migrazione in tempo reale di un'istanza VM. Tuttavia, se scegli un'opzione di pianificazione diversa, gli eventi di manutenzione e il comportamento della VM potrebbero variare. Per scoprire di più sugli eventi di manutenzione e sul comportamento delle VM durante gli eventi, consulta Panoramica della manutenzione dell'host.

Prima di iniziare

  • Per le VM Windows Server, utilizza PowerShell 3.0 o versioni successive. Ti consigliamo di utilizzare ctrl+v per incollare i blocchi di codice copiati.
  • Se non l'hai già fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità dell'utente per ottenere l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione in Compute Engine come segue.

    Per utilizzare gli Python esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per maggiori informazioni, consulta Set up authentication for a local development environment.

Ricevi notifiche sulla migrazione live

Puoi scoprire quando si verifica un evento di manutenzione eseguendo query periodiche sulla chiave dei metadati maintenance-event.

La chiave dei metadati maintenance-event viene compilata per gli eventi di manutenzione solo se hai impostato l'opzione di pianificazione della VM su migrate o se alla VM è collegata una GPU.

Il valore di questa chiave di metadati cambia 60 secondi prima dell'avvio di un evento di manutenzione, consentendo al codice dell'applicazione di attivare le attività da eseguire prima di un evento di manutenzione, ad esempio il backup dei dati o l'aggiornamento dei log.

In sintesi, Compute Engine fornisce un avviso di 60 secondi solo se:

  • Hai impostato le opzioni di disponibilità della VM per la migrazione live durante un evento di manutenzione.

  • Hai eseguito una query sulla chiave dei metadati maintenance-event almeno una volta dall'ultimo evento di manutenzione.

    • Se non hai mai eseguito query sulla chiave dei metadati maintenance-event o non hai eseguito query sulla chiave dei metadati dall'ultima migrazione, Compute Engine presuppone che la VM non richieda un preavviso per gli eventi di manutenzione. L'evento di manutenzione viene avviato immediatamente e ignora l'avviso di 60 secondi.

    • Se non vuoi saltare l'avviso di 60 secondi, assicurati che il codice client esegua una query sulla chiave di metadati maintenance-event almeno una volta tra un evento di migrazione e l'altro. Devi eseguire una query direttamente sulla chiave dei metadati maintenance-event affinché Compute Engine stabilisca che stai guardando questa chiave di metadati. L'esecuzione di query su metadati di livello superiore non attiva il preavviso.

Per le VM con GPU collegate, il valore cambia 60 minuti prima dell'arresto delle VM per darti il tempo di arrestarsi e riavviarsi su un altro host. Le VM con GPU collegate non vengono migrate in tempo reale, ma vengono arrestate e riavviate facoltativamente. Per scoprire di più, consulta Gestione degli eventi di manutenzione dell'host GPU.

Per un insieme specifico di VM, le opzioni di manutenzione delle VM sono più flessibili. Per scoprire di più, vedi Monitorare e pianificare un evento di manutenzione dell'host.

Esegui una query sulla chiave dei metadati dell'evento di manutenzione

VM Linux

Per eseguire una query sulla chiave di metadati maintenance-event sulle VM Linux, esegui questo comando:

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

L'output è simile al seguente:

NONE

Puoi anche utilizzare l'opzione wait-for-change. Con questa opzione specificata, la richiesta restituisce un output solo quando un evento di manutenzione sta per iniziare e terminare.

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

VM Windows

Per eseguire una query sulla chiave di metadati maintenance-event sulle VM Windows, esegui questo comando:

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

L'output è simile al seguente:

NONE

Puoi anche utilizzare l'opzione wait-for-change. Se questa opzione viene specificata, la richiesta restituisce un output solo quando stanno per iniziare e terminare un evento di manutenzione.

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

Python

Puoi utilizzare la chiave di metadati maintenance-event con la funzionalità in attesa di aggiornamenti per inviare una notifica agli script e alle applicazioni quando un evento di manutenzione sta per iniziare e terminare. In questo modo puoi automatizzare le azioni che vuoi eseguire prima o dopo l'evento.

Il seguente esempio Python fornisce un esempio di come puoi implementare queste due funzionalità insieme.


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()

Rivedi gli output

Il valore iniziale e predefinito della chiave di metadati maintenance-event è NONE.

  • Per le VM con GPU collegate, durante un evento di manutenzione il valore cambia da NONE a TERMINATE_ON_HOST_MAINTENANCE. Questo valore viene aggiornato 60 minuti prima dell'inizio dell'evento di interruzione.

  • Per le VM non GPU con un'opzione di pianificazione di migrate, il valore di maintenance-event cambia come segue:

    1. All'inizio dell'evento di migrazione, il valore cambia da NONE a MIGRATE_ON_HOST_MAINTENANCE. Questo valore viene aggiornato 60 secondi prima dell'inizio dell'evento di interruzione.
    2. Per tutta la durata dell'evento e durante la migrazione live dell'istanza VM, il valore rimane MIGRATE_ON_HOST_MAINTENANCE.
    3. Al termine dell'evento di manutenzione, il valore torna a NONE.
  • Per le VM single-tenant, durante un evento di manutenzione dell'host, il valore della chiave dei metadati maintenance-event non cambia e rimane NONE dall'inizio alla fine dell'evento.

Passaggi successivi