שליחת שאילתה לשרת המטא-נתונים לגבי הודעות על אירועי תחזוקה

שרת המטא-נתונים מספק מידע על אפשרויות ההגדרה והתזמון של מכונת Compute Engine, באמצעות רשימת הספרייה של המטא-נתונים [scheduling/] ומפתח המטא-נתונים [maintenance-event]. אפשר להשתמש במפתחות המטא-נתונים האלה כדי לקבל מידע על אפשרויות התזמון של מכונה וירטואלית, וגם כדי לקבל התראה על אירוע תחזוקה קרוב.

שרת המטא-נתונים מקבל הודעות על אירועי תחזוקה לפני שמבצעים העברה פעילה או סיום של מופע Compute. מידע נוסף על אירועי תחזוקה ועל התנהגות המופעים במהלך האירועים זמין במאמר סקירה כללית על תחזוקת המארח.

אם יש לכם קבוצה ספציפית של מכונות וירטואליות, האפשרויות שלכם לתחזוקת מכונות וירטואליות גמישות יותר. מידע נוסף זמין במאמר מעקב ותכנון של אירוע תחזוקה של מארח.

לפני שמתחילים

  • במכונות וירטואליות של Windows Server, צריך להשתמש ב-PowerShell 3.0 ואילך. מומלץ להשתמש ב-ctrl+v כדי להדביק את בלוקי הקוד שהועתקו.
  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.

      איך נכנסים ל-CLI של gcloud באמצעות הזהות המאוחדת?

    3. יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

      gcloud auth application-default login

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

קבלת הודעות על מיגרציה פעילה

כדי לדעת מתי עומד להתבצע מיגרציה פעילה של המופע שלכם, אתם יכולים לשלוח שאילתה למפתח המטא-נתונים maintenance-event באופן תקופתי.

המערכת מאכלסת את מפתח המטא-נתונים maintenance-event לאירועי תחזוקה רק אם הגדרתם את אפשרות התזמון של המכונה הווירטואלית ל-migrate או אם למכונה הווירטואלית מצורף GPU.

הערך של מפתח המטא-נתונים הזה משתנה 60 שניות לפני שמתחיל אירוע תחזוקה. כך קוד האפליקציה יכול להפעיל משימות שרוצים לבצע לפני אירוע תחזוקה, כמו גיבוי נתונים או עדכון יומנים.

מערכת Compute Engine מציגה את האזהרה של 60 שניות רק אם:

  • הגדרתם את אפשרויות הזמינות של המכונה הווירטואלית למיגרציה פעילה במהלך אירוע תחזוקה.

  • הפעלת שאילתה לגבי מפתח המטא-נתונים maintenance-event לפחות פעם אחת מאז אירוע התחזוקה האחרון.

    • אם אף פעם לא שלחתם שאילתה למפתח המטא-נתונים maintenance-event או שלא שלחתם שאילתה למפתח המטא-נתונים מאז ההעברה האחרונה, מערכת Compute Engine מניחה שהמכונה הווירטואלית לא דורשת אזהרה מראש על אירועי תחזוקה. אירוע התחזוקה מתחיל באופן מיידי, בלי אזהרה של 60 שניות.

    • אם אתם לא רוצים לדלג על האזהרה של 60 שניות, ודאו שקוד הלקוח שלכם שולח שאילתות למפתח המטא-נתונים maintenance-event לפחות פעם אחת בין אירועי ההעברה. כדי ש-Compute Engine יקבע שאתם צופים במפתח המטא-נתונים הזה, אתם צריכים לבצע שאילתה ישירות על מפתח המטא-נתונים maintenance-event. שאילתה של מטא-נתונים ברמה גבוהה יותר לא מפעילה את ההודעה מראש.

במכונות וירטואליות עם כרטיסי GPU מצורפים, הערך משתנה 60 דקות לפני שהמכונות הווירטואליות נעצרות, כדי שיהיה לכם זמן לכבות ולהפעיל אותן מחדש במארח אחר. מכונות וירטואליות עם יחידות GPU מצורפות לא עוברות מיגרציה פעילה, אלא נעצרות ואפשר להפעיל אותן מחדש. מידע נוסף זמין במאמר בנושא טיפול באירועי תחזוקה של מארח GPU.

שאילתה על מפתח המטא-נתונים של אירוע התחזוקה

מכונות וירטואליות של Linux

כדי לבצע שאילתה על מפתח המטא-נתונים maintenance-event במכונות וירטואליות של Linux, מריצים את הפקודה הבאה:

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

הפלט אמור להיראות כך:

NONE

אפשר גם להשתמש באפשרות wait-for-change. אם מציינים את האפשרות הזו, הבקשה מחזירה פלט רק כשאירוע תחזוקה עומד להתחיל ולהסתיים.

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

מכונות וירטואליות של Windows

כדי לשלוח שאילתה למפתח המטא-נתונים maintenance-event במכונות וירטואליות של Windows, מריצים את הפקודה הבאה:

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

הפלט אמור להיראות כך:

NONE

אפשר גם להשתמש באפשרות wait-for-change. אם מציינים את האפשרות הזו, הבקשה מחזירה פלט רק כשאירוע תחזוקה עומד להתחיל ולהסתיים.

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

אפשר להשתמש במפתח המטא-נתונים maintenance-event עם התכונה המתנה לעדכונים כדי לשלוח הודעות לסקריפטים ולאפליקציות שלכם כשאירוע תחזוקה עומד להתחיל ולהסתיים. כך תוכלו להגדיר פעולות אוטומטיות שיופעלו לפני או אחרי האירוע.

בדוגמה הבאה של Python אפשר לראות איך מטמיעים את שתי התכונות האלה יחד.

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

בדיקת הפלט

הערך הראשוני וערך ברירת המחדל של מפתח המטא-נתונים maintenance-event הוא NONE.

  • במכונות וירטואליות עם יחידות GPU מצורפות, במופעי Bare Metal או במופעים אחרים שלא תומכים במיגרציה פעילה, הערך של אירוע התחזוקה משתנה מ-NONE ל-TERMINATE_ON_HOST_MAINTENANCE. הערך הזה מתעדכן 60 דקות לפני תחילת אירוע העצירה.

  • במכונות וירטואליות ללא GPU עם אפשרות תזמון של migrate, הערך של maintenance-event משתנה באופן הבא:

    1. בתחילת אירוע ההעברה, הערך משתנה מ-NONE ל-MIGRATE_ON_HOST_MAINTENANCE. הערך הזה מתעדכן 60 שניות לפני תחילת אירוע העצירה.
    2. במהלך האירוע ובזמן שהמכונה הווירטואלית עוברת העברה פעילה, הערך נשאר MIGRATE_ON_HOST_MAINTENANCE.
    3. אחרי שאירוע התחזוקה יסתיים, הערך יחזור ל-NONE.
  • במכונות וירטואליות עם דייר יחיד, במהלך אירוע תחזוקה של המארח, ערך מפתח המטא-נתונים maintenance-event לא משתנה ונשאר NONE מההתחלה ועד הסוף של האירוע.

לפני אירוע תחזוקה, אפשר לשלוח שאילתה למפתח המטא-נתונים upcoming-maintenance בסדרות של מכונות שתומכות ביכולות תחזוקה מתקדמות. אם יש התראה שזמינה למופע שלכם, יוצגו ערכים דומים לאלה:

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

כדי לדעת כמה זמן לפני אירוע תחזוקה מאוכלס מפתח המטא-נתונים upcoming-maintenance, אפשר לעיין במסמכי התיעוד בנושא 'חוויית תחזוקה' עבור סדרת המכונות. לדוגמה, במאמר חוויית התחזוקה של מכונות Z3 מוסבר על סוגי מכונות Z3.

המאמרים הבאים