ניהול מכונות וירטואליות במתלים מחוברים של Distributed Cloud

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

עומסי עבודה של מכונות וירטואליות נתמכים בחומרה של מתלים מדור קודם (Config 1 ו-Config 2), אבל לא בהגדרות חומרה של מתלים חדשות יותר.

כדי ללמוד איך מכונות וירטואליות משמשות כרכיב חיוני בפלטפורמה המחוברת של Distributed Cloud, אפשר לעיין במאמר הרחבת GKE Enterprise לניהול מכונות וירטואליות בפריסה מקומית.

קלאסטרים מחוברים של Distributed Cloud תומכים בוווב-הוקים של מכונות וירטואליות. כך אפשר לאמת בקשות משתמשים שמופנות לשרת Kubernetes API המקומי ב-Distributed Cloud. בקשות שנדחו יוצרות מידע מפורט על סיבת הדחייה.

שדרוג מכונות וירטואליות קיימות לגרסה 1.7.0 של Distributed Cloud במודל מחובר

כדי לשדרג את האשכול לגרסה 1.7.0 של תוכנה שמקושרת ל-Distributed Cloud, צריך להוסיף את הקוד הבא לקטע spec במשאב VMRuntime באשכול, ואז להחיל את המשאב ששונה על האשכול:

spec:
  haPolicy:
    defaultRecoveryStrategy: Reschedule
    nodeHeartbeatInterval: 15s
    nodeMonitorGracePeriod: 55s

הפעלת VM Runtime ב-GDC במודל מחובר של Distributed Cloud

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

  1. משנים את המשאב המותאם אישית VMRuntime עם התוכן הבא ומחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds; required for upgrading to 1.7.0
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    אל תשנו את הערך של הפרמטר vmImageFormat. ‫Distributed Cloud connected לא תומך בפורמטים אחרים של דיסקים וירטואליים.

    בדרך כלל התהליך נמשך כמה דקות.

    אל תשנו את הערך של הפרמטר vmImageFormat. ‫Distributed Cloud connected לא תומך בפורמטים אחרים של דיסקים וירטואליים.

    בדרך כלל התהליך נמשך כמה דקות.

  2. כדי לוודא שVMRuntime המשאב המותאם אישית הוחל על האשכול, משתמשים בפקודה הבאה:

    kubectl get vmruntime -o yaml

    הפקודה מחזירה פלט שדומה לדוגמה הבאה:

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. כדי לוודא שהפעלתם את התמיכה ב-VM Runtime במכונה הווירטואלית של GDC באשכול, מריצים את הפקודה הבאה:

    kubectl get pods -n vm-system

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

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

התקנה של כלי הניהול virtctl

כדי לנהל מכונות וירטואליות באשכול מחובר של Distributed Cloud, צריך את כלי הלקוח virtctl. כדי להתקין את הכלי, מבצעים את השלבים הבאים:

  1. מתקינים את כלי הלקוח virtctl כפלאגין של kubectl:

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. מוודאים שהפלאגין virt מותקן:

    kubectl plugin list

    אם הפלאגין הותקן בהצלחה, הפלט של הפקודה יכלול את kubectl-virt כאחד מהפלאגינים.

הקצאת מכונה וירטואלית ב-Distributed Cloud במודל מחובר

בקטע הזה מופיעות דוגמאות להגדרות שממחישות איך להקצות מכונה וירטואלית של Linux ומכונה וירטואלית של Windows באשכול שמחובר ל-Distributed Cloud עם שכבת ההפשטה של Symcloud Storage.

שימו לב שאי אפשר ליצור מכונה וירטואלית באשכול שמחובר ל-Distributed Cloud ישירות באמצעות הפקודה kubectl virt, כי Distributed Cloud connected לא מספק אחסון במערכת הקבצים למכונות וירטואליות.

לפני שמבצעים את השלבים שבקטע הזה, צריך קודם לבצע את השלבים שבקטע הגדרת Distributed Cloud connected ל-Symcloud Storage. אם תשביתו בהמשך את Symcloud Storage באשכול, המכונות הווירטואליות שהוגדרו לשימוש ב-Symcloud Storage ייכשלו.

הקצאת מכונה וירטואלית של Linux ב-Distributed Cloud במודל מחובר

בדוגמה הבאה מוסבר איך להקצות מכונה וירטואלית של Linux עם Symcloud Storage שמופעלת בה Ubuntu Server 22.04. מקור ההתקנה הוא קובץ אימג' של דיסק ISO של Ubuntu Server 22.04.

  1. יוצרים משאב VirtualMachineDisk עם התוכן הבא עבור תמונת הדיסק להתקנה של Ubuntu Server, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. יוצרים משאב VirtualMachineDisk עם התוכן הבא עבור הדיסק הקשיח הווירטואלי של המכונה הווירטואלית, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. יוצרים משאב VirtualMachineType עם התוכן הבא שמציין את ההגדרות של המכונה הווירטואלית, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. יוצרים משאב VirtualMachine עם התוכן הבא, שמפעיל את המכונה הווירטואלית באשכול, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    בנוסף, צריך להגדיר את התכונות הבאות באשכול:

  5. מתקינים את Ubuntu Server במכונה הווירטואלית:

    1. מחכים עד ש-importer Pod יוריד את קובץ האימג' של דיסק ההתקנה של Ubuntu Server.
    2. בודקים את הסטטוס של המכונה הווירטואלית:

      kubectl get gvm VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – ubu-vm בדוגמה הזו.

    3. מתחברים למכונה הווירטואלית באמצעות SSH או Remote Desktop.

    4. משלימים את שלבי ההתקנה של Ubuntu Linux.

  6. לפנות:

    1. מפסיקים את המכונה הווירטואלית:

      kubectl virt stop VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – ubu-vm בדוגמה הזו.

    2. עורכים את קובץ ה-YAML של המכונה הווירטואלית כדי להסיר את ההפניה לקובץ האימג' של דיסק ההתקנה:

      kubectl edit gvm VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – ubu-vm בדוגמה הזו.

    3. מפעילים את המכונה הווירטואלית:

      kubectl virt start VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – ubu-vm בדוגמה הזו.

    4. מוחקים את משאב VirtualMachineDisk של קובץ האימג' של דיסק ההתקנה:

      kubectl delete virtualmachinedisk ubuntu-iso-disk

הקצאת מכונה וירטואלית של Windows ב-Distributed Cloud במודל מחובר

בדוגמה הבאה מוצג תהליך הקצאת מכונה וירטואלית של Windows עם Symcloud Storage. השלבים דומים לאלה של הקצאת מכונה וירטואלית של Linux, עם תוספת של תמונת הדיסק של מנהל ההתקן virtio, שנדרשת להתקנת Windows.

  1. משיגים עותק מורשה של Windows וקובץ אימג' של מדיה להתקנה.

  2. יוצרים משאב VirtualMachineDisk עם התוכן הבא בשביל תמונת הדיסק להתקנה של Windows, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    מחליפים את NAT_GATEWAY בכתובת ה-URL המלאה של קובץ ה-ISO של התקנת Windows.

  3. יוצרים משאב VirtualMachineDisk עם התוכן הבא עבור מנהל ההתקן virtio, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. יוצרים משאב VirtualMachineDisk עם התוכן הבא עבור הדיסק הקשיח הווירטואלי של המכונה הווירטואלית, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. יוצרים משאב VirtualMachineType עם התוכן הבא שמציין את ההגדרות של המכונה הווירטואלית, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. יוצרים משאב VirtualMachine עם התוכן הבא, שמפעיל את המכונה הווירטואלית באשכול, ואז מחילים אותו על האשכול:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    בנוסף, צריך להגדיר את התכונות הבאות באשכול:

  7. מתקינים את Windows במכונה הווירטואלית:

    1. ממתינים להורדה של קובץ האימג' של דיסק ההתקנה של Windows ב-importer Pod.
    2. בודקים את הסטטוס של המכונה הווירטואלית:

      kubectl get gvm VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – win-vm בדוגמה הזו.

    3. משלימים את ההתקנה של Windows לפי השלבים במאמר התחברות ל-VM של Windows והשלמת ההתקנה של מערכת ההפעלה.

  8. לפנות:

    1. מפסיקים את המכונה הווירטואלית:

      kubectl virt stop VM_NAME

      מחליפים את VM_NAME בשם של המכונה הווירטואלית – win-vm בדוגמה הזו.

    2. פועלים לפי ההוראות שבמאמר ניתוק קובץ ה-ISO ודיסק מנהלי ההתקנים.

ניהול מכונות וירטואליות שפועלות ב-Distributed Cloud במודל מחובר

הוראות לניהול מכונות וירטואליות שפועלות ב-Distributed Cloud Connected זמינות במסמכי התיעוד הבאים בנושא VM Runtime on GDC:

כדי לנהל מכונות וירטואליות שפועלות ב-Distributed Cloud Connected, קודם צריך להגדיר קישוריות ל-kubectl.

השבתה של VM Runtime ב-GDC במודל מחובר של Distributed Cloud

כדי להשבית את VM Runtime ב-GDC ב-Distributed Cloud, פועלים לפי השלבים שמפורטים בקטע הזה. לפני שמשביתים את VM Runtime ב-GDC ב-Distributed Cloud Connected, צריך לעצור ולמחוק את כל המכונות הווירטואליות באשכול Distributed Cloud Connected, כמו שמתואר במאמר מחיקת מכונה וירטואלית.

כדי להשבית את VM Runtime ב-GDC on Distributed Cloud connected, צריך לשנות את VMRuntime המשאב בהתאמה אישית על ידי הגדרת הפרמטר enabled spec לערך false באופן הבא, ואז להחיל אותו על האשכול:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

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