Membuat dan mengelola disk virtual di GKE pada Bare Metal

Dokumen ini ditujukan bagi pemilik aplikasi yang menjalankan GKE di Bare Metal. Dokumen ini menunjukkan cara membuat dan mengelola resource disk untuk mesin virtual (VM) yang menggunakan Runtime VM di GDC.

Sebelum memulai

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

Membuat VM dengan disk yang terpasang

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

Blank disk

Dalam skenario ini, Anda membuat disk kosong dan memasangnya 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 pasang ke VM.

    • VM_NAME: nama VM yang Anda buat.

      Contoh ini akan membuat disk 10Gi (10 gibibyte) kosong yang bernama DISK_NAME. Di bagian spec.disks VM, Anda juga harus memasang boot disk, misalnya dari gambar 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 akan membuat disk dari image dan memasangnya ke VM. Skenario ini memungkinkan Anda membuat boot disk, misalnya, dari gambar. Anda juga dapat membuat dan memasang 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 lain yang didukung.

  • {i>Hypertext Transfer Protocol<i} (HTTP)

    Contoh VirtualMachineDisk berikut menunjukkan struktur dasar 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. Pada contoh berikut, my-gcs adalah rahasia yang berisi kunci akun layanan berenkode 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 Anda 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 telah 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 mengetahui informasi lebih lanjut tentang penggunaan kredensial untuk mengakses Cloud Storage, lihat Membuat dan menggunakan kredensial untuk mengimpor gambar dari Cloud Storage.

  • Contoh container registry

    Registry container yang mematuhi distribution-spec 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 gambar berikut saat membuat disk dari image:

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

Contoh disk yang dibuat dari image HTTP

Langkah-langkah berikut akan membuat boot disk 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 akan membuat disk 20Gi (20 gibibyte) bernama VM_NAME-boot-dv menggunakan image Ubuntu publik. Di bagian spec.disks VM, disk disetel 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 membuat disk kosong dan memasangnya 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 boot disk, 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 dari GKE pada Bare Metal versi 1.13.0, saat Anda membuat VM, VM Runtime di GDC menggunakan nama disk yang Anda tentukan dalam resource VM untuk menetapkan nomor seri disk. Secara khusus, nama yang Anda tentukan dengan spec.disks.virtualMachineDiskName dalam resource kustom VirtualMachine digunakan dalam nomor seri untuk disk. Fitur ini memudahkan Anda menemukan disk di VM saat Anda perlu menjalankan 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 menampilkan 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 akan menggunakan 20 karakter pertama sebagai nomor seri.
  • 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 Anda. VM harus dalam status berhenti sebelum Anda memasang disk.

Blank disk

Dalam skenario ini, Anda membuat disk kosong dan memasangnya 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 cluster kubeconfig.
  2. Edit resource VM yang ada, misalnya my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Perbarui manifes YAML VirtualMachine untuk menambahkan bagian VirtualMachineDisk di bagian atas, lalu pasang 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 akan membuat disk 10Gi (10 gibibyte) kosong yang bernama DISK_NAME.

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

  5. Gunakan kubectl untuk memulai VM:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Dari gambar

Dalam skenario ini, Anda akan 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 cluster kubeconfig.
  2. Edit resource VM yang ada, misalnya my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Update manifes VirtualMachine untuk menambahkan bagian VirtualMachineDisk di bagian atas, lalu pasang 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 diupdate 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 akan membuat disk 10Gi (10 gibibyte) kosong yang 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 akan 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