Ricevi le notifiche sulla migrazione live

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

Per impostazione predefinita, tutte le VM (tranne la Z3) sono impostate sulla migrazione live e il server di metadati riceve notifiche sugli eventi di manutenzione prima della migrazione live 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 ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Per utilizzare gli esempi Python in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura 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 ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Ricevi le notifiche sulla migrazione live

Puoi sapere quando si verifica un evento di manutenzione eseguendo periodicamente query sulla chiave di 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'inizio di un evento di manutenzione, consentendo al codice dell'applicazione di attivare le attività da eseguire prima di un evento di manutenzione, come il backup dei dati o l'aggiornamento dei log.

Riassumendo, Compute Engine restituisce 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 di 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 avviso anticipato degli 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 esegui una query sulla chiave dei metadati maintenance-event almeno una volta tra un evento di migrazione e l'altro. Devi eseguire una query sulla chiave di metadati maintenance-event direttamente per consentire a Compute Engine di determinare che stai osservando 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 arrestare e riavviare nuovamente su un altro host. Le VM con GPU collegate non vengono migrate in tempo reale e vengono invece arrestate e, facoltativamente, riavviate. Per scoprire di più, consulta Gestione degli eventi di manutenzione degli host GPU.

Per un gruppo specifico di VM, le opzioni di manutenzione sono più flessibili. Per scoprire di più, consulta 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

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

Python

Puoi utilizzare la chiave dei metadati maintenance-event con la funzionalità In attesa di aggiornamenti per inviare una notifica ai tuoi script e alle tue applicazioni quando un evento di manutenzione sta per iniziare e finire. In questo modo puoi automatizzare le azioni che potresti voler eseguire prima o dopo l'evento.

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


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

Esamina gli output

Il valore iniziale e predefinito della chiave dei 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 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 in tempo reale 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