המסמך הזה מיועד לבעלי אפליקציות שמריצים את Google Distributed Cloud. במאמר הזה מוסבר איך ליצור משאבי דיסק ולנהל אותם עבור מכונות וירטואליות (VM) שמשתמשות ב-VM Runtime ב-GDC.
לפני שמתחילים
כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:
- גישה ל-Google Distributed Cloud מגרסה 1.12.0 (
anthosBareMetalVersion: 1.12.0) ואילך של אשכול. אפשר להשתמש בכל סוג של אשכול שיכול להריץ עומסי עבודה. אם צריך, אפשר לנסות את Google Distributed Cloud ב-Compute Engine או לעיין בסקירה הכללית על יצירת אשכולות. - כלי הלקוח
virtctlמותקן כפלאגין שלkubectl. במקרה הצורך, מתקינים את כלי הלקוח virtctl.
יצירת מכונת VM עם דיסק מצורף
כשיוצרים מכונה וירטואלית, אפשר לצרף דיסק אתחול או דיסק נתונים קיים, ליצור דיסק מתמונה (כולל דיסק האתחול) או ליצור דיסק ריק.
דיסק ריק
בתרחיש הזה, יוצרים דיסק ריק ומצרפים אותו למכונה הווירטואלית. בתרחיש הזה אפשר ליצור דיסק נתונים לאחסון נתוני האפליקציה.
יוצרים מניפסט שמגדיר
VirtualMachineDiskוVirtualMachine, כמוmy-vm.yaml, בעורך שבחרתם:nano my-vm.yamlמעתיקים ומדביקים את הגדרת ה-YAML הבאה:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAMEמחליפים את מה שכתוב בשדות הבאים:
DISK_NAME: השם של הדיסק הריק שאתם יוצרים ומצרפים למכונה הווירטואלית.
VM_NAME: השם של המכונה הווירטואלית שאתם יוצרים.בדוגמה הזו נוצר דיסק ריק בגודל
10Gi(10 גיביבייט) בשםDISK_NAME. בקטעspec.disksשל המכונה הווירטואלית, צריך גם לצרף דיסק אתחול, למשל מתמונה כמו שמוצג בקטע הבא.
שומרים את קובץ המניפסט וסוגרים אותו בעורך.
יוצרים את המכונה הווירטואלית והדיסק באמצעות
kubectl:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIGמחליפים את הערך של
KUBECONFIGבנתיב לקובץ kubeconfig של האשכול.
מתוך תמונה
בתרחיש הזה, יוצרים דיסק מקובץ אימג' ומצרפים אותו למכונה הווירטואלית. בתרחיש הזה אפשר ליצור דיסק אתחול, למשל מקובץ אימג'. אפשר גם ליצור דיסקים של נתונים ולצרף אותם מתמונה.
מקורות תמונות נתמכים
VM Runtime ב-GDC מאפשר מגוון פורמטים של תמונות ותומך בשלושה סוגים של מקורות תמונות שאפשר לציין במפרט VirtualMachineDisk. כל אחת מהדוגמאות הבאות יוצרת דיסק של 20 גיביבייט ממקור תמונה נתמך אחר.
Hypertext Transfer Protocol (פרוטוקול העברת היפרטקסט)
בדוגמה הבאה של
VirtualMachineDiskמוצג המבנה הבסיסי של מקור תמונות ב-HTTP. בשדהurlצריך להזין כתובת URL מסוג HTTP או HTTPS.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: http: url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img size: 20GiB storageClassName: local-sharedCloud Storage
בדוגמה הבאה מוצג אופן יצירת דיסק מקובץ אימג' בקטגוריה של Cloud Storage. אם פרטי הכניסה שמוגדרים כברירת מחדל באפליקציה במחשב לא מספיקים כדי לגשת לכתובת ה-URL של Cloud Storage, צריך לספק פרטי כניסה. בדוגמה הבאה,
my-gcsהוא סוד שמכיל מפתח של חשבון שירות שמקודד ב-Base64.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: gcs: url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2 secretRef: my-gcs size: 20GiB storageClassName: local-sharedאם השתמשתם במפתחות של חשבונות שירות שהורדתם כדי ליצור את האשכול, תוכלו להשתמש במפתח של חשבון השירות של Artifact Registry כדי לגשת ל-Cloud Storage. אם אתם רוצים ליצור חשבון שירות נפרד כדי לגשת ל-Cloud Storage, תוכלו לעיין במאמר הגדרת חשבון שירות שיכול לגשת לקטגוריה של Cloud Storage.
כדי ליצור סוד ב-Kubernetes מקובץ מפתח של חשבון שירות שהורדתם, משתמשים בפקודה הבאה:
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
SECRET_NAME: השם של הסוד. -
KEY_FILE: הנתיב לקובץ ה-JSON של מפתח חשבון השירות שהורד. לדוגמה,bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json. -
KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.
מידע נוסף על שימוש בפרטי כניסה כדי לגשת ל-Cloud Storage זמין במאמר יצירה ושימוש בפרטי כניסה לייבוא תמונות מ-Cloud Storage.
-
דוגמה ל-Container registry
יש תמיכה במאגרי תמונות של קונטיינרים שתואמים ל-Open Container Initiative (OCI) distribution-spec. בדוגמה הבאה נוצר דיסק מקובץ אימג' שמאוחסן במאגר Docker.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: registry: url: docker://kubevirt/fedora-cloud-registry-disk-demo size: 20GiB storageClassName: local-shared
פורמטים תקינים של תמונות
כשיוצרים דיסק מתמונה, אפשר להשתמש בכל אחד מפורמטי התמונה הבאים:
- ארכיון GNU zip (gzip) (
.gz) - RAW (
.raw,.img) - תמונת דיסק של QEMU copy on write גרסה 2 (qcow2) (
.qcow2) - ארכיון XZ דחוס (
.xz) - קובץ דיסק של מכונה וירטואלית (VMDK) (
.vmdk) - קובץ תמונה של דיסק וירטואלי (VDI) של VirtualBox (
.vdi) - קובץ אימג' של דיסק קשיח וירטואלי (VHD) (
.vdh) - קובץ של דיסק קשיח וירטואלי (VDHX) גרסה 2 (
.vdhx) - קובץ אימג' של דיסק ISO (
.iso)
דוגמה לדיסק שנוצר מקובץ אימג' של HTTP
כדי ליצור דיסק אתחול מתמונת Ubuntu:
יוצרים מניפסט שמגדיר
VirtualMachineDiskו-VirtualMachine, כמו my-vm.yaml,בעורך שבחרתם:nano my-vm.yamlמעתיקים ומדביקים את הגדרת ה-YAML הבאה:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dvבדוגמה הזו נוצר דיסק בגודל
20Gi(20 גיביבייט) בשםVM_NAME-boot-dvבאמצעות קובץ אימג' ציבורי של Ubuntu. בקטעspec.disksשל המכונה הווירטואלית, הדיסק מוגדר ל-boot: true.שומרים את המניפסט וסוגרים אותו בכלי העריכה.
יוצרים את המכונה הווירטואלית והדיסק באמצעות
kubectl:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIGמחליפים את הערך של
KUBECONFIGבנתיב לקובץ kubeconfig של האשכול.
דיסק קיים
בתרחיש הזה, יוצרים דיסק ריק ומצרפים אותו למכונה הווירטואלית. בתרחיש הזה אפשר ליצור דיסק נתונים לאחסון נתוני האפליקציה.
יוצרים מניפסט
VirtualMachine, כמו my-vm.yaml,בעורך לפי בחירתכם:nano my-vm.yamlמעתיקים ומדביקים את הגדרת ה-YAML הבאה:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: EXISTING_DISK_NAMEבדוגמה הזו מצורף דיסק קיים בשם
EXISTING_DISK_NAME.בקטע
spec.disksשל המכונה הווירטואלית, צריך גם לצרף דיסק אתחול, למשל מתמונה כמו שמוצג בקטע הקודם.שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית באמצעות
kubectl:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIGמחליפים את הערך של
KUBECONFIGבנתיב לקובץ kubeconfig של האשכול.
איתור דיסקים
החל מגרסה 1.13.0 של Google Distributed Cloud, כשיוצרים מכונה וירטואלית, VM Runtime ב-GDC משתמש בשמות הדיסקים שצוינו במשאב של המכונה הווירטואלית כדי להגדיר את המספרים הסידוריים של הדיסקים. באופן ספציפי, השמות שאתם מציינים באמצעות spec.disks.virtualMachineDiskName במשאב המותאם אישית VirtualMachine משמשים במספר הסידורי של הדיסקים. התכונה הזו מקלה על איתור הדיסקים במכונה הווירטואלית כשצריך לבצע פעולות בדיסק, כמו פורמט או הרכבה.
לדוגמה, אם יצרתם מכונה וירטואלית וציינתם דיסק אתחול בשם sample-boot-dv, משאב מותאם אישית VirtualMachine ייראה בערך כך:
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
osType: Linux
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
interfaces:
- name: eth0
networkName: pod-network
default: true
disks:
- boot: true
virtualMachineDiskName: sample-vm-boot-dv
- virtualMachineDiskName: attached-disk
במכונות וירטואליות של Linux, כשמתחברים ל-VM, אפשר להריץ את הפקודה הבאה כדי לקבל רשימה של הדיסקים לפי המספר הסידורי שלהם:
ls -l /dev/disk/by-id/
התגובה שלכם צריכה להיראות כמו הפלט שמופיע בדוגמה הזו, שבה שמות הדיסקים מופיעים כמספרים סידוריים:
total 0
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root 9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb
חשוב לשים לב להתנהגות התכונה במצבים הבאים:
- אם הערך של
virtualMachineDiskNameארוך מ-20 תווים, זמן הריצה של מכונה וירטואלית ב-GDC משתמש רק ב-20 התווים הראשונים כמספר הסידורי. - אם יש שני דיסקים עם אותם 20 התווים הראשונים, רק לדיסק הראשון יהיה מספר סידורי.
יצירה וצירוף של דיסקים למכונה וירטואלית קיימת
אם יש לכם מכונה וירטואלית קיימת, אתם יכולים ליצור דיסקים ולצרף אותם כדי לתמוך במחזורי החיים של האפליקציה. המכונה הווירטואלית צריכה להיות במצב מושבת לפני שמצרפים דיסק.
דיסק ריק
בתרחיש הזה, יוצרים דיסק ריק ומצרפים אותו למכונה הווירטואלית. בתרחיש הזה אפשר ליצור דיסק נתונים לאחסון נתוני האפליקציה.
משתמשים ב-
kubectlכדי לעצור את ה-VM, אם צריך:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של המכונה הווירטואלית שרוצים לעצור. -
KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.
-
עורכים את משאב מכונת ה-VM הקיים, כמו
my-vm:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIGמעדכנים את מניפסט ה-YAML
VirtualMachineכדי להוסיף קטעVirtualMachineDiskבחלק העליון, ואז מצרפים את הדיסק בסוף הקטעspec.disksשל מכונת ה-VM:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAMEבדוגמה הזו נוצר דיסק ריק בגודל
10Gi(10 גיביבייט) בשםDISK_NAME.שומרים וסוגרים את מניפסט מכונת ה-VM המעודכן בעורך.
משתמשים ב-
kubectlכדי להפעיל את המכונה הווירטואלית:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
מתוך תמונה
בתרחיש הזה, יוצרים דיסק מתמונה של מקור ומצרפים אותו למכונה הווירטואלית.
משתמשים ב-
kubectlכדי לעצור את ה-VM, אם צריך:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של המכונה הווירטואלית שרוצים לעצור. -
KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.
-
עורכים את משאב מכונת ה-VM הקיים, כמו
my-vm:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIGמעדכנים את המניפסט
VirtualMachineכדי להוסיף קטעVirtualMachineDiskבחלק העליון, ואז מצרפים את הדיסק בסוף הקטעspec.disksשל מכונת ה-VM:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi source: http: url: http://example.com/my-disk-img.qcow2 --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAMEבדוגמה הזו נוצר דיסק
10Gi(10 גיביבייט) בשםDISK_NAMEממקור HTTPhttp://example.com/my-disk-img.qcow2.שומרים וסוגרים את מניפסט מכונת ה-VM המעודכן בעורך.
משתמשים ב-
kubectlכדי להפעיל את המכונה הווירטואלית:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
יצירת דיסק
בתרחיש הזה, יוצרים את משאבי הדיסק בנפרד ממשאבי ה-VM. במקרה הזה, אתם יכולים ליצור דיסקים מראש ואז לצרף אותם למכונות וירטואליות לפי הצורך.
דיסק ריק
כדי ליצור דיסק ריק, מבצעים את השלבים הבאים.
יוצרים קובץ
VirtualMachineDiskמניפסט, כמו my-disk.yaml, בעורך לבחירתכם:nano my-disk.yamlמעתיקים ומדביקים את הגדרת ה-YAML הבאה:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Giבדוגמה הזו נוצר דיסק ריק בגודל
10Gi(10 גיביבייט) בשםDISK_NAME.שומרים את מניפסט הדיסק וסוגרים את העורך.
יוצרים את הדיסק באמצעות
kubectl:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIGמחליפים את הערך של
KUBECONFIGבנתיב לקובץ kubeconfig של האשכול.
מתוך תמונה
כדי ליצור דיסק מתמונה, מבצעים את השלבים הבאים.
יוצרים קובץ
VirtualMachineDiskmanifest, כמוmy-disk.yaml, בכלי העריכה הרצוי:nano my-disk.yamlמעתיקים ומדביקים את הגדרת ה-YAML הבאה:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.imgבדוגמה הזו נוצר דיסק בנפח
20Gi(20 גיביבייט) בשםDISK_NAMEבאמצעות קובץ אימג' ציבורי של Ubuntu.שומרים את מניפסט הדיסק וסוגרים את העורך.
יוצרים את הדיסק באמצעות
kubectl:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIGמחליפים את הערך של
KUBECONFIGבנתיב לקובץ kubeconfig של האשכול.
המאמרים הבאים
- יצירה ושימוש בפרטי כניסה לייבוא תמונות מ-Cloud Storage
- יצירה ושימוש בסוגי אחסון ב-Google Distributed Cloud
- כשמכונות וירטואליות או משאבי הדיסק הווירטואלי שלהן לא נחוצים יותר, אפשר למחוק מכונה וירטואלית ב-Google Distributed Cloud.