בדף הזה מוסבר איך לנהל מכונות וירטואליות בשרתים של Google Distributed Cloud במודל מחובר שמופעל בהם VM Runtime ב-Google Distributed Cloud. כדי לבצע את השלבים שבדף הזה, אתם צריכים להכיר את VM Runtime ב-GDC. רשימה של מערכות הפעלה נתמכות של אורחים זמינה במאמר מערכות הפעלה מאומתות של אורחים עבור VM Runtime ב-GDC.
כדי ללמוד איך מכונות וירטואליות משמשות כרכיב חיוני בפלטפורמה המחוברת של Distributed Cloud, אפשר לעיין במאמר הרחבת GKE Enterprise לניהול מכונות וירטואליות בפריסה מקומית.
קלאסטרים מחוברים של Distributed Cloud תומכים בוווב-הוקים של מכונות וירטואליות. כך אפשר לאמת בקשות משתמשים שמופנות לשרת Kubernetes API המקומי ב-Distributed Cloud. בקשות שנדחו יוצרות מידע מפורט על סיבת הדחייה.
הגדרת Symcloud Storage
השרתים של Google Distributed Cloud במודל מחובר משתמשים ב-Rakuten Symcloud Storage כפתרון אחסון. Symcloud Storage הוא פתרון של צד שלישי שפועל כשכבת הפשטה של אחסון מקומי בכל צומת שמחובר ל-Distributed Cloud, ומאפשר לעומסי עבודה שפועלים בצמתים אחרים שמחוברים ל-Distributed Cloud לגשת לאחסון המקומי.
שירות Symcloud Storage נפרס מ-Google Cloud Marketplace והוא כפוף לתנאים שמפורטים שם. Google מספקת תמיכה מוגבלת בשימוש ב-Symcloud Storage עם Distributed Cloud במודל מחובר, ועשויה לפנות לספק הצד השלישי לקבלת עזרה. עדכוני התוכנה של Symcloud Storage כלולים בעדכוני התוכנה המקושרים של Distributed Cloud.
כדי להפעיל את Symcloud Storage למכונות וירטואליות, צריך להגדיר את האשכול המחובר של Google Distributed Cloud באופן הבא:
יוצרים את מרחב השמות
robinioבאמצעות הפקודה הבאה:kubectl create ns robinio
מקבלים את קובץ הרישיון של Symcloud Storage ומחילים אותו על האשכול באמצעות הפקודה הבאה:
kubectl apply LICENSE_FILE
מריצים את הפקודה הבאה כדי לוודא ש-Symcloud Storage פועל:
kubectl apply LICENSE_FILE
הפקודה מחזירה פלט שדומה לזה:
Name: robin Namespace: Labels: app.kubernetes.io/instance=robin app.kubernetes.io/managed-by=robin.io app.kubernetes.io/name=robin Annotations: <none> API Version: manage.robin.io/v1 Kind: RobinCluster Metadata: … Spec: … Status: … Phase: Ready …יוצרים את סוג האחסון
robin-block-immediateעל ידי החלת ההגדרה הבאה על האשכול:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: robin-block-immediate parameters: faultdomain: host replication: "3" blocksize: "512" provisioner: robin reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true
יוצרים את המחלקה
robin-snapshotclassשל snapshot של נפח על ידי החלת ההגדרה הבאה על האשכול:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: robin-snapshotclass labels: app.kubernetes.io/instance: robin app.kubernetes.io/managed-by: robin.io app.kubernetes.io/name: robin annotations: snapshot.storage.kubernetes.io/is-default-class: "true" driver: robin deletionPolicy: Delete
הפעלת VM Runtime ב-GDC במודל מחובר של Distributed Cloud
כברירת מחדל, התמיכה ב-VM Runtime במכונה וירטואלית של GDC מושבתת ב-Distributed Cloud connected. כדי להפעיל את האפשרות הזו, צריך לבצע את השלבים שמפורטים בקטע הזה. ההוראות בקטע הזה מניחות שיש לכם אשכול מחובר של Distributed Cloud שפועל באופן מלא.
כדי להפעיל את VM Runtime במערכת המשנה של מכונה וירטואלית ב-GDC, צריך לבצע את השלבים הבאים:
משנים את המשאב המותאם אישית
VMRuntimeעם התוכן הבא ומחילים אותו על האשכול:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: annotations: baremetal.cluster.gke.io/vmrumtime-force-disable: "false" vm.cluster.gke.io/enable-vm-backup: "true" spec: enabled: true storage: defaultStorageClass: robin-block-immediate haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
בדרך כלל התהליך נמשך כמה דקות.
כדי לוודא ש
VMRuntimeהמשאב המותאם אישית הוחל על האשכול, משתמשים בפקודה הבאה:kubectl get vmruntime
הפקודה מחזירה פלט שדומה לדוגמה הבאה:
NAME AGE ENABLED READY PREFLIGHTCHECK vmruntime 5m true true trueמשנים את
storageprofileעבור סוג האחסוןrobin-block-immediateעם התוכן הבא ומחילים אותו על האשכול:apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: robin-block-immediate spec: claimPropertySets: accessModes: ReadWriteMany volumeMode: Block
התקנה של כלי הניהול virtctl
כדי לנהל מכונות וירטואליות באשכול מחובר של Distributed Cloud, צריך את כלי הלקוח virtctl. כדי להתקין את הכלי, מבצעים את השלבים הבאים:
מתקינים את כלי הלקוח
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 -
מוודאים שהפלאגין
virtמותקן:kubectl plugin list
אם הפלאגין הותקן בהצלחה, הפלט של הפקודה יכלול את
kubectl-virtכאחד מהפלאגינים.
יצירת קטגוריה של Cloud Storage לתמונות של מכונות וירטואליות
כדי ליצור קטגוריית Cloud Storage לתמונות של המכונות הווירטואליות, צריך לבצע את השלבים שמפורטים בקטע הזה. אם כבר יש לכם מאגר תמונות, אתם יכולים לדלג על הקטע הזה.
כדי ליצור קטגוריה, פועלים לפי השלבים במאמר יצירת קטגוריות.
מגדירים חשבון שירות ומפתח לגישה לקטגוריה באמצעות הפקודות הבאות:
export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create image-access gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ gcloud iam service-accounts keys create ./image-access-gcr.json \ --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
יוצרים Secret באשכול כדי לגשת לקטגוריה. אם הדלי גלוי לכולם, אפשר לדלג על השלב הזה. הסוד הזה צריך להיות באותו מרחב שמות כמו הדיסקים של המכונה הווירטואלית. צריך ליצור סוד בכל מרחב שמות מושפע.
kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE
מחליפים את
CLUSTER_IDבשם של מרחב השמות של היעד.מאחסנים את התמונות בדלי.
יצירת דיסק של מכונה וירטואלית מקובץ אימג' של מכונה וירטואלית
כדי ליצור דיסק של מכונה וירטואלית מקובץ אימג' של מכונה וירטואלית, צריך לבצע את השלבים שבקטע הזה.
יצירת דיסק מקובץ אימג' שמאוחסן ב-Cloud Storage
יוצרים דיסק של מכונה וירטואלית ממכונה וירטואלית שמאוחסנת בקטגוריה של Cloud Storage, על ידי החלת ההגדרה הבאה על האשכול:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE secretRef: gcs-image-sa size: DISK_SIZE storageClassName: robin-block-immediate
מחליפים את מה שכתוב בשדות הבאים:
-
DISK_NAME: השם של הדיסק של המכונה הווירטואלית. -
NAMESPACE: מרחב השמות של היעד. -
IMAGE_FILE: השם של קובץ תמונת המכונה הווירטואלית. -
DISK_SIZE: גודל הדיסק הרצוי. הערך הזה צריך להיות גדול יותר מהערךvirtual-sizeשל קובץ התמונה של המכונה הווירטואלית. אפשר למצוא את הערך הזה באמצעות הפקודהqemu-img info DISK_SIZE.
אם לא מציינים ערך storageClassName, המערכת משתמשת בערך ברירת המחדל שצוין במשאב VMRuntime.
יצירת דיסק מקובץ תמונה של דיסק קיים
כדי ליצור דיסק של מכונה וירטואלית מקובץ אימג' או מדיסק קיים של מכונה וירטואלית באשכול, פועלים לפי השלבים הבאים.
יוצרים את דיסק היעד על ידי החלת ההגדרה הבאה על האשכול:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: IMAGE_DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: EXISTING_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_DISK_NAME: השם של הדיסק של המכונה הווירטואלית. -
NAMESPACE: מרחב השמות של היעד. -
EXISTING_DISK_NAME: השם של הדיסק הקיים של המכונה הווירטואלית. -
DISK_SIZE: גודל הדיסק הרצוי. הגודל הזה צריך להיות שווה לגודל של הדיסק הקיים או של קובץ התמונה, או גדול ממנו.
כדי לגלות את הגודל של דיסק קיים או של קובץ תמונה, אפשר להשתמש בכלי
qemu-imgבאופן הבא:qemu-img info EXISTING_DISK_NAME
אם לא מציינים ערך
storageClassName, המערכת משתמשת בערך ברירת המחדל שצוין במשאבVMRuntime.-
יוצרים דיסק חדש מקובץ התמונה הקיים על ידי החלת ההגדרה הבאה על האשכול:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: IMAGE_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_DISK_NAME: השם של דיסק המכונה הווירטואלית שיצרתם בשלב הקודם. -
NAMESPACE: מרחב השמות של היעד. -
DISK_SIZE: גודל הדיסק הרצוי. הגודל צריך להיות זהה לגודל של דיסק המכונה הווירטואלית שיצרתם בשלב הקודם.
-
משנים את הגודל של דיסק היעד לגודל הרצוי באמצעות הפקודה הבאה:
kubectl edit gdisk DISK_NAME -n NAMESPACE
מחליפים את מה שכתוב בשדות הבאים:
-
DISK_NAME: השם של דיסק המכונה הווירטואלית שיצרתם בשלב הקודם. -
NAMESPACE: מרחב השמות של היעד.
-
משנים את הערך
spec.sizeבהגדרת הדיסק ומחילים אותו על האשכול.
יצירת דיסק ריק
יוצרים דיסק ריק של מכונה וירטואלית על ידי החלת ההגדרה הבאה על האשכול:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: size: DISK_SIZE storageClassName: robin-block-immediate
מחליפים את מה שכתוב בשדות הבאים:
-
DISK_NAME: השם של הדיסק של המכונה הווירטואלית. -
NAMESPACE: מרחב השמות של היעד. -
DISK_SIZE: גודל הדיסק הרצוי בגיביבייט. הערך הזה צריך להיות גדול יותר מהערךvirtual-sizeשל קובץ התמונה של המכונה הווירטואלית. אפשר למצוא את הערך הזה באמצעות הפקודהqemu-img info DISK_SIZE.
אם לא מציינים ערך storageClassName, המערכת משתמשת בערך ברירת המחדל שצוין במשאב VMRuntime.
הגדרת רשתות וירטואליות
פועלים לפי השלבים שבקטע Networking כדי להגדיר את הרשת הווירטואלית למכונות הווירטואליות.
יצירת מכונה וירטואלית
כדי ליצור מכונה וירטואלית בפריסת שרת מחובר של Distributed Cloud, צריך לבצע את השלבים שבקטע הזה. ההוראות בקטע הזה הן דוגמאות שממחישות הגדרות לתרחישים שונים. מידע מפורט על הגדרת מכונות וירטואליות זמין במאמר יצירת מכונה וירטואלית עם משאבי CPU וזיכרון ספציפיים באמצעות VM Runtime ב-GDC.
יצירת מכונה וירטואלית מקובץ אימג' של דיסק שאפשר לאתחל ממנו
כדי ליצור מכונה וירטואלית מקובץ אימג' של דיסק שאפשר לאתחל ממנו, צריך להחיל את ההגדרה הבאה על האשכול:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management autoRestartOnConfigurationChange: true compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 disks: - virtualMachineDiskName: my-boot-disk boot: true - virtualMachineDiskName: my-data-disk
מחליפים את מה שכתוב בשדות הבאים:
-
DISK_NAME: השם של הדיסק של המכונה הווירטואלית. -
NAMESPACE: מרחב השמות של היעד.
יצירת מכונה וירטואלית מקובץ אימג' של דיסק אופטי ISO
כדי ליצור מכונה וירטואלית מקובץ אימג' של דיסק אופטי ISO, צריך לבצע את השלבים במאמר בנושא יצירת מכונה וירטואלית של Windows מקובץ אימג' ISO ב-Google Distributed Cloud.
יצירת מכונה וירטואלית עם תמיכה ב-GPU
כדי ליצור מכונה וירטואלית שמוגדרת בהתאם לדרישות העסקיות שלכם, צריך לבצע את השלבים שמתוארים בדף הזה, ואז את השלבים במאמר הגדרה של מכונה וירטואלית לשימוש במשאבי GPU.
גישה למכונה וירטואלית
כדי לגשת למכונה וירטואלית שפועלת בפריסת שרת מחובר של Distributed Cloud, צריך לבצע את השלבים שבקטע הזה.
קבלת פרטי כניסה לגישה
כדי לקבל את פרטי הכניסה שדרושים לגישה למכונה הווירטואלית באמצעות התכונה 'סביבת אורח של Linux', צריך לבצע את השלבים שמפורטים בקטע הזה.
כדי להפעיל את סביבת האורח של Linux במכונה הווירטואלית של היעד, צריך להחיל את ההגדרה הבאה על האשכול:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: {} autoRestartOnConfigurationChange: true
מריצים את הפקודה הבאה כדי ליצור קובץ
id_rsa.pubשמכיל זוג מפתחות SSH:ssh-keygen -t rsaיוצרים משאב
VirtualMachineAccessRequestעל ידי החלת ההגדרה הבאה על האשכול:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachineAccessRequest metadata: name: RESOURCE_NAME namespace: NAMESPACE spec: vm: VM_NAME user: USER_NAME ssh: key: RSA_KEY ttl: 2h
מחליפים את מה שכתוב בשדות הבאים:
-
RESOURCE_NAME: שם תיאורי של משאב בקשת הגישה למכונה הווירטואלית. -
NAMESPACE: מרחב השמות של היעד. -
VM_NAME: השם של המכונה הווירטואלית של היעד. -
USER_NAME: השם של המשתמש שמקבל גישה. -
RSA_KEY: התוכן של קובץid_rsa.pubשיצרתם בשלב הקודם.
כדי לבדוק את הסטטוס של בקשת הגישה, מריצים את הפקודה הבאה:
kubectl get vmar
אם הפקודה מחזירה סטטוס
Configured, ממשיכים לשלב הבא.ניגשים למכונה הווירטואלית באמצעות SSH או Remote Desktop:
- אם המכונה הווירטואלית מחוברת לרשת המקומית, אפשר לגשת אליה ישירות.
- אם המכונה הווירטואלית מחוברת לרשת של ה-Pod, צריך ליצור שירות איזון עומסים כדי לגשת ליציאות הנדרשות.
הפעלה, הפעלה מחדש או עצירה של מכונה וירטואלית
משתמשים בפקודות הבאות כדי להפעיל, להפעיל מחדש או לעצור מכונה וירטואלית:
- הפעלת מכונה וירטואלית:
kubectl virt start vmVM_NAME-nNAMESPACE - הפעלה מחדש של מכונה וירטואלית:
kubectl virt restart vmVM_NAME-nNAMESPACE - הפסקת מכונה וירטואלית:
kubectl virt stop vmVM_NAME-nNAMESPACE
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של המכונה הווירטואלית של היעד. -
NAMESPACE: מרחב השמות של היעד.
המאמרים הבאים
- ניהול מכונות וירטואליות במתלים מחוברים של Distributed Cloud
- פריסת עומסי עבודה ב-Distributed Cloud במודל מחובר
- ניהול עומסי עבודה של GPU
- ניהול אזורים
- ניהול מכונות
- ניהול אשכולות
- ניהול מאגרי צמתים