Dokumen ini ditujukan untuk pemilik aplikasi dan administrator platform yang menjalankan GKE di Bare Metal. 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 referensi berikut:
- Akses ke GKE pada Bare Metal versi 1.12.0 (
anthosBareMetalVersion: 1.12.0
) atau cluster yang lebih tinggi. Anda dapat menggunakan jenis cluster apa pun yang mampu menjalankan beban kerja. Jika perlu, coba GDCV untuk Bare Metal di Compute Engine atau lihat ringkasan pembuatan cluster. - Alat klien
virtctl
diinstal sebagai plugin untukkubectl
. Jika perlu, instal alat klien virtctl.
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 melihat ketersediaan resource node saat ini, seperti CPU dan memori, serta menjadwalkan VM pada node untuk mendistribusikan permintaan komputasi. Jika tidak memiliki persyaratan khusus, 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 tertentu.- Afinitas: menentukan aturan afinitas VM. Ini mencakup afinitas
node dan afinitas atau anti-afinitas antar-VM. Anda menentukan persyaratan ringan atau sulit untuk penjadwal:
preferredDuringSchedulingIgnoredDuringExecution
: adalah persyaratan ringan. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi permintaan, VM dapat dijadwalkan pada node yang tidak dipilih.requiredDuringSchedulingIgnoredDuringExecution
: adalah persyaratan sulit. Penjadwal mencoba memenuhi permintaan Anda. Jika tidak tersedia node yang cocok dengan persyaratan Anda, VM tidak akan dijadwalkan.
Tolerations
: memungkinkan VM dijadwalkan ke node dengan taint yang cocok.
Anda dapat menentukan salah satu konfigurasi penjadwalan ini untuk mendukung beban kerja komputasi dan kebutuhan penjadwalan. Selain konfigurasi penjadwalan, penjadwalan VM bergantung pada resource yang tersedia.
Runtime VM di GDC menggunakan logika penjadwalan dan struktur manifes VM yang sama dengan Kubernetes untuk menetapkan Pod ke Node. Untuk informasi selengkapnya tentang konfigurasi penjadwalan ini, lihat link berikut:
Menempatkan VM pada node tertentu
Jika memiliki node dengan konfigurasi hardware tertentu, Anda dapat menjadwalkan VM agar hanya berjalan pada 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
yang sulit. Jika tidak ada node yang tersedia yang memenuhi konfigurasi
penjadwalan, VM tidak dapat dijadwalkan.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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 yang ingin Anda jadwalkan untuk VM.
Boot disk yang bernama
VM_NAME-boot-dv
harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan jadwalkan konfigurasi menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Afinitas
Manifes VirtualMachine
berikut menggunakan afinitas untuk persyaratan
penjadwalan sementara. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
menerima permintaan, VM akan dijadwalkan pada node yang tidak dipilih.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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 yang ingin Anda jadwalkan untuk VM.
Boot disk yang bernama
VM_NAME-boot-dv
harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan jadwalkan konfigurasi menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Jangan tempatkan VM di node tertentu
VM tertentu mungkin memiliki beban kerja yang tidak berjalan pada node tertentu. Anda dapat menggunakan aturan anti-afinitas untuk menghindari penjadwalan VM pada node ini.
Manifes VirtualMachine
berikut menggunakan afinitas untuk persyaratan
penjadwalan sementara. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
menerima permintaan, VM dapat dijadwalkan pada node yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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 boot disk VM.Simpan dan tutup manifes VM di editor Anda.
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 inter-VM untuk menghindari penjadwalan VM secara bersamaan pada node.
Manifes VirtualMachine
berikut menggunakan afinitas untuk persyaratan
penjadwalan sementara. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
menerima permintaan, VM dapat dijadwalkan pada node yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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
: labelkey:value
untuk 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 boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan jadwalkan konfigurasi menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Satukan VM
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 inter-VM untuk menjadwalkan VM bersama pada node.
Manifes VirtualMachine
berikut menggunakan afinitas untuk persyaratan
penjadwalan sementara. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
menerima permintaan, VM dapat dijadwalkan pada node yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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 labelkey:value
untuk diterapkan ke VM yang ingin Anda jadwalkan di berbagai node. Untuk mengetahui informasi selengkapnya, lihat Label dan pemilih.
Boot disk bernama
VM_NAME-boot-dv
harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan jadwalkan konfigurasi menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Menjadwalkan VM pada node dengan taint
Taint adalah properti penjadwalan yang memungkinkan node hanya mengizinkan VM dengan toleransi
yang ditentukan untuk dijalankan di sana. Anda dapat menerapkan taint ke sebuah node,
lalu dalam manifes VirtualMachine
, tentukan toleransi agar VM berjalan pada
node tersebut. Untuk mengetahui informasi selengkapnya, lihat
Taint dan toleransi.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di editor pilihan Anda:nano my-scheduled-vm.yaml
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 yang cocok dengan taint pada node.
Boot disk bernama
VM_NAME-boot-dv
harus sudah ada. Untuk mengetahui informasi selengkapnya, lihat Membuat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan jadwalkan konfigurasi menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml