הפעלה או השבתה של 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, שהוא פורמט של העתקה בעת כתיבה, אבל הוא עשוי להשתמש ביותר נפח אחסון בדיסק. מידע נוסף על פורמטים של תמונות ל-VM זמין במאמר פורמטים של קבצים של תמונות דיסק במאמרי העזרה של QEMU.
  3. שומרים את המשאב המותאם אישית בכלי העריכה.

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

    kubectl describe vmruntime vmruntime
    

    הפרטים של VMRuntime משאב בהתאמה אישית כוללים קטע Status. ההגדרה VM Runtime on 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.

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

אפשר להשתמש בהערה 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, ‏ VM Runtime ב-GDC מנסה להגן על מכונות וירטואליות שפועלות. לפני שמשביתים את VM Runtime ב-GDC, צריך למחוק את כל מכונות ה-VM הפועלות, או לציין את הפרמטר --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 נכשלה. הבדיקה המקדימה של זמן הריצה של VM ב-GDC פועלת באופן אוטומטי כש-spec.enabled מוגדר כ-true.

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

בדיקת הטרום-הפעלה של זמן הריצה של VM ב-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.

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

אימות ההצלחה של בדיקת הטרום-טיסה

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

  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
    

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