Menggunakan VM bertingkat dengan cluster GKE

Anda dapat membuat instance virtual machine (VM) di dalam VM lain menggunakan virtualisasi bertingkat. Compute Engine menambahkan instruksi virtualisasi ke seri mesin tertentu sehingga instance VM tersebut dapat membuat VM bertingkat. Karena node Google Kubernetes Engine (GKE) berjalan di VM Compute Engine, workload GKE Anda dapat membuat dan menggunakan VM bertingkat. Dokumen ini menunjukkan cara mengaktifkan virtualisasi bertingkat di GKE.

Cara kerja VM bertingkat di GKE

Untuk menggunakan VM bertingkat di GKE, Anda mengaktifkan virtualisasi bertingkat untuk node atau node pool tertentu. Ekstensi virtualisasi CPU yang sesuai, seperti Intel Virtualization Technology (VT-x) atau AMD Virtualization (AMD-V) diaktifkan di VM yang mendasarinya. Kemudian, Anda dapat memicu pembuatan VM bertingkat dari Pod dengan menggunakan software seperti QEMU atau Kata Containers.

Di GKE, VM bertingkat berguna untuk kasus penggunaan berikut:

  • Jalankan kode yang tidak tepercaya seperti agen AI di VM ringan, seperti Kata Containers. Untuk mengetahui informasi selengkapnya tentang kasus penggunaan ini, lihat Menggunakan Kata Containers open source dengan GKE Agent Sandbox.
  • Menambahkan lapisan isolasi yang dibantu hardware untuk workload multi-tenant.
  • Jalankan software khusus seperti emulator Android di cloud.

Implikasi performa yang berkurang

Dengan virtualisasi bertingkat yang dibantu hardware, workload yang berjalan di VM bertingkat mungkin mengalami penurunan performa jika dibandingkan dengan konfigurasi virtualisasi non-bertingkat. Besarnya dampak performa bergantung pada profil workload tertentu, termasuk karakteristik penggunaan I/O dan memori.

Selain itu, membuat VM bertingkat di VM pokok node GKE dapat memengaruhi performa beban kerja lain yang berjalan di node tersebut.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Persyaratan dan batasan

Pertimbangkan informasi berikut sebelum mengaktifkan virtualisasi bertingkat dengan GKE dan mengizinkan Pod Anda membuat VM bertingkat:

  • Anda hanya dapat mengonfigurasi node pool dengan VM bertingkat dengan sejumlah seri mesin VM yang terbatas. Lihat baris Virtualisasi bertingkat pada Perbandingan seri mesin untuk mengonfirmasi seri mesin yang didukung.
  • Virtualisasi bertingkat tidak didukung di node pool Windows Server.
  • Anda tidak dapat menggunakan virtualisasi bertingkat jika batasan Nonaktifkan virtualisasi bertingkat VM diterapkan untuk kebijakan organisasi Anda.
  • Anda harus menyetel securityContext.privileged:true untuk Pod agar dapat berinteraksi dengan VM bertingkat.
  • Jika menggunakan GKE Autopilot, Anda tidak dapat membuat node Pod istimewa kecuali dalam skenario berikut:

  • Anda tidak dapat mengaktifkan virtualisasi bertingkat di node pool yang sudah ada.

  • Virtualisasi bertingkat adalah setelan yang tidak dapat diubah di GKE.

  • Jika Anda menggunakan ComputeClass untuk mengaktifkan virtualisasi bertingkat, cluster Anda harus menjalankan GKE versi 1.37.0-gke.4713000 atau yang lebih baru.

Mengaktifkan virtualisasi bertingkat

Bagian berikut menunjukkan cara mengaktifkan virtualisasi bertingkat di GKE dengan cara berikut:

  • Menggunakan ComputeClass: dalam mode Autopilot atau mode standar, aktifkan virtualisasi bertingkat untuk konfigurasi node tertentu di ComputeClass. Dengan menggunakan metode ini, Anda dapat mengaktifkan virtualisasi bertingkat di node pool yang dibuat secara otomatis dan melakukan penggantian di beberapa konfigurasi node yang diprioritaskan.
  • Gunakan GKE API: dalam mode Standar, gunakan klien seperti konsol Google Cloud , gcloud CLI, atau Terraform untuk membuat node pool tertentu yang menggunakan virtualisasi bertingkat.

Diaktifkan dengan menggunakan ComputeClasses

Anda dapat menggunakan ComputeClass untuk mengaktifkan virtualisasi bertingkat untuk grup node tertentu dalam mode Autopilot atau Standard. ComputeClass adalah satu-satunya metode yang dapat Anda gunakan untuk mengaktifkan virtualisasi bertingkat untuk node pool yang dibuat otomatis dan node Autopilot. Untuk men-deploy contoh ComputeClass yang mengaktifkan virtualisasi bertingkat, ikuti langkah-langkah berikut:

  1. Simpan manifes ComputeClass berikut sebagai file yang bernama nested-virt-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: nested-virt-class
    spec:
      priorities:
      - machineFamily: c3
        spot: true
        enableNestedVirtualization: true
      - machineFamily: c4
        spot: false
        enableNestedVirtualization: true
      - machineFamily: c4d
        spot: true
        enableNestedVirtualization: true
      nodePoolConfig:
        imageType: "cos_containerd"
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    

    Contoh ComputeClass ini memiliki properti berikut:

    • Membuat prioritas instance C3 di Spot VM, beralih kembali ke instance C4 on-demand, lalu beralih kembali ke instance C4D di Spot VM.
    • Mengaktifkan virtualisasi bertingkat untuk semua instance.
    • Mencegah GKE menskalakan seri mesin default cluster jika instance yang diprioritaskan tidak tersedia.
    • Menggunakan image node Container-Optimized OS untuk semua node.
    • Mengaktifkan pembuatan otomatis node pool, sehingga GKE dapat membuat node pool baru untuk menjalankan Pod jika diperlukan.

    Atau, Anda dapat mengaktifkan virtualisasi bertingkat untuk semua aturan prioritas di ComputeClass dengan menentukan kolom enableNestedVirtualization: true di kolom spec.priorityDefaults.

  2. Buat ComputeClass:

    kubectl apply -f nested-virt-class.yaml
    

    Saat Anda mengaktifkan virtualisasi bertingkat di ComputeClass, GKE akan memeriksa seri mesin yang ditentukan untuk mengetahui kompatibilitasnya dengan VM bertingkat. Jika seri mesin dalam aturan prioritas yang mengaktifkan virtualisasi bertingkat tidak kompatibel, GKE akan memperingatkan Anda. Namun, pemeriksaan ini mungkin tidak menemukan setiap konfigurasi yang tidak kompatibel.

  3. Untuk memicu pembuatan node pool, buat Pod yang memilih ComputeClass:

    1. Simpan manifes Pod berikut sebagai file yang bernama nested-virt-example-pod.yaml:

      apiVersion: v1
      kind: Pod
      metadata:
        name: nested-virt-example-pod
      spec:
        nodeSelector:
          cloud.google.com/compute-class: nested-virt-class
        containers:
        - name: example-container
          image: registry.k8s.io/pause:3.9
      
    2. Buat Pod:

      kubectl apply -f nested-virt-example-pod.yaml
      

Node yang dibuat GKE untuk ComputeClass ini mengaktifkan virtualisasi bertingkat. Anda dapat menjalankan aplikasi yang membuat VM bertingkat di node ini. Setiap Pod yang menggunakan ComputeClass dapat membuat VM bertingkat. Misalnya, Anda dapat menginstal Kata Containers di node ini dengan menentukan pemilih node untuk label cloud.google.com/compute-class="nested-virt-class".

Mengaktifkan di node pool Standard

Jika tidak ingin menggunakan ComputeClasses, Anda dapat mengaktifkan virtualisasi bertingkat secara manual untuk node pool baru tertentu di cluster Standard selama salah satu operasi berikut:

  • Saat Anda membuat cluster Standard baru, yang mengaktifkan virtualisasi bertingkat untuk node pool default. Pengaktifan ini hanya berlaku untuk node pool default. GKE tidak otomatis mengaktifkan virtualisasi bertingkat untuk node pool tambahan yang Anda buat nanti.
  • Saat Anda membuat node pool baru di cluster Standar yang ada.

Untuk mengaktifkan virtualisasi bertingkat di node pool yang dibuat secara manual, pilih salah satu opsi berikut:

Konsol

  • Aktifkan virtualisasi bertingkat untuk node pool default cluster baru:

    1. Di konsol Google Cloud , buka halaman Create a Kubernetes cluster.

      Buka Membuat cluster Kubernetes

    2. Konfigurasi setelan dasar untuk cluster Anda.
    3. Di menu navigasi, di bagian Node pools, luaskan bagian default-pool, lalu klik Nodes.
    4. Di bagian Konfigurasi mesin, pilih jenis mesin yang didukung (lihat baris Virtualisasi bertingkat).
    5. Setelah bagian Reservations, centang kotak Enable nested virtualization.
    6. Untuk membuat cluster, klik Buat.
  • Mengaktifkan virtualisasi bertingkat untuk node pool baru di cluster yang ada:

    1. Di konsol Google Cloud , buka halaman Kubernetes clusters.

      Buka cluster Kubernetes

    2. Klik nama cluster tempat Anda ingin membuat node pool baru.

    3. Konfigurasikan node pool Anda.

    4. Klik tab Nodes.

    5. Di heading bagian Node pool, klik Buat node pool yang dikelola pengguna.

    6. Di menu navigasi, pilih Node.

    7. Di bagian Konfigurasi mesin, pilih seri mesin yang mendukung virtualisasi bertingkat. Untuk mengetahui informasi selengkapnya, filter tabel perbandingan seri mesin untuk properti Virtualisasi bertingkat.

    8. Centang kotak Aktifkan virtualisasi bertingkat. Jika kotak centang ini dinonaktifkan, pastikan Anda memilih rangkaian mesin yang mendukung virtualisasi bertingkat.

    9. Klik Create.

gcloud

  • Aktifkan virtualisasi bertingkat untuk node pool default cluster baru:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
        --enable-nested-virtualization \
        --node-labels=nested-virtualization=enabled \
        --machine-type=MACHINE_TYPE
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama untuk cluster.
    • CONTROL_PLANE_LOCATION: region atau zona untuk bidang kontrol cluster.
    • MACHINE_TYPE: jenis mesin yang mendukung virtualisasi bertingkat, seperti n4-standard-8. Untuk mengetahui informasi selengkapnya, filter tabel perbandingan seri mesin untuk properti Virtualisasi bertingkat.
  • Mengaktifkan virtualisasi bertingkat untuk node pool baru di cluster yang ada:

    gcloud container node-pools create NODEPOOL_NAME \
        --enable-nested-virtualization \
        --node-labels=nested-virtualization=enabled \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --machine-type=MACHINE_TYPE
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama untuk node pool.
    • CLUSTER_NAME: nama cluster yang ada.
    • CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster.
    • MACHINE_TYPE: jenis mesin yang mendukung virtualisasi bertingkat, seperti n4-standard-8. Untuk mengetahui informasi selengkapnya, filter tabel perbandingan seri mesin untuk properti Virtualisasi bertingkat.

Setelah membuat cluster atau node pool, Anda dapat memeriksa apakah virtualisasi bertingkat diaktifkan. Node di node pool ini memiliki label node Kubernetes nested-virtualization=enabled, yang dapat Anda gunakan untuk menjadwalkan Pod yang membuat VM bertingkat.

Menjadwalkan Pod ke node yang mendukung virtualisasi bertingkat

Untuk menjadwalkan Pod di node dengan virtualisasi bertingkat yang diaktifkan, tambahkan pemilih node berikut ke spesifikasi:

nodeSelector:
  nested-virtualization: enabled

Selain itu, agar Pod dapat terhubung dengan VM bertingkat, Anda harus menetapkan Pod sebagai hak istimewa dengan mengonfigurasi securityContext.privileged:true.

Langkah berikutnya