Esegui una query sul server dei metadati per le notifiche relative agli eventi di manutenzione


Il server di metadati fornisce informazioni sulle opzioni e sulle impostazioni di pianificazione di un'istanza Compute Engine tramite l'elenco della directory dei metadati scheduling/ e la chiave dei metadati maintenance-event. Puoi utilizzare queste chiavi di metadati per conoscere le opzioni di pianificazione di una VM e anche per ricevere una notifica di un evento di manutenzione imminente.

Il server dei metadati riceve avvisi relativi agli eventi di manutenzione prima che venga eseguita la migrazione live o la terminazione di un'istanza di calcolo. Per saperne di più sugli eventi di manutenzione e sul comportamento delle istanze durante questi eventi, consulta la Panoramica della manutenzione dell'host.

Per un insieme specifico di VM, le opzioni di manutenzione delle VM sono più flessibili. Per approfondire, consulta Monitorare e pianificare un evento di 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 è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

Ricevere avvisi migrazione live

Puoi sapere quando sta per iniziare la migrazione live della tua istanza eseguendo periodicamente una 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 dei metadati cambia 60 secondi prima dell'inizio di un evento di manutenzione, offrendo al codice dell'applicazione un modo per attivare le attività che vuoi eseguire prima di un evento di manutenzione, ad esempio il backup dei dati o l'aggiornamento dei log.

Compute Engine invia l'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 lo hai fatto dall'ultima migrazione, Compute Engine presume che la VM non richieda un avviso anticipato degli eventi di manutenzione. L'evento di manutenzione si avvia immediatamente e salta l'avviso di 60 secondi.

    • Se non vuoi saltare l'avviso di 60 secondi, assicurati che il codice client effettui query sulla chiave dei metadati maintenance-event almeno una volta tra gli eventi di migrazione. Devi eseguire una query direttamente sulla chiave dei metadati maintenance-event per consentire a Compute Engine di determinare che stai monitorando questa chiave dei metadati. L'esecuzione di query su metadati di livello superiore non attiva l'avviso.

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

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

VM Linux

Per eseguire una query sulla chiave dei metadati maintenance-event sulle VM Linux, esegui il seguente 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. Se specifichi questa opzione, 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 dei metadati maintenance-event sulle VM Windows, esegui il seguente 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 specifichi questa opzione, la richiesta restituisce un output solo quando un evento di manutenzione sta per iniziare e terminare.

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 dei metadati maintenance-event con la funzionalità in attesa di aggiornamenti per notificare i tuoi script e le tue applicazioni quando un evento di manutenzione è in procinto di iniziare e terminare. In questo modo puoi automatizzare qualsiasi azione che potresti voler eseguire prima o dopo l'evento.

Il seguente esempio di Python mostra come 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()

Esamina gli output

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

  • Per le VM con GPU collegate, le istanze Bare Metal o altre istanze che non supportano la migrazione live, il valore dell'evento di manutenzione cambia da NONE a TERMINATE_ON_HOST_MAINTENANCE. Questo valore viene aggiornato 60 minuti prima dell'inizio dell'evento di arresto.

  • Per le VM non GPU con un'opzione di pianificazione 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 arresto.
    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 di proprietà esclusiva, 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.

Per le serie di macchine che supportano le funzionalità di manutenzione avanzata, prima di un evento di manutenzione puoi eseguire una query sulla chiave dei metadatiupcoming-maintenance. Se è disponibile una notifica per la tua istanza, dovresti vedere valori simili ai seguenti:

{
   "maintenanceType":"SCHEDULED"
   "canReschedule": "true"
   "latestWindowStartTime": "2025-08-28T21:56:21Z"
   "maintenanceStatus": "PENDING"
   "windowEndTime": "2025-08-29T01:56:20Z"
   "windowStartTime": "2025-08-28T21:56:26Z"
}

La chiave dei metadati upcoming-maintenance viene compilata prima di un evento di manutenzione come segue:

  • C3: fino a 7 giorni
  • C3D: fino a 7 giorni
  • X4: fino a 60 giorni
  • Z3: fino a 7 giorni

Passaggi successivi