Menggunakan VM bertingkat dengan cluster GKE

Anda dapat membuat instance virtual machine (VM) di dalam VM lain menggunakan virtualisasi bertingkat. Compute Engine menambahkan petunjuk virtualisasi ke seri mesin tertentu sehingga instance VM tersebut dapat membuat VM bertingkat. Karena Google Kubernetes Engine (GKE) node 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 harus 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 menggunakan software seperti QEMU atau Kata Containers.

Di GKE, VM bertingkat berguna untuk kasus penggunaan berikut:

  • Menjalankan 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 Agent Sandbox di GKE.
  • Menambahkan lapisan isolasi yang dibantu hardware untuk workload multi-tenant.
  • Menjalankan 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. Jumlah dampak performa bergantung pada profil workload tertentu, termasuk karakteristik penggunaan I/O dan memori.

Selain itu, pembuatan VM bertingkat di VM yang mendasari node GKE dapat memengaruhi performa workload 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
  • Jika ingin 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 perintah yang dijalankan 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 jumlah seri mesin VM yang terbatas. Lihat baris Virtualisasi bertingkat dari 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 menetapkan securityContext.privileged:true agar Pod dapat berinteraksi dengan VM bertingkat.
  • Jika Anda menggunakan GKE Autopilot, Anda tidak dapat membuat node Pod yang memiliki hak istimewa kecuali dalam skenario berikut:

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

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

  • Jika Anda menggunakan ComputeClasses 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 ComputeClasses: 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 failover di beberapa konfigurasi node yang diprioritaskan.
  • Menggunakan GKE API: dalam mode Standard, gunakan klien seperti Google Cloud konsol, gcloud CLI, atau Terraform untuk membuat node pool tertentu yang menggunakan virtualisasi bertingkat.

Mengaktifkan dengan menggunakan ComputeClasses

Anda dapat menggunakan ComputeClass untuk mengaktifkan virtualisasi bertingkat untuk grup node tertentu dalam mode Autopilot atau Standard. ComputeClasses adalah satu-satunya metode yang dapat Anda gunakan untuk mengaktifkan virtualisasi bertingkat untuk node pool yang dibuat secara 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 diberi nama 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:

    • Memprioritaskan instance C3 di Spot VM, melakukan failover ke instance C4 sesuai permintaan, lalu melakukan failover ke instance C4D di Spot VM.
    • Mengaktifkan virtualisasi bertingkat untuk semua instance.
    • Menghentikan GKE untuk melakukan penskalaan otomatis pada seri mesin default cluster jika instance yang diprioritaskan tidak tersedia.
    • Menggunakan image node Container-Optimized OS untuk semua node.
    • Mengaktifkan pembuatan node pool otomatis, 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 kompatibilitas 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 diberi nama 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 Standard yang ada.

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

Konsol

  • Mengaktifkan virtualisasi bertingkat untuk node pool default cluster baru:

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

      Buka Membuat cluster Kubernetes

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

    1. Di Google Cloud konsol, 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 judul bagian Node pools, klik Create user-managed node pool.

    6. Di menu navigasi, pilih Nodes.

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

    8. Centang kotak Enable nested virtualization. Jika kotak centang ini dinonaktifkan, pastikan Anda memilih seri mesin yang mendukung virtualisasi bertingkat.

    9. Klik Create.

gcloud

  • Mengaktifkan 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 nested-virtualization=enabled Kubernetes, 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 memiliki hak istimewa dengan mengonfigurasi securityContext.privileged:true.

Langkah berikutnya