הפעלה או השבתה של VM Runtime ב-GDC

במסמך הזה מוסבר איך להפעיל או להשבית את VM Runtime ב-Google Distributed Cloud. אפשר לעשות זאת על ידי עדכון VMRuntime משאב בהתאמה אישית או על ידי הפעלת פקודות bmctl.

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

כדי להפעיל או להשבית את VM Runtime ב-GDC, אתם צריכים גישה למשאבים ולכלים הבאים:

הפעלת VM Runtime ב-GDC

‫VM Runtime ב-GDC מותקן אוטומטית ב-Google Distributed Cloud בגרסה 1.10 ומעלה, אבל הוא מושבת כברירת מחדל. כדי להפעיל משאבי מכונות וירטואליות ב-Google Distributed Cloud, צריך להפעיל את זמן הריצה של המכונות הווירטואליות ב-GDC.

bmctl

  • כדי להפעיל את זמן הריצה, משתמשים בכלי bmctl:

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    מציינים את הנתיב לקובץ kubeconfig של האשכול. ‫Google Distributed Cloud יוצר את קובץ ה-kubeconfig בתחנת העבודה של האדמין כשיוצרים אשכול. כברירת מחדל, הנתיב הוא bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    אם VM Runtime ב-GDC כבר מופעל, הפקודה מחזירה שגיאה.

אפשר להגדיר הגדרות נוספות, כמו הגדרות של אמולציה או של פורמט תמונה, על ידי עריכה של VMRuntime משאב בהתאמה אישית.

משאב מותאם אישית

כדי להפעיל את זמן הריצה, צריך לעדכן את המשאב המותאם אישית VMRuntime. המשאב המותאם אישית הזה מותקן כברירת מחדל.

  1. עורכים את VMRuntime המשאב המותאם אישית:

    kubectl edit vmruntime
    
  2. הגדרת enabled:true במפרט:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    בקטע spec שלמעלה, אפשר להגדיר את הערכים הבאים:

    • enabled: הערך מוגדר כ-true כדי להפעיל את VM Runtime ב-GDC
    • useEmulation: אם הצומת לא תומך בווירטואליזציה של חומרה, או אם אתם לא בטוחים, צריך להגדיר את הערך כ-true. אם יש אפשרות כזו, וירטואליזציה של חומרה מספקת ביצועים טובים יותר מאשר אמולציה של תוכנה. אם לא מציינים ערך לשדה useEmulation, ערך ברירת המחדל הוא false.
    • vmImageFormat: תומך בשני ערכים של פורמט תמונת דיסק: raw ו-qcow2. אם לא מגדירים את vmImageFormat, סביבת הריצה של מכונות וירטואליות ב-GDC משתמשת בפורמט של תמונת הדיסק raw כדי ליצור מכונות וירטואליות. פורמט raw עשוי לספק ביצועים טובים יותר מפורמט qcow2, שהוא פורמט של העתקה בעת כתיבה, אבל הוא עשוי להשתמש ביותר נפח אחסון בדיסק. מידע נוסף על פורמטים של תמונות למכונה וירטואלית זמין במאמר פורמטים של קבצים של תמונות דיסק במאמרי העזרה של QEMU.
  3. שומרים את המשאב המותאם אישית בכלי העריכה.

  4. מוודאים שהמשאב המותאם אישית VMRuntime מופעל:

    kubectl describe vmruntime vmruntime
    

    הפרטים של VMRuntime משאב מותאם אישית כוללים קטע Status. האפשרות VM Runtime ב-GDC מופעלת ופועלת כשVMRuntime.Status.Ready מוצג כ-true.

השבתת VM Runtime ב-GDC

אם אתם לא צריכים יותר להשתמש ב-VM Runtime ב-GDC, אתם יכולים להשבית את התכונה הזו.

bmctl

  • כדי להשבית את זמן הריצה, משתמשים בכלי bmctl:

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    מזינים את הנתיב לקובץ kubeconfig של האשכול ואת הערכים של אפשרויות ההגדרה הבאות:

    • --force: מגדירים את הערך true כדי לאשר שרוצים למחוק משאבי מכונה וירטואלית קיימים. ערך ברירת המחדל הוא false.

משאב מותאם אישית

כדי להשבית את זמן הריצה, מעדכנים את המשאב המותאם אישית VMRuntime:

  1. עורכים את VMRuntime המשאב המותאם אישית:

    kubectl edit vmruntime
    
  2. הגדרת enabled:false במפרט:

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. שומרים את המפרט המעודכן של המשאב המותאם אישית בכלי העריכה.

  4. כדי לוודא שהמשאב המותאם אישית VMRuntime מושבת, מציגים את הפודים שפועלים במרחב השמות vm-system:

    kubectl get pods --namespace vm-system
    

    האפשרות VM Runtime ב-GDC מושבתת כשפועלים במרחב השמות רק הפודים ששייכים לפריסת vmruntime-controller-manager.

הסבר על ההתנהגות של מכונות וירטואליות (VM)

אפשר להשתמש בהערה baremetal.cluster.gke.io/vmrumtime-force-disable ב-VM Runtime במשאב GDC כדי להגדיר את ההתנהגות כשזמן הריצה מושבת בזמן שהמכונות הווירטואליות פועלות באשכול.

בדוגמה הבאה אפשר לראות שערך ההערה הזו מוגדר כ-false כברירת מחדל:

// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  annotations:
    baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
  name: vmruntime
[...]

כשההערה הזו מוגדרת לערך false, סביבת הריצה של מכונות וירטואליות ב-GDC מנסה להגן על מכונות וירטואליות שפועלות. צריך למחוק את כל המכונות הווירטואליות שפועלות לפני שמשביתים את סביבת הריצה של מכונות וירטואליות ב-GDC, או לציין את הפרמטר --force=true עם הפקודה bmctl disable vmruntime כמו שמוצג בקטע הקודם.

בטבלה הבאה מוסבר מה קורה למכונות וירטואליות שפועלות כשמגדירים את ההערה הזו לערך true או false, ואם מציינים את הפרמטר --force=true או לא:

מצב האשכול הפרמטר ‎--force vmrumtime-force-disable annotation התנהגות
אין מכונות וירטואליות לא רלוונטי לא רלוונטי השבתת VM Runtime ב-GDC.
מכונות וירטואליות קיימות נכון נכון מחיקת כל המכונות הווירטואליות הפעילות והמשאבים שקשורים אליהן. משביתים את VM Runtime ב-GDC.
נכון לא נכון מחיקת כל המכונות הווירטואליות הפעילות והמשאבים שקשורים אליהן. משביתים את VM Runtime ב-GDC.
לא נכון נכון מוצגת הנחיה למחיקת מכונות וירטואליות פעילות ומשאבים קשורים. אחרי שמוחקים את כל מכונות ה-VM הפעילות, משביתים את VM Runtime ב-GDC.
לא נכון לא נכון לא מוחקים מכונות וירטואליות קיימות שפועלות. אל תשביתו את זמן הריצה של המכונה הווירטואלית ב-GDC. הפקודה bmctl מחזירה שגיאה.

VM Runtime בבדיקה המקדימה של GDC

בדיקת ההכנה של VM Runtime ב-GDC מאמתת קבוצה של דרישות מוקדמות בסביבת המכונה לפני השימוש ב-VM Runtime ב-GDC ובמכונות וירטואליות. יצירת מכונת ה-VM נחסמת אם בדיקת קדם-ההפעלה של VM Runtime ב-GDC נכשלה. הבדיקה המקדימה של זמן הריצה של מכונה וירטואלית ב-GDC פועלת באופן אוטומטי כש-spec.enabled מוגדר כ-true.

kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

בדיקת הטרום-השקה של VM Runtime ב-GDC פועלת כשמבצעים אחת מהפעולות הבאות:

  1. הפעלת VM Runtime ב-GDC

  2. הפעלת VM Runtime בתכונות GDC, כמו useEmulation

  3. שדרוג אשכולות

  4. הסרת התווית kubevm.io/VM-SkipSchedule בצמתים

  5. כדי ליצור באופן עצמאי את VM Runtime באובייקט של בדיקת קדם-הפעלה של GDC, מריצים את הפקודה bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH או מחילים מניפסט YAML של VMRuntimePreflightCheck.

אפשר להפעיל מכונות וירטואליות אם בדיקת קדם-ההפעלה של VM Runtime העדכנית ב-GDC מצליחה. אם בדיקת קדם-ההפעלה נכשלת, יצירת המכונה הווירטואלית נחסמת ומוצגות שגיאות של בדיקת קדם-ההפעלה.

אימות ההצלחה של בדיקת קדם-הפעלה

כדי לוודא שהבדיקות המקדימות הצליחו, מריצים את הפקודות הבאות:

  1. כדי למצוא את הבדיקות האחרונות לפני ההשקה שבוצעו:

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    הפלט אמור להיראות כמו בדוגמה הבאה:

    NAME                                                             PASS    AGE
    vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e   false   42s
    vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5   true    21s
    
  2. כדי למצוא את הסטטוס של בדיקת טרום-טיסה, מריצים את הפקודה הבאה:

    kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
    
    ...
      preflightCheckSummary:
      preflightCheckSummary:
        featureStatuses:
          CPU:
            passed: true
          KVM:
            passed: true
        preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5
        preflightCheckPassed: true
    ...
    

ניפוי הבאגים של בדיקת ההתאמה נכשל

אם בדיקת הטרום-ההמראה נכשלת, מבצעים את השלבים הבאים כדי לאתר ולתקן את הבעיה:

  1. איתור הבדיקות האחרונות לפני ההשקה שבוצעו.

    kubectl get vmruntimepfc -n vm-system
    
  2. כדי לקבל פרטים, בודקים את הסטטוס של הבדיקה המקדימה.

    kubectl get vmruntimepfc -n vm-system \
        vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \
        --kubeconfig KUBECONFIG_PATH
    
    ...
    status:
    checks:
      worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos:
        passed: false
        results:
        - checkName: CPU
          passed: true
        - checkName: KVM
          message: |
            command terminated with exit code 1
            ls: /mnt/dev/kvm: No such file or directory
          passed: false
    ...
    
  3. צריך לפתור את הבעיה ולהריץ שוב את בדיקת הטרום-השקה של VM Runtime ב-GDC. כך נראה קובץ מניפסט לדוגמה של VMRuntimePreflightCheck ב-YAML:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

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