Mengelola virtual machine di rak yang terhubung ke Distributed Cloud

Halaman ini menjelaskan cara mengelola virtual machine di rak 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.

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.

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

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds;
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    Jangan ubah nilai parameter vmImageFormat. Distributed Cloud Connected tidak mendukung format disk virtual lainnya.

    Proses ini biasanya membutuhkan waktu beberapa menit hingga selesai.

    Jangan ubah nilai parameter vmImageFormat. Distributed Cloud Connected tidak mendukung format disk virtual lainnya.

    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 -o yaml

    Perintah ini menampilkan output yang mirip dengan contoh berikut:

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. Gunakan perintah berikut untuk memverifikasi bahwa dukungan mesin virtual VM Runtime di GDC telah diaktifkan di cluster Anda:

    kubectl get pods -n vm-system

    Perintah ini menampilkan output yang menunjukkan Pod subsistem VM Runtime di GDC yang berjalan di cluster Anda, mirip dengan contoh berikut:

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

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.

Menyediakan virtual machine di Distributed Cloud terhubung

Bagian ini memberikan contoh konfigurasi yang menggambarkan cara menyediakan mesin virtual Linux dan mesin virtual Windows di cluster yang terhubung Distributed Cloud dengan lapisan abstraksi Symcloud Storage.

Perhatikan bahwa Anda tidak dapat membuat virtual machine di cluster yang terhubung ke Distributed Cloud secara langsung dengan menggunakan perintah kubectl virt karena Distributed Cloud yang terhubung tidak menyediakan penyimpanan sistem file untuk virtual machine.

Sebelum menyelesaikan langkah-langkah di bagian ini, Anda harus menyelesaikan langkah-langkah di bagian Mengonfigurasi Distributed Cloud yang terhubung untuk Symcloud Storage terlebih dahulu. Jika Anda menonaktifkan Symcloud Storage di cluster nanti, virtual machine yang dikonfigurasi untuk menggunakan Symcloud Storage akan gagal.

Menyediakan mesin virtual Linux di Distributed Cloud terhubung

Contoh berikut mengilustrasikan cara menyediakan virtual machine Linux dengan Symcloud Storage yang menjalankan Ubuntu Server 22.04. Sumber penginstalan adalah image disk ISO Ubuntu Server 22.04.

  1. Buat resource VirtualMachineDisk dengan konten berikut untuk image disk penginstalan Ubuntu Server, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. Buat resource VirtualMachineDisk dengan konten berikut untuk hard disk virtual mesin virtual, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. Buat resource VirtualMachineType dengan konten berikut yang menentukan konfigurasi virtual machine, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. Buat resource VirtualMachine dengan konten berikut yang meng-instansiasi dan memulai mesin virtual di cluster, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    Anda juga harus mengonfigurasi fitur berikut di cluster:

  5. Instal Ubuntu Server di virtual machine:

    1. Tunggu hingga Pod importer mendownload image disk penginstalan Ubuntu Server.
    2. Periksa status mesin virtual:

      kubectl get gvm VM_NAME

      Ganti VM_NAME dengan nama virtual machine—ubu-vm dalam contoh ini.

    3. Login ke virtual machine menggunakan SSH atau Remote Desktop.

    4. Selesaikan langkah-langkah penginstalan Ubuntu Linux.

  6. Pembersihan:

    1. Hentikan mesin virtual:

      kubectl virt stop VM_NAME

      Ganti VM_NAME dengan nama virtual machine—ubu-vm dalam contoh ini.

    2. Edit file YAML mesin virtual untuk menghapus referensi ke image disk penginstalan:

      kubectl edit gvm VM_NAME

      Ganti VM_NAME dengan nama virtual machine—ubu-vm dalam contoh ini.

    3. Mulai virtual machine:

      kubectl virt start VM_NAME

      Ganti VM_NAME dengan nama virtual machine—ubu-vm dalam contoh ini.

    4. Hapus resource VirtualMachineDisk untuk image disk penginstalan:

      kubectl delete virtualmachinedisk ubuntu-iso-disk

Menyediakan mesin virtual Windows di Distributed Cloud terhubung

Contoh berikut mengilustrasikan cara menyediakan mesin virtual Windows dengan Symcloud Storage. Langkah-langkahnya serupa dengan penyediaan virtual machine Linux, dengan penambahan image disk driver virtio, yang diperlukan untuk menginstal Windows.

  1. Dapatkan salinan Windows berlisensi dan image media penginstalannya.

  2. Buat resource VirtualMachineDisk dengan konten berikut untuk image disk penginstalan Windows, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    Ganti NAT_GATEWAY dengan URL lengkap ke image disk ISO penginstalan Windows target.

  3. Buat resource VirtualMachineDisk dengan konten berikut untuk driver virtio, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. Buat resource VirtualMachineDisk dengan konten berikut untuk hard disk virtual mesin virtual, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. Buat resource VirtualMachineType dengan konten berikut yang menentukan konfigurasi virtual machine, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. Buat resource VirtualMachine dengan konten berikut yang meng-instansiasi dan memulai virtual machine di cluster, lalu terapkan ke cluster Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    Anda juga harus mengonfigurasi fitur berikut di cluster:

  7. Instal Windows di virtual machine:

    1. Tunggu hingga Pod importer mendownload image disk penginstalan Windows.
    2. Periksa status mesin virtual:

      kubectl get gvm VM_NAME

      Ganti VM_NAME dengan nama virtual machine—win-vm dalam contoh ini.

    3. Selesaikan penginstalan Windows dengan mengikuti langkah-langkah di Menghubungkan ke VM Windows dan menyelesaikan penginstalan OS.

  8. Pembersihan:

    1. Hentikan mesin virtual:

      kubectl virt stop VM_NAME

      Ganti VM_NAME dengan nama virtual machine—win-vm dalam contoh ini.

    2. Selesaikan langkah-langkah di Lepaskan disk driver dan image ISO.

Mengelola virtual machine yang berjalan di Distributed Cloud terhubung

Untuk mengetahui petunjuk tentang cara mengelola mesin virtual yang berjalan di Distributed Cloud terhubung, lihat dokumentasi VM Runtime di GDC berikut:

Untuk mengelola virtual machine yang berjalan di Distributed Cloud terhubung, Anda harus Mengonfigurasi konektivitas kubectl terlebih dahulu.

Menonaktifkan VM Runtime di GDC di Distributed Cloud terhubung

Ikuti langkah-langkah di bagian ini untuk menonaktifkan VM Runtime di GDC on Distributed Cloud connected. Sebelum dapat menonaktifkan VM Runtime di GDC on Distributed Cloud connected, Anda harus menghentikan dan menghapus semua mesin virtual di cluster Distributed Cloud connected seperti yang dijelaskan dalam Menghapus VM.

Untuk menonaktifkan VM Runtime di GDC yang terhubung ke Distributed Cloud, ubah resource kustom VMRuntime dengan menyetel parameter spesifikasi enabled ke false seperti berikut, lalu terapkan ke cluster Anda:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

Melihat log audit pengujian AppArmor

Distributed Cloud yang terhubung secara otomatis melakukan sandbox pada beban kerja virtual machine dengan kebijakan AppArmor di audit-mode. Pelanggaran kebijakan akan memunculkan entri log audit. Contoh:

{
  "jsonPayload": {
    "_SOURCE_REALTIME_TIMESTAMP": "1734596844149104",
    "SYSLOG_TIMESTAMP": "Dec 19 08:27:24 ",
    "MESSAGE": "type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"",
    "PRIORITY": "6",
    ...
    "SYSLOG_RAW": "<14>Dec 19 08:27:24 audisp-syslog: type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"\n",
    "SYSLOG_IDENTIFIER": "audisp-syslog",
    "_GID": "0",
  },
  "timestamp": "2024-12-19T08:27:24.149109Z",
  "labels": {
    "gke.googleapis.com/log_type": "system"
  },
  "receiveTimestamp": "2024-12-19T08:27:24.721842807Z"
  ...
  ...

Langkah berikutnya