Mengelola virtual machine di server yang terhubung dengan Distributed Cloud

Halaman ini menjelaskan cara mengelola virtual machine di server yang terhubung ke Google Distributed Cloud yang menjalankan VM Runtime di Google Distributed Cloud. Anda harus memahami VM Runtime di GDC sebelum menyelesaikan langkah-langkah di halaman ini. Untuk mengetahui daftar sistem operasi tamu yang didukung, lihat Sistem operasi tamu yang terverifikasi untuk VM Runtime di GDC.

Untuk mempelajari cara virtual machine berfungsi sebagai komponen penting platform Distributed Cloud terhubung, lihat Memperluas GKE Enterprise untuk mengelola VM edge lokal.

Cluster Distributed Cloud yang terhubung mendukung webhook mesin virtual. Hal ini memungkinkan Distributed Cloud terhubung untuk memvalidasi permintaan pengguna yang dibuat ke server Kubernetes API lokal. Permintaan yang ditolak menghasilkan informasi mendetail tentang alasan penolakan.

Mengonfigurasi Penyimpanan Symcloud

Server Google Distributed Cloud yang terhubung menggunakan Rakuten Symcloud Storage, sebagai solusi penyimpanan mereka. Symcloud Storage adalah solusi pihak ketiga yang berfungsi sebagai lapisan abstraksi penyimpanan lokal di setiap node yang terhubung ke Distributed Cloud dan membuat penyimpanan lokalnya tersedia untuk beban kerja yang berjalan di node lain yang terhubung ke Distributed Cloud.

Symcloud Storage di-deploy dari Google Cloud Marketplace dan tunduk pada persyaratan yang dinyatakan di dalamnya. Google memberikan dukungan terbatas untuk penggunaan Symcloud Storage dengan Distributed Cloud yang terhubung dan dapat menghubungi penyedia pihak ketiga untuk mendapatkan bantuan. Update software untuk Symcloud Storage disertakan dalam update software Distributed Cloud yang terhubung.

Konfigurasi cluster Google Distributed Cloud terhubung Anda sebagai berikut untuk mengaktifkan Symcloud Storage untuk virtual machine:

  1. Buat namespace robinio dengan perintah berikut:

    kubectl create ns robinio
    
  2. Dapatkan file lisensi Symcloud Storage dan terapkan ke cluster dengan perintah berikut:

    kubectl apply LICENSE_FILE
    
  3. Pastikan Symcloud Storage sudah aktif dan berjalan dengan perintah berikut:

    kubectl apply LICENSE_FILE
    

    Perintah ini akan menampilkan output yang mirip dengan berikut ini:

     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
       
    
  4. Buat class penyimpanan robin-block-immediate dengan menerapkan konfigurasi berikut ke cluster:

    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
    
  5. Buat class snapshot volume robin-snapshotclass dengan menerapkan konfigurasi berikut ke cluster:

    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
    

Mengupgrade mesin virtual yang ada ke Distributed Cloud terhubung versi 1.7.0

Anda harus menambahkan hal berikut ke bagian spec resource VMRuntime di cluster Anda, lalu menerapkan resource yang diubah ke cluster sebelum mengupgrade cluster ke software yang terhubung dengan Distributed Cloud versi 1.7.0:

spec:
  haPolicy:
    defaultRecoveryStrategy: Reschedule
    nodeHeartbeatInterval: 15s
    nodeMonitorGracePeriod: 55s

Mengaktifkan dukungan VM Runtime di GDC pada Distributed Cloud terhubung

Secara default, dukungan Runtime VM di virtual machine GDC dinonaktifkan di Distributed Cloud yang terhubung. Untuk mengaktifkannya, selesaikan langkah-langkah di bagian ini. Petunjuk di bagian ini mengasumsikan bahwa Anda memiliki cluster yang terhubung Distributed Cloud yang berfungsi sepenuhnya.

Untuk mengaktifkan VM Runtime di subsistem virtual machine GDC, selesaikan langkah-langkah berikut:

  1. Ubah resource kustom VMRuntime dengan konten berikut dan terapkan ke cluster Anda:

    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

    Proses ini biasanya membutuhkan waktu beberapa menit hingga selesai.

  2. Gunakan perintah berikut untuk memverifikasi bahwa resource kustom VMRuntime telah diterapkan ke cluster Anda:

    kubectl get vmruntime
    

    Perintah ini menampilkan output yang mirip dengan contoh berikut:

    NAME        AGE   ENABLED   READY   PREFLIGHTCHECK
    vmruntime   5m   true      true    true
    
  3. Ubah storageprofile untuk kelas penyimpanan robin-block-immediate dengan konten berikut dan terapkan ke cluster Anda:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: robin-block-immediate
    spec:
      claimPropertySets:
        accessModes:
          ReadWriteMany
      volumeMode: Block

Instal alat pengelolaan virtctl

Anda memerlukan alat klien virtctl untuk mengelola virtual machine di cluster Distributed Cloud yang terhubung. Untuk menginstal alat, selesaikan langkah-langkah berikut:

  1. Instal alat klien virtctl sebagai plugin 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 -
  2. Pastikan plugin virt telah diinstal:

    kubectl plugin list

    Jika plugin berhasil diinstal, output perintah akan mencantumkan kubectl-virt sebagai salah satu plugin.

Membuat bucket Cloud Storage untuk image virtual machine

Selesaikan langkah-langkah di bagian ini untuk membuat bucket Cloud Storage bagi image mesin virtual Anda. Jika Anda sudah memiliki repositori image yang ditetapkan, lewati bagian ini.

  1. Selesaikan langkah-langkah di Membuat bucket untuk membuat bucket.

  2. Konfigurasi akun layanan dan kunci untuk mengakses bucket dengan perintah berikut:

    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"
  3. Buat secret di cluster untuk mengakses bucket. Jika bucket Anda bersifat publik, lewati langkah ini. Secret ini harus ada di namespace yang sama dengan disk mesin virtual Anda. Anda harus membuat secret di setiap namespace yang terpengaruh.

    kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE

    Ganti CLUSTER_ID dengan nama namespace target.

  4. Simpan gambar Anda di bucket.

Membuat disk virtual machine dari image virtual machine

Selesaikan langkah-langkah di bagian ini untuk membuat disk mesin virtual dari image mesin virtual.

Membuat disk dari image yang disimpan di Cloud Storage

Buat disk virtual machine dari virtual machine yang disimpan di bucket Cloud Storage Anda dengan menerapkan konfigurasi berikut ke cluster Anda:

 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

Ganti kode berikut:

  • DISK_NAME: nama disk virtual machine ini.
  • NAMESPACE: namespace target.
  • IMAGE_FILE: nama file image mesin virtual.
  • DISK_SIZE: ukuran disk yang diinginkan. Nilai ini harus lebih besar dari nilai virtual-size file image virtual machine. Anda dapat menemukan nilai ini dengan perintah qemu-img info DISK_SIZE.

Jika Anda tidak menentukan nilai storageClassName, nilai default yang ditentukan dalam resource VMRuntime akan digunakan.

Membuat disk dari image disk yang ada

Buat disk mesin virtual dari file image atau disk mesin virtual yang ada di cluster Anda sebagai berikut.

  1. Buat disk target dengan menerapkan konfigurasi berikut ke cluster Anda:

    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

    Ganti kode berikut:

    • IMAGE_DISK_NAME: nama disk virtual machine ini.
    • NAMESPACE: namespace target.
    • EXISTING_DISK_NAME: nama disk mesin virtual yang ada.
    • DISK_SIZE: ukuran disk yang diinginkan. Ukuran ini harus sama dengan atau lebih besar dari ukuran file disk atau image yang ada.

    Anda dapat memperoleh ukuran file disk atau image yang ada menggunakan alat qemu-img sebagai berikut:

    qemu-img info EXISTING_DISK_NAME

    Jika Anda tidak menentukan nilai storageClassName, nilai default yang ditentukan dalam resource VMRuntime akan digunakan.

  2. Buat disk baru dari file image yang ada dengan menerapkan konfigurasi berikut ke cluster Anda:

    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

    Ganti kode berikut:

    • IMAGE_DISK_NAME: nama disk mesin virtual yang Anda buat di langkah sebelumnya.
    • NAMESPACE: namespace target.
    • DISK_SIZE: ukuran disk yang diinginkan. Harus sama dengan ukuran disk virtual machine yang Anda buat di langkah sebelumnya.
  3. Ubah ukuran disk target ke ukuran yang diinginkan menggunakan perintah berikut:

    kubectl edit gdisk DISK_NAME -n NAMESPACE

    Ganti kode berikut:

    • DISK_NAME: nama disk mesin virtual yang Anda buat di langkah sebelumnya.
    • NAMESPACE: namespace target.
  4. Ubah nilai spec.size dalam konfigurasi disk dan terapkan ke cluster Anda.

Membuat disk kosong

Buat disk virtual machine kosong dengan menerapkan konfigurasi berikut ke cluster Anda:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   size: DISK_SIZE
   storageClassName: robin-block-immediate

Ganti kode berikut:

  • DISK_NAME: nama disk virtual machine ini.
  • NAMESPACE: namespace target.
  • DISK_SIZE: ukuran disk yang diinginkan dalam gibibyte. Nilai ini harus lebih besar dari nilai virtual-size file image virtual machine. Anda dapat menemukan nilai ini dengan perintah qemu-img info DISK_SIZE.

Jika Anda tidak menentukan nilai storageClassName, nilai default yang ditentukan dalam resource VMRuntime akan digunakan.

Mengonfigurasi jaringan virtual

Ikuti langkah-langkah di Networking untuk mengonfigurasi jaringan virtual bagi mesin virtual Anda.

Membuat virtual machine

Selesaikan langkah-langkah di bagian ini untuk membuat virtual machine di deployment server yang terhubung ke Distributed Cloud. Petunjuk di bagian ini adalah contoh yang dimaksudkan untuk mengilustrasikan konfigurasi untuk berbagai skenario. Untuk mengetahui informasi mendetail tentang cara mengonfigurasi mesin virtual, lihat Membuat VM dengan resource CPU dan memori tertentu menggunakan VM Runtime di GDC.

Membuat virtual machine dari image disk yang dapat di-boot

Untuk membuat mesin virtual dari disk image yang dapat di-boot, terapkan konfigurasi berikut ke cluster Anda:

 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

Ganti kode berikut:

  • DISK_NAME: nama disk virtual machine ini.
  • NAMESPACE: namespace target.

Membuat mesin virtual dari image disk optik ISO

Untuk membuat mesin virtual dari image disk optik ISO, selesaikan langkah-langkah di bagian Membuat VM Windows dari image ISO di Google Distributed Cloud.

Membuat mesin virtual dengan dukungan GPU

Selesaikan langkah-langkahnya

Mengakses virtual machine

Selesaikan langkah-langkah di bagian ini untuk mengakses virtual machine yang berjalan di deployment server yang terhubung ke Distributed Cloud Anda.

Mendapatkan kredensial akses

Selesaikan langkah-langkah di bagian ini untuk mendapatkan kredensial yang diperlukan guna mengakses virtual machine menggunakan fitur lingkungan tamu Linux.

  1. Aktifkan lingkungan tamu Linux untuk mesin virtual target dengan menerapkan konfigurasi berikut ke cluster Anda:

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: {}
     autoRestartOnConfigurationChange: true 
  2. Buat file id_rsa.pub yang berisi pasangan kunci SSH dengan perintah berikut:

    ssh-keygen -t rsa
  3. Buat resource VirtualMachineAccessRequest dengan menerapkan konfigurasi berikut ke cluster Anda:

    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

Ganti kode berikut:

  • RESOURCE_NAME: nama deskriptif untuk resource permintaan akses mesin virtual ini.
  • NAMESPACE: namespace target.
  • VM_NAME: nama virtual machine target.
  • USER_NAME: nama pengguna yang diberi akses.
  • RSA_KEY: konten file id_rsa.pub yang Anda buat pada langkah sebelumnya.
  1. Periksa status permintaan akses dengan perintah berikut:

    kubectl get vmar
    

    Saat perintah menampilkan status Configured, lanjutkan ke langkah berikutnya.

  2. Akses virtual machine dengan SSH atau Desktop Jarak Jauh:

    • Jika mesin virtual terhubung ke jaringan lokal, Anda dapat mengaksesnya secara langsung.
    • Jika mesin virtual terhubung ke jaringan Pod, Anda harus membuat layanan load balancer untuk mengakses port yang diperlukan.

Memulai, memulai ulang, atau menghentikan virtual machine

Gunakan perintah berikut untuk memulai, memulai ulang, atau menghentikan virtual machine:

  • Mulai virtual machine: kubectl virt start vmVM_NAME-nNAMESPACE
  • Mulai ulang virtual machine: kubectl virt restart vmVM_NAME-nNAMESPACE
  • Menghentikan virtual machine: kubectl virt stop vmVM_NAME-nNAMESPACE

Ganti kode berikut:

  • VM_NAME: nama virtual machine target.
  • NAMESPACE: namespace target.

Langkah berikutnya