Membuat dan mengelola disk virtual di Google Distributed Cloud

Dokumen ini ditujukan untuk pemilik aplikasi yang menjalankan Google Distributed Cloud. Dokumen ini menunjukkan cara membuat dan mengelola resource disk untuk virtual machine (VM) yang menggunakan Runtime VM di GDC.

Sebelum memulai

Untuk menyelesaikan dokumen ini, Anda memerlukan akses ke resource berikut:

Membuat VM dengan disk yang terpasang

Saat membuat VM, Anda dapat memasang disk data atau boot yang ada, membuat disk dari image (termasuk untuk disk boot), atau membuat disk kosong.

Blank disk

Dalam skenario ini, Anda akan membuat disk kosong dan melampirkannya ke VM. Skenario ini memungkinkan Anda membuat disk data untuk menyimpan data aplikasi.

  1. Buat manifes yang menentukan VirtualMachineDisk dan VirtualMachine, seperti my-vm.yaml, di editor pilihan Anda:

    nano my-vm.yaml
    
  2. Salin dan tempel definisi YAML berikut:

    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
    

    Ganti kode berikut:

    • DISK_NAME: nama disk kosong yang Anda buat dan lampirkan ke VM.

    • VM_NAME: nama VM yang Anda buat.

      Contoh ini membuat disk 10Gi (10 gibibyte) kosong bernama DISK_NAME. Di bagian spec.disks VM, Anda juga harus melampirkan disk booting, seperti dari image seperti yang ditunjukkan di bagian berikutnya.

  3. Simpan dan tutup file manifes di editor Anda.

  4. Buat VM dan disk menggunakan kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ganti KUBECONFIG dengan jalur ke file kubeconfig cluster.

Dari gambar

Dalam skenario ini, Anda membuat disk dari image dan melampirkannya ke VM. Skenario ini memungkinkan Anda membuat disk booting, misalnya, dari image. Anda juga dapat membuat dan melampirkan disk data dari image.

Sumber gambar yang didukung

Runtime VM di GDC memungkinkan berbagai format gambar dan mendukung tiga jenis sumber gambar yang dapat ditentukan dalam spesifikasi VirtualMachineDisk. Setiap contoh berikut membuat disk 20 gibibyte dari sumber gambar yang didukung yang berbeda.

  • Hypertext Transfer Protocol (HTTP)

    Contoh VirtualMachineDisk berikut menunjukkan struktur dasar untuk sumber gambar HTTP. Kolom url mengharapkan URL HTTP atau 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-shared
    
  • Cloud Storage

    Contoh berikut menunjukkan cara membuat disk dari image di bucket Cloud Storage. Jika kredensial default aplikasi di komputer tidak memadai untuk mengakses URL Cloud Storage, Anda harus memberikan kredensial. Dalam contoh berikut, my-gcs adalah secret yang berisi kunci akun layanan yang dienkode 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
    

    Jika menggunakan kunci akun layanan yang didownload untuk membuat cluster, Anda dapat menggunakan kunci akun layanan Container Registry untuk akses Cloud Storage. Jika membuat akun layanan terpisah untuk mengakses Cloud Storage, lihat Mengonfigurasi akun layanan yang dapat mengakses bucket Cloud Storage.

    Gunakan perintah berikut untuk membuat Secret Kubernetes dari file kunci akun layanan yang didownload:

    kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \
        --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • SECRET_NAME: nama untuk Secret Anda.
    • KEY_FILE: jalur ke file JSON kunci akun layanan yang didownload. Contoh, bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json.
    • KUBECONFIG: jalur ke file kubeconfig cluster.

    Untuk informasi selengkapnya tentang cara menggunakan kredensial untuk mengakses Cloud Storage, lihat Membuat dan menggunakan kredensial untuk mengimpor gambar dari Cloud Storage.

  • Contoh container registry

    Registry container yang mematuhi spesifikasi distribusi Open Container Initiative (OCI) didukung. Contoh berikut membuat disk dari image yang disimpan di registry 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
    

Format gambar yang valid

Anda dapat menggunakan salah satu format image berikut saat membuat disk dari image:

  • Arsip GNU zip (gzip) (.gz)
  • RAW (.raw, .img)
  • Image disk QEMU copy on write versi 2 (qcow2) (.qcow2)
  • Arsip terkompresi XZ (.xz)
  • File disk Virtual Machine (VMDK) (.vmdk)
  • File Virtual Disk Image (VDI) VirtualBox (.vdi)
  • File image Virtual Hard Disk (VHD) (.vdh)
  • File Virtual Hard Disk versi 2 (VDHX) (.vdhx)
  • File disk image ISO (.iso)

Contoh disk yang dibuat dari image HTTP

Langkah-langkah berikut membuat disk booting dari image Ubuntu:

  1. Buat manifes yang menentukan VirtualMachineDisk dan VirtualMachine, seperti my-vm.yaml, di editor pilihan Anda:

    nano my-vm.yaml
    
  2. Salin dan tempel definisi YAML berikut:

    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
    

    Contoh ini membuat disk 20Gi (20 gibibyte) bernama VM_NAME-boot-dv menggunakan image Ubuntu publik. Di bagian spec.disks VM, disk ditetapkan ke boot: true.

  3. Simpan dan tutup manifes di editor Anda.

  4. Buat VM dan disk menggunakan kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ganti KUBECONFIG dengan jalur ke file kubeconfig cluster.

Disk yang ada

Dalam skenario ini, Anda akan membuat disk kosong dan melampirkannya ke VM. Skenario ini memungkinkan Anda membuat disk data untuk menyimpan data aplikasi.

  1. Buat manifes VirtualMachine, seperti my-vm.yaml, di editor pilihan Anda:

    nano my-vm.yaml
    
  2. Salin dan tempel definisi YAML berikut:

    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
    

    Contoh ini melampirkan disk yang ada bernama EXISTING_DISK_NAME.

    Di bagian spec.disks VM, Anda juga harus memasang disk booting, seperti dari image seperti yang ditunjukkan di bagian sebelumnya.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM menggunakan kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ganti KUBECONFIG dengan jalur ke file kubeconfig cluster.

Menemukan disk

Mulai Google Distributed Cloud versi 1.13.0, saat Anda membuat VM, VM Runtime di GDC menggunakan nama disk yang Anda tentukan di resource VM untuk menetapkan nomor seri disk. Secara khusus, nama yang Anda tentukan dengan spec.disks.virtualMachineDiskName di resource kustom VirtualMachine digunakan dalam nomor seri untuk disk. Fitur ini memudahkan Anda menemukan disk di VM saat perlu melakukan operasi disk, seperti pemformatan atau pemasangan.

Misalnya, jika Anda membuat VM dan menentukan boot disk bernama sample-boot-dv, resource kustom VirtualMachine Anda akan terlihat seperti ini:

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

Untuk VM Linux, saat login ke VM, Anda dapat menjalankan perintah berikut untuk mencantumkan disk berdasarkan nomor serinya:

ls -l /dev/disk/by-id/

Respons Anda akan terlihat seperti contoh output ini, dengan nama disk muncul sebagai nomor seri:

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

Perhatikan perilaku fitur situasional berikut:

  • Jika nilai virtualMachineDiskName lebih dari 20 karakter, Runtime VM di GDC hanya menggunakan 20 karakter pertama sebagai nomor serial.
  • Jika ada dua disk dengan 20 karakter pertama yang sama, hanya disk pertama yang akan memiliki nomor seri.

Membuat dan memasang disk ke VM yang ada

Jika sudah memiliki VM, Anda dapat membuat dan memasang disk untuk mendukung siklus proses aplikasi. VM harus dalam status dihentikan sebelum Anda memasang disk.

Blank disk

Dalam skenario ini, Anda akan membuat disk kosong dan melampirkannya ke VM. Skenario ini memungkinkan Anda membuat disk data untuk menyimpan data aplikasi.

  1. Gunakan kubectl untuk menghentikan VM, jika diperlukan:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • VM_NAME: nama VM yang ingin Anda hentikan.
    • KUBECONFIG: jalur ke file kubeconfig cluster.
  2. Edit resource VM yang ada, seperti my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Perbarui manifes YAML VirtualMachine untuk menambahkan bagian VirtualMachineDisk di bagian atas, lalu lampirkan disk di akhir bagian 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
    

    Contoh ini membuat disk 10Gi (10 gibibyte) kosong bernama DISK_NAME.

  4. Simpan dan tutup manifes VM yang diperbarui di editor Anda.

  5. Gunakan kubectl untuk memulai VM:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Dari gambar

Dalam skenario ini, Anda membuat disk dari image sumber dan melampirkannya ke VM.

  1. Gunakan kubectl untuk menghentikan VM, jika diperlukan:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • VM_NAME: nama VM yang ingin Anda hentikan.
    • KUBECONFIG: jalur ke file kubeconfig cluster.
  2. Edit resource VM yang ada, seperti my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Perbarui manifes VirtualMachine untuk menambahkan bagian VirtualMachineDisk di bagian atas, lalu lampirkan disk di akhir bagian 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
    

    Contoh ini membuat disk 10Gi (10 gibibyte) bernama DISK_NAME dari sumber HTTP http://example.com/my-disk-img.qcow2.

  4. Simpan dan tutup manifes VM yang diperbarui di editor Anda.

  5. Gunakan kubectl untuk memulai VM:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Buat disk

Dalam skenario ini, Anda membuat resource disk secara terpisah dari resource VM. Skenario ini memungkinkan Anda membuat disk terlebih dahulu, lalu memasangnya ke VM sesuai kebutuhan.

Blank disk

Untuk membuat disk kosong, selesaikan langkah-langkah berikut.

  1. Buat manifes VirtualMachineDisk, seperti my-disk.yaml, di editor pilihan Anda:

    nano my-disk.yaml
    
  2. Salin dan tempel definisi YAML berikut:

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

    Contoh ini membuat disk 10Gi (10 gibibyte) kosong bernama DISK_NAME.

  3. Simpan dan tutup manifes disk di editor Anda.

  4. Buat disk menggunakan kubectl:

    kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
    

    Ganti KUBECONFIG dengan jalur ke file kubeconfig cluster.

Dari gambar

Untuk membuat disk dari image, selesaikan langkah-langkah berikut.

  1. Buat manifes VirtualMachineDisk, seperti my-disk.yaml, di editor pilihan Anda:

    nano my-disk.yaml
    
  2. Salin dan tempel definisi YAML berikut:

    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
    

    Contoh ini membuat disk 20Gi (20 gibibyte) bernama DISK_NAME menggunakan image Ubuntu publik.

  3. Simpan dan tutup manifes disk di editor Anda.

  4. Buat disk menggunakan kubectl:

    kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
    

    Ganti KUBECONFIG dengan jalur ke file kubeconfig cluster.

Langkah selanjutnya