Dokumen ini ditujukan untuk pemilik aplikasi dan administrator platform yang menjalankan Google Distributed Cloud. Dokumen ini menunjukkan cara menggunakan jadwal seperti afinitas dan anti-afinitas, untuk VM yang menggunakan Runtime VM di GDC.
Sebelum memulai
Untuk menyelesaikan dokumen ini, Anda memerlukan akses ke referensi berikut:
- Akses ke Google Distributed Cloud versi 1.12.0 (
anthosBareMetalVersion: 1.12.0
) atau cluster yang lebih tinggi. Anda dapat menggunakan jenis cluster apa pun yang dapat menjalankan workload. Jika diperlukan, coba Google Distributed Cloud di Compute Engine atau lihat ringkasan pembuatan cluster. - Alat klien
virtctl
diinstal sebagai plugin untukkubectl
. Jika diperlukan, instal alat klien virtctl.
Ringkasan konfigurasi jadwal
Konfigurasi jadwal adalah nilai opsional dalam Runtime VM di GDC. Jika tidak ada konfigurasi penjadwalan yang ditentukan, VM secara default disetel ke default Kubernetes perilaku penjadwalan.
Dengan perilaku penjadwalan default, VM tersebar di seluruh cluster Anda. Tujuan penjadwal melihat ketersediaan sumber daya node saat ini, seperti CPU dan memori, dan menjadwalkan VM pada node untuk mendistribusikan permintaan komputasi. Jika Anda tidak memiliki persyaratan khusus, Anda tidak perlu menentukan konfigurasi standar.
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 node
afinitas dan anti-afinitas antar-VM. Anda mendefinisikan {i>soft <i}atau{i> hard<i}
persyaratan untuk penjadwal:
preferredDuringSchedulingIgnoredDuringExecution
: adalah persyaratan sementara. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat memenuhi VM dapat dijadwalkan pada node yang tidak diinginkan.requiredDuringSchedulingIgnoredDuringExecution
: adalah persyaratan sulit. Tujuan penjadwal mencoba memenuhi permintaan Anda. Jika tidak ada node yang tersedia, sesuai dengan kebutuhan Anda, VM tidak dijadwalkan.
Tolerations
: memungkinkan VM dijadwalkan ke node dengan taint yang cocok.
Anda dapat menentukan salah satu konfigurasi penjadwalan ini untuk mendukung komputasi workload dan penjadwalan. Selain konfigurasi penjadwalan, VM penjadwalan bergantung pada sumber daya yang tersedia.
Runtime VM di GDC menggunakan logika dan manifes penjadwalan VM yang sama Kubernetes, untuk menetapkan Pod ke Node. Untuk informasi selengkapnya tentang konfigurasi penjadwalan ini, lihat link:
Menempatkan VM di node tertentu
Jika memiliki node dengan konfigurasi hardware tertentu, Anda dapat menjadwalkan VM
untuk hanya berjalan
pada node ini. Misalnya, VM Anda mungkin menginginkan CPU tertentu
{i>chipset<i}, atau membutuhkan dukungan GPU. Anda dapat menggunakan nodeSelector
dasar, atau lainnya
aturan afinitas yang fleksibel, untuk menjadwalkan VM agar berjalan pada node ini.
nodeSelector
Manifes VirtualMachine
berikut menggunakan nodeSelector
untuk
persyaratan penjadwalan. Jika tidak ada node yang sesuai dengan penjadwalan yang tersedia
VM tidak dapat dijadwalkan.
Membuat 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 menjadwalkan VM Anda.
{i>Boot disk <i}bernama
VM_NAME-boot-dv
harus sudah ada. Untuk informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Afinitas
Manifes VirtualMachine
berikut menggunakan afinitas untuk penjadwalan sementara
persyaratan. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
memenuhi permintaan, VM dijadwalkan pada node yang tidak disukai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di 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 menjadwalkan VM Anda.
{i>Boot disk <i}bernama
VM_NAME-boot-dv
harus sudah ada. Untuk informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Jangan menempatkan VM di node tertentu
VM tertentu mungkin memiliki workload 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 penjadwalan sementara
persyaratan. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
memenuhi permintaan, VM mungkin
dijadwalkan di {i>node<i} yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di 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 yang Anda inginkan untuk menjadwalkan VM kueri.
Boot disk bernama
VM_NAME-boot-dv
harus sudah ada. Untuk informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Pisahkan VM
Workload komputasi Anda mungkin memiliki VM yang harus tersebar di seluruh node untuk ketersediaan tinggi, seperti kumpulan VM frontend. Anda dapat menggunakan antar-VM aturan anti-afinitas untuk menghindari penjadwalan VM bersama-sama pada node.
Manifes VirtualMachine
berikut menggunakan afinitas untuk penjadwalan sementara
persyaratan. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
memenuhi permintaan, VM mungkin
dijadwalkan di {i>node<i} yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di 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 penjadwalan di {i>node<i} yang berbeda. Untuk informasi selengkapnya, lihat Label dan pemilih.
Boot disk bernama
VM_NAME-boot-dv
harus sudah ada. Untuk informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Satukan VM
Workload komputasi Anda mungkin memiliki VM yang harus disimpan bersama pada node untuk mengurangi latensi, seperti middleware dan tingkat database. Anda dapat menggunakan antar-VM aturan afinitas untuk menjadwalkan VM bersama-sama pada node.
Manifes VirtualMachine
berikut menggunakan afinitas untuk penjadwalan sementara
persyaratan. Penjadwal akan mencoba memenuhi permintaan Anda. Jika penjadwal tidak dapat
memenuhi permintaan, VM mungkin
dijadwalkan di {i>node<i} yang tidak sesuai.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di 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
yang akan diterapkan VM yang ingin Anda jadwalkan di berbagai node. Untuk selengkapnya informasi, lihat Label dan pemilih.
Boot disk bernama
VM_NAME-boot-dv
harus sudah ada. Untuk informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Menjadwalkan VM pada node yang memiliki taint
Taint adalah properti penjadwalan yang memungkinkan node hanya mengizinkan VM dengan
toleransi yang akan dijadwalkan untuk dijalankan. Anda dapat menerapkan taint ke node,
kemudian, dalam manifes VirtualMachine
, tentukan toleransi untuk mengizinkan VM berjalan
{i>node<i}. Untuk informasi selengkapnya, lihat
Taint dan toleransi.
Buat manifes
VirtualMachine
, seperti my-scheduled-vm.yaml, di 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 utama toleransi 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 informasi selengkapnya, lihat Buat boot disk VM.Simpan dan tutup manifes VM di editor Anda.
Buat VM dan konfigurasi jadwal menggunakan
kubectl
:kubectl apply -f my-scheduled-vm.yaml