Menjadwalkan VM yang menggunakan Runtime VM di GDC

Dokumen ini ditujukan untuk pemilik aplikasi dan administrator platform yang menjalankan Google Distributed Cloud. Dokumen ini menunjukkan cara menggunakan konfigurasi jadwal seperti afinitas dan anti-afinitas untuk VM yang menggunakan VM Runtime di GDC.

Sebelum memulai

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

Ringkasan konfigurasi jadwal

Konfigurasi jadwal adalah nilai opsional di Runtime VM di GDC. Jika tidak ada konfigurasi penjadwalan yang ditentukan, VM akan ditetapkan secara default ke perilaku penjadwalan default Kubernetes.

Dengan perilaku penjadwalan default, VM tersebar di seluruh cluster Anda. Penjadwal akan melihat ketersediaan resource node saat ini, seperti CPU dan memori, serta menjadwalkan VM di node untuk mendistribusikan permintaan komputasi. Jika tidak memiliki persyaratan tertentu, Anda tidak perlu menentukan konfigurasi jadwal apa pun.

Tiga kolom berikut tersedia untuk menjadwalkan VM:

  • nodeSelector: menentukan label node yang harus dimiliki node host VM. Runtime VM di GDC menjadwalkan VM hanya pada node yang memiliki label yang ditentukan.
  • Afinitas: menentukan aturan afinitas VM. Ini mencakup afinitas node dan afinitas antar-VM atau anti-afinitas. Anda menentukan persyaratan lunak atau keras untuk penjadwal:
    • preferredDuringSchedulingIgnoredDuringExecution: adalah persyaratan tidak wajib. Penjadwal mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM mungkin dijadwalkan di node yang tidak diinginkan.
    • requiredDuringSchedulingIgnoredDuringExecution: adalah persyaratan wajib. Penjadwal akan mencoba memenuhi permintaan Anda. Jika tidak ada node yang tersedia yang cocok dengan persyaratan Anda, VM tidak akan dijadwalkan.
  • Tolerations: memungkinkan VM dijadwalkan ke node dengan taint yang cocok.

Anda dapat menentukan konfigurasi penjadwalan ini untuk mendukung beban kerja compute dan kebutuhan penjadwalan Anda. Selain konfigurasi penjadwalan, penjadwalan VM bergantung pada resource yang tersedia.

Runtime VM di GDC menggunakan logika penjadwalan VM dan struktur manifes yang sama dengan Kubernetes untuk menetapkan Pod ke Node. Untuk informasi selengkapnya tentang konfigurasi penjadwalan ini, lihat link berikut:

Menempatkan VM di node tertentu

Jika memiliki node dengan konfigurasi hardware tertentu, Anda dapat menjadwalkan VM agar hanya berjalan di node ini. Misalnya, VM Anda mungkin menginginkan chipset CPU tertentu, atau memerlukan dukungan GPU. Anda dapat menggunakan nodeSelector dasar, atau aturan afinitas yang lebih fleksibel, untuk menjadwalkan VM agar berjalan di node ini.

nodeSelector

Manifes VirtualMachine berikut menggunakan nodeSelector untuk persyaratan penjadwalan hard. Jika tidak ada node yang tersedia yang memenuhi konfigurasi penjadwalan, VM tidak dapat dijadwalkan.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
        nodeSelector:
          kubernetes.io/hostname: NODE_NAME
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • NODE_NAME: node tempat Anda ingin menjadwalkan VM.

    Disk booting bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Afinitas

Manifes VirtualMachine berikut menggunakan afinitas untuk persyaratan penjadwalan lunak. Penjadwal mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM akan dijadwalkan di node yang tidak diinginkan.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                preference:
                  matchExpressions:
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                    - NODE_NAME
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • NODE_NAME: node tempat Anda ingin menjadwalkan VM.

    Disk booting bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Jangan menempatkan VM di node tertentu

VM tertentu mungkin memiliki workload yang tidak berjalan di node tertentu. Anda dapat menggunakan aturan anti-afinitas untuk menghindari penjadwalan VM di node ini.

Manifes VirtualMachine berikut menggunakan afinitas untuk persyaratan penjadwalan lunak. Penjadwal mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM mungkin dijadwalkan di node yang tidak sesuai.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VVM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
        affinity:
          nodeAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              preference:
                matchExpressions:
                - key: kubernetes.io/hostname
                  operator: NotIn
                  values:
                  - NODE_NAME
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • NODE_NAME: node tempat Anda ingin menjadwalkan VM.

    Boot disk bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Memisahkan VM

Workload komputasi Anda mungkin memiliki VM yang harus tersebar di seluruh node untuk ketersediaan tinggi, seperti kumpulan VM frontend. Anda dapat menggunakan aturan anti-afinitas antar-VM untuk menghindari penjadwalan VM secara bersamaan di node.

Manifes VirtualMachine berikut menggunakan afinitas untuk persyaratan penjadwalan lunak. Penjadwal mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM mungkin dijadwalkan di node yang tidak sesuai.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
      labels:
        KEY:VALUE
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
        affinity:
          podAntiAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                topologyKey: kubernetes.io/hostname
                labelSelector:
                  matchLabels:
                    KEY:VALUE
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • KEY:VALUE: label key:value yang akan diterapkan ke VM yang ingin Anda jadwalkan di berbagai node. Untuk informasi selengkapnya, lihat Label dan pemilih.

    Boot disk bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Menyimpan VM bersama-sama

Workload komputasi Anda mungkin memiliki VM yang harus disimpan bersama di node untuk mengurangi latensi, seperti middleware dan tingkat database. Anda dapat menggunakan aturan afinitas antar-VM untuk menjadwalkan VM bersama-sama di node.

Manifes VirtualMachine berikut menggunakan afinitas untuk persyaratan penjadwalan lunak. Penjadwal mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM mungkin dijadwalkan di node yang tidak sesuai.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
      labels:
        KEY:VALUE
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
        affinity:
          podAffinity:
            preferredDuringSchedulingIgnoredDuringExecution
            - podAffinityTerm:
                topologyKey: kubernetes.io/hostname
                labelSelector:
                  matchLabels:
                    KEY:VALUE
              weight: 100
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • KEY:VALUE: pasangan label key:value yang akan diterapkan ke VM yang ingin Anda jadwalkan di berbagai node. Untuk informasi selengkapnya, lihat Label dan pemilih.

    Boot disk bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Menjadwalkan VM di node dengan taint

Taint adalah properti penjadwalan yang memungkinkan node hanya mengizinkan VM dengan toleransi yang ditentukan untuk dijadwalkan agar berjalan di node tersebut. Anda dapat menerapkan taint ke node, lalu dalam manifes VirtualMachine menentukan toleransi untuk mengizinkan VM berjalan di node. Untuk informasi selengkapnya, lihat Taint dan toleransi.

  1. Buat manifes VirtualMachine, seperti my-scheduled-vm.yaml, di editor pilihan Anda:

    nano my-scheduled-vm.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
      scheduling:
        tolerations:
        - key: KEY_NAME
          operator: "Equal"
          value: KEY_VALUE
          effect: "NoSchedule"
    

    Ganti nilai berikut:

    • VM_NAME: nama VM Anda.
    • KEY_NAME: nama kunci toleransi Anda yang cocok dengan taint pada node.
    • KEY_VALUE: nilai kunci untuk toleransi Anda yang cocok dengan taint pada node.

    Boot disk bernama VM_NAME-boot-dv harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat disk booting VM.

  3. Simpan dan tutup manifes VM di editor Anda.

  4. Buat VM dan jadwalkan konfigurasi menggunakan kubectl:

    kubectl apply -f my-scheduled-vm.yaml
    

Langkah selanjutnya