הדרכה: יצירה וניהול של מכונה וירטואלית של Linux ב-VM Runtime ב-GDC

סביבת זמן הריצה של VM ב-GDC מאפשרת להריץ ולנהל מכונות וירטואליות (VM) של Linux ישירות ב-Bare Metal. במדריך הזה תגדירו את יחסי התלות החיוניים, כולל StorageClass ורשת וירטואלית, ואז תיצרו מכונה וירטואלית שמשתמשת במשאבים האלה. בנוסף, אתם משנים את ההגדרות של המכונה הווירטואלית כדי לצרף דיסק נוסף.

מטרות

  • הגדרת יחסי תלות בסיסיים
    • יצירת StorageClass ל-VM Runtime on GDC
    • יצירת רשת וירטואלית לשימוש במכונות הווירטואליות
  • יצירת דיסק אתחול של מכונה וירטואלית
  • יצירת VM
  • עריכת מכונה וירטואלית כדי להוסיף דיסק וירטואלי חדש

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

כדי להשלים את המדריך, אתם צריכים גישה למשאבים ולכלים הבאים:

יצירת StorageClass

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

במדריך הזה לא נספק הוראות ספציפיות לכל שותף StorageClass ושותף אחסון.

שותפי האחסון של Google Distributed Cloud Ready מספקים מנהלי התקנים מתאימים של Container Storage Interface (CSI) שמתקינים ומגדירים את המשאבים הנדרשים בהתאמה אישית לאחסון. כדי להתקין את מנהל ההתקן של CSI באשכול, עיינו ברשימת שותפי האחסון הנתמכים ופעלו לפי ההוראות שלהם.

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

בדוגמה הבסיסית הבאה של NFS StorageClass נעשה שימוש ב-NFS CSI Driver. אתם מגדירים את הכתובת והנתיב של שרת ה-NFS שבהם תשתמשו ב-StorageClass. כל הצמתים באשכול יכולים להתחבר לאחסון ה-NFS הזה ולהשתמש בו:

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: example-nfs
  provisioner: nfs.csi.k8s.io
  parameters:
    server: nfs-server.example.com
    path: /vm-share
  reclaimPolicy: Delete
  volumeBindingMode: Immediate
  mountOptions:
    - nconnect=8
    - nfsvers=4.1

במדריך הזה, השתמשו בשם של StorageClass באשכול שלכם.

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

יצירת רשת וירטואלית

מכונות וירטואליות מתחברות לרשת וירטואלית באמצעות ממשק רשת וירטואלי. הרשת הווירטואלית מאפשרת להם לתקשר עם מכונות וירטואליות אחרות באשכול, או עם משאבים מחוץ לאשכול.

במדריך הזה תיצרו רשת וירטואלית בסיסית בשכבה 2 (L2) שיכולה להשתמש בשרת DHCP חיצוני. כשמפעילים את השימוש בשרת DHCP חיצוני, אפשר לדלג על הגדרת ה-DNS והשער אם הם מסופקים על ידי DHCP.

כדי ליצור רשת שמשתמשת בשרת DHCP חיצוני:

  1. יוצרים מניפסט Network, כמו dhcp-network.yaml, בכלי העריכה שבוחרים:

    nano dhcp-network.yaml
    
  2. מעתיקים ומדביקים את המניפסט הבא ב-YAML:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    מחליפים את הערכים הבאים:

    • ‫NETWORK_NAME: השם של הרשת.
    • ‫INTERFACE_NAME: שם הממשק בצומת של Google Distributed Cloud שאליו רוצים לצרף את הרשת. לכל הצמתים צריך להיות אותו שם ממשק.

    במניפסט Network הזה, הערכים הבאים מוגדרים:

    • לעומסי עבודה יכול להיות רק חיבור L2 אחד לרשת הזו. זו הרשת היחידה מסוג type שאפשר ליצור בסביבת זמן הריצה של VM ב-GDC.
    • ברשת מופעל DHCP חיצוני. שרת ה-DHCP החיצוני אחראי להקצאת כתובות IPv4, למסלולים, לשער ולהגדרת ה-DNS של עומסי העבודה שמחוברים לרשת הזו.
  3. שומרים וסוגרים את המניפסט של Network בכלי העריכה.

  4. יוצרים את הרשת באמצעות kubectl:

    kubectl apply -f use-dhcp-network.yaml
    

יצירת דיסק אתחול של VM

במכונה וירטואלית אפשר להשתמש בקובץ אימג' שנוצר מראש, או לבצע אתחול מקובץ אימג' מסוג ISO כדי להתקין את מערכת ההפעלה באופן ידני. אפשר לאחסן את קובצי האימג' של הדיסקים האלה ולגשת אליהם באמצעות HTTP, או לאחסן אותם ב-Cloud Storage ולגשת אליהם באמצעות Secret.

במדריך הזה תיצרו דיסק אתחול מקובץ האימג' הציבורי של Ubuntu Server 20.04 בענן באמצעות HTTP.

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

  1. יוצרים מניפסט VirtualMachineDisk, כמו my-disk.yaml, בכלי העריכה שבוחרים:

    nano my-disk.yaml
    
  2. מעתיקים ומדביקים את הגדרת ה-YAML הבאה:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 20Gi
      storageClassName: STORAGE_CLASS_NAME
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    

    מחליפים את הערכים הבאים:

    • ‫DISK_NAME: השם שרוצים לתת לדיסק. בדוגמה הזו נוצר דיסק בנפח 20Gi (20GiB) בשם DISK_NAME, באמצעות קובץ אימג' ציבורי של Ubuntu Server 20.04.
    • ‫STORAGE_CLASS_NAME: ה-StorageClass שרוצים להשתמש בו ב-VirtualMachineDisk.
      • אפשר להשתמש ב-kubectl get storageclass כדי להציג את מה שזמין באשכול.
  3. שומרים וסוגרים את המניפסט של VirtualMachineDisk בכלי העריכה.

  4. יוצרים את הדיסק באמצעות kubectl:

    kubectl apply -f my-disk.yaml
    

יצירת VM

אחרי שיצרתם רשת וירטואלית ודיסק אתחול בקטעים הקודמים, עכשיו אתם יכולים ליצור מכונה וירטואלית. המכונה הווירטואלית מתחברת לרשת הווירטואלית ומופעלת מהדיסק הווירטואלי. בהוראות הבאות מוסבר איך ליצור מכונה וירטואלית על ידי החלה ישירה של קובץ מניפסט YAML של VirtualMachine באמצעות ה-CLI של kubectl.

  1. יוצרים מניפסט שמגדיר VirtualMachine, כמו my-vm.yaml, בכלי העריכה שבוחרים:

    nano my-vm.yaml
    
  2. מעתיקים ומדביקים את הגדרת ה-YAML הבאה:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      osType: linux
      compute:
        cpu:
          vcpus: VCPU_NUMBER
        memory:
          capacity: MEMORY_SIZE
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
    

    מחליפים את הערכים הבאים:

    • ‫VM_NAME: השם של המכונה הווירטואלית.
    • ‫VCPU_NUMBER: מספר המעבדים הווירטואליים (vCPU) שאפשר להקצות למכונה הווירטואלית. אם לא מגדירים את ההגדרה הזו, מוקצים 2 מעבדי vCPU כברירת מחדל.
      • אפשר להקצות בין 1 ל-96 מעבדי vCPU למכונה וירטואלית.
    • ‫MEMORY_SIZE: כמות הזיכרון האופציונלית להקצאה למכונה הווירטואלית. אם לא מגדירים את זה, מוקצה זיכרון בנפח של 4GiB כברירת מחדל.
    • ‫NETWORK_NAME: השם של הרשת שיצרתם בקטע הקודם.
    • ‫DISK_NAME: השם של דיסק האתחול שיצרתם בקטע הקודם. הדיסק הזה מוגדר ל-boot: true.
  3. שומרים וסוגרים את המניפסט בכלי העריכה.

  4. יוצרים את המכונה הווירטואלית ואת הדיסק באמצעות kubectl:

    kubectl apply -f my-vm.yaml
    
  5. יצירת המכונה הווירטואלית יכולה להימשך כמה דקות. בודקים את הסטטוס של ה-VM באמצעות הפקודה kubectl:

    kubectl get gvm VM_NAME
    

    בפלט לדוגמה הבא, ה-VM במצב Running:

    NAME    STATUS    AGE   IP
    MY_VM   Running   64s   192.168.2.124
    

התחברות למכונה הווירטואלית

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

  1. כדי לגשת למכונה וירטואלית מהמסוף, משתמשים ב-kubectl:

    kubectl virt console VM_NAME
    
  2. כשמוצגת בקשה, מזינים את פרטי הכניסה של המשתמש שציינתם כדי ליצור את המכונה הווירטואלית.

  3. אחרי שמתחברים למסוף של ה-VM, יוצאים מהסשן של ה-VM ומהמסוף:

    Ctrl + ]
    

עריכת ה-VM

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

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

  1. יוצרים מניפסט VirtualMachineDisk, כמו my-data-disk.yaml, בכלי העריכה שבוחרים:

    nano my-data-disk.yaml
    
  2. מעתיקים ומדביקים את הגדרת ה-YAML הבאה:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DATA_DISK_NAME
    spec:
      size: 10Gi
      storageClassName: STORAGE_CLASS_NAME
    

    מחליפים את הערכים הבאים:

    • ‫DATA_DISK_NAME: השם שרוצים לתת לדיסק הנתונים. בדוגמה הזו נוצר דיסק בנפח 10Gi (10 gibibyte).
    • ‫STORAGE_CLASS_NAME: ה-StorageClass שרוצים להשתמש בו ב-VirtualMachineDisk.
      • אפשר להשתמש ב-kubectl get storageclass כדי להציג את מה שזמין באשכול.
  3. שומרים וסוגרים את המניפסט של הדיסק בכלי העריכה.

  4. יוצרים את הדיסק באמצעות kubectl:

    kubectl apply -f my-data-disk.yaml
    
  5. משתמשים ב-kubectl כדי לעצור את ה-VM לפני שמחברים את הדיסק הווירטואלי החדש:

    kubectl virt stop VM_NAME
    
  6. עריכת המשאב של המכונה הווירטואלית:

    kubectl edit gvm VM_NAME
    

    מעדכנים את המניפסט של VirtualMachine ב-YAML כדי לצרף את הדיסק בסוף הקטע spec.disks של ה-VM:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
        - virtualMachineDiskName: DATA_DISK_NAME
    

    מחליפים את DATA_DISK_NAME בשם הדיסק שיצרתם בשלב הקודם.

  7. שומרים וסוגרים את המניפסט המעודכן של המכונה הווירטואלית בכלי העריכה.

  8. משתמשים ב-kubectl כדי להפעיל את המכונה הווירטואלית:

    kubectl virt start VM_NAME
    

הסרת המשאבים

כדי למחוק את המשאבים שנוצרו במדריך הזה:

  1. מחיקת המכונה הווירטואלית:

    kubectl delete -f my-vm.yaml
    
  2. מחיקת המשאבים ב-VirtualMachineDisk:

    kubectl delete -f my-data-disk.yaml
    kubectl delete -f my-disk.yaml
    

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

  1. מחיקת הרשת הווירטואלית:

    kubectl delete -f use-dhcp-network.yaml
    
  2. כדי להסיר את מנהל ההתקן של CSI מהאשכול, פועלים לפי ההוראות של שותף האחסון.

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