Mendapatkan pemberitahuan migrasi langsung


Server metadata memberikan informasi tentang opsi dan setelan penjadwalan instance virtual machine (VM), melalui listingan direktori metadata scheduling/ dan kunci metadata maintenance-event. Anda dapat menggunakan kunci metadata ini untuk mempelajari opsi penjadwalan VM dan memberi tahu Anda ketika peristiwa pemeliharaan akan terjadi.

Secara default, semua VM (kecuali Z3) ditetapkan ke migrasi langsung dan server metadata menerima pemberitahuan peristiwa pemeliharaan sebelum instance VM dimigrasikan secara live. Namun, jika Anda memilih opsi penjadwalan yang berbeda, peristiwa pemeliharaan dan perilaku VM mungkin berbeda. Untuk mempelajari peristiwa pemeliharaan dan perilaku VM selama peristiwa berlangsung lebih lanjut, lihat Ringkasan pemeliharaan host.

Sebelum memulai

  • Untuk VM Windows Server, gunakan PowerShell 3.0 atau yang lebih baru. Sebaiknya gunakan ctrl+v untuk menempelkan blok kode yang disalin.
  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Untuk menggunakan contoh Python di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

Mendapatkan pemberitahuan migrasi langsung

Anda dapat mempelajari kapan peristiwa pemeliharaan akan terjadi dengan membuat kueri kunci metadata maintenance-event secara berkala.

Kunci metadata maintenance-event diisi untuk peristiwa pemeliharaan hanya jika Anda telah menetapkan opsi penjadwalan VM ke migrate atau jika VM Anda memiliki GPU yang terpasang.

Nilai kunci metadata ini berubah 60 detik sebelum peristiwa pemeliharaan dimulai, sehingga memberi kode aplikasi cara untuk memicu tugas apa pun yang ingin dilakukan sebelum peristiwa pemeliharaan, seperti mencadangkan data atau memperbarui log.

Singkatnya, Compute Engine memberikan peringatan 60 detik hanya jika:

  • Anda telah menetapkan opsi ketersediaan VM untuk migrasi langsung selama peristiwa pemeliharaan.

  • Anda telah membuat kueri kunci metadata maintenance-event setidaknya sekali sejak peristiwa pemeliharaan terakhir.

    • Jika Anda belum pernah membuat kueri kunci metadata maintenance-event atau belum membuat kueri kunci metadata sejak migrasi terakhir, Compute Engine akan menganggap bahwa VM tidak memerlukan peringatan awal tentang peristiwa pemeliharaan. Peristiwa pemeliharaan segera dimulai dan melewati peringatan 60 detik.

    • Jika tidak ingin melewati peringatan 60 detik, pastikan kode klien Anda membuat kueri kunci metadata maintenance-event setidaknya sekali di antara peristiwa migrasi. Anda harus membuat kueri kunci metadata maintenance-event secara langsung untuk Compute Engine agar dapat menentukan bahwa Anda memantau kunci metadata ini. Membuat kueri untuk metadata dengan level yang lebih tinggi tidak memicu pemberitahuan awal.

Untuk VM dengan GPU yang terpasang, nilainya akan berubah 60 menit sebelum VM dihentikan guna memberi Anda waktu untuk mematikan dan memulai ulang lagi di host lain. VM dengan GPU yang terpasang tidak dimigrasikan langsung, melainkan dihentikan dan dimulai ulang secara opsional. Untuk mempelajari lebih lanjut, lihat Menangani peristiwa pemeliharaan host GPU.

Untuk set VM tertentu, opsi pemeliharaan VM Anda lebih fleksibel. Untuk mempelajari lebih lanjut, lihat Memantau dan merencanakan peristiwa pemeliharaan host.

Membuat kueri kunci metadata aktivitas pemeliharaan

Linux VM

Untuk membuat kueri kunci metadata maintenance-event di VM Linux, jalankan perintah berikut:

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

Outputnya mirip dengan hal berikut ini:

NONE

VM Windows

Untuk membuat kueri kunci metadata maintenance-event di VM Windows, jalankan perintah berikut:

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

Outputnya mirip dengan hal berikut ini:

NONE

Python

Anda dapat menggunakan kunci metadata maintenance-event dengan fitur menunggu update untuk memberi tahu skrip dan aplikasi saat peristiwa pemeliharaan akan dimulai dan berakhir. Hal ini memungkinkan Anda mengotomatiskan tindakan apa pun yang mungkin ingin dijalankan sebelum atau setelah peristiwa tersebut.

Contoh Python berikut memberikan contoh cara menerapkan kedua fitur ini secara bersamaan.


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

Meninjau output

Nilai awal dan default kunci metadata maintenance-event adalah NONE.

  • Untuk VM dengan GPU yang terpasang, selama peristiwa pemeliharaan, nilainya berubah dari NONE menjadi TERMINATE_ON_HOST_MAINTENANCE. Nilai ini diperbarui 60 menit sebelum peristiwa penghentian dimulai.

  • Untuk VM non-GPU dengan opsi penjadwalan migrate, nilai maintenance-event akan berubah sebagai berikut:

    1. Pada awal peristiwa migrasi, nilai akan berubah dari NONE menjadi MIGRATE_ON_HOST_MAINTENANCE. Nilai ini diperbarui 60 detik sebelum peristiwa penghentian dimulai.
    2. Selama peristiwa berlangsung dan saat instance VM Anda sedang dimigrasikan langsung, nilainya akan tetap sebagai MIGRATE_ON_HOST_MAINTENANCE.
    3. Setelah peristiwa pemeliharaan berakhir, nilai akan ditampilkan menjadi NONE.
  • Untuk VM tenant tunggal, selama peristiwa pemeliharaan host, nilai kunci metadata maintenance-event tidak berubah dan tetap NONE dari awal hingga akhir peristiwa.

Langkah selanjutnya