Halaman ini menjelaskan cara menggunakan class komputasi kustom untuk mengontrol properti node yang disediakan Google Kubernetes Engine (GKE) saat menskalakan cluster Anda secara otomatis. Dokumen ini ditujukan bagi administrator platform yang ingin menentukan profil penskalaan otomatis untuk node secara deklaratif, sehingga workload tertentu berjalan di hardware yang memenuhi persyaratannya.
Ringkasan class komputasi
Di GKE, class komputasi adalah profil yang terdiri dari serangkaian atribut node yang digunakan GKE untuk menyediakan node yang menjalankan workload Anda selama peristiwa penskalaan otomatis. Class komputasi dapat menargetkan pengoptimalan tertentu, seperti menyediakan node berperforma tinggi atau memprioritaskan konfigurasi yang dioptimalkan untuk biaya agar biaya operasional lebih murah. Class komputasi kustom memungkinkan Anda menentukan profil yang kemudian digunakan GKE untuk menskalakan otomatis node agar memenuhi persyaratan workload tertentu.
Kelas komputasi kustom tersedia untuk digunakan dalam mode GKE Autopilot dan mode GKE Standard di versi 1.30.3-gke.1451000 dan yang lebih baru, serta menawarkan pendekatan deklaratif untuk menentukan atribut node dan prioritas penskalaan otomatis. Class komputasi kustom tersedia untuk dikonfigurasi dan digunakan di semua cluster GKE yang memenuhi syarat secara default.
Manfaat class komputasi kustom
Class komputasi kustom menawarkan manfaat berikut:
- Prioritas komputasi penggantian: Tentukan hierarki konfigurasi node di setiap kelas komputasi agar diprioritaskan oleh GKE. Jika konfigurasi yang paling disukai tidak tersedia, GKE akan otomatis memilih konfigurasi berikutnya dalam hierarki. Model penggantian ini memastikan bahwa meskipun resource komputasi tidak tersedia, workload Anda tetap berjalan di hardware yang dioptimalkan dengan penundaan penjadwalan minimal.
- Kontrol penskalaan otomatis yang terperinci: Tentukan konfigurasi node yang paling cocok untuk workload tertentu. GKE memprioritaskan konfigurasi tersebut saat membuat node selama penskalaan.
- Konfigurasi infrastruktur deklaratif: Terapkan pendekatan deklaratif untuk pengelolaan infrastruktur sehingga GKE secara otomatis membuat node untuk Anda yang sesuai dengan persyaratan workload spesifik Anda.
- Migrasi aktif: Jika resource komputasi untuk konfigurasi mesin yang lebih disukai tersedia di lokasi Anda, GKE akan otomatis memigrasikan workload Anda ke node baru yang menggunakan konfigurasi yang disukai.
- Pengoptimalan biaya: Prioritaskan jenis node yang hemat biaya seperti Spot VM untuk mengurangi pengeluaran cluster Anda.
- Class komputasi default untuk namespace: Tetapkan class komputasi default di setiap namespace Kubernetes, sehingga workload di namespace tersebut berjalan di hardware yang dioptimalkan meskipun tidak meminta class komputasi tertentu.
- Threshold konsolidasi node kustom: Menentukan threshold penggunaan resource kustom untuk node. Jika penggunaan resource node tertentu berada di bawah nilai minimum, GKE akan mencoba menggabungkan workload ke node serupa yang tersedia dan menurunkan skala node yang kurang dimanfaatkan.
Kasus penggunaan untuk class komputasi kustom
Pertimbangkan untuk menggunakan kelas komputasi kustom dalam skenario seperti berikut:
- Anda ingin menjalankan workload AI/ML pada konfigurasi GPU atau TPU tertentu.
- Anda ingin menyetel konfigurasi hardware default untuk beban kerja yang dijalankan tim tertentu, sehingga tidak membebani operator aplikasi.
- Anda menjalankan workload yang berperforma optimal pada konfigurasi hardware atau seri mesin Compute Engine tertentu.
- Anda ingin mendeklarasikan konfigurasi hardware yang memenuhi persyaratan bisnis tertentu, seperti performa tinggi, biaya yang dioptimalkan, atau ketersediaan tinggi.
- Anda ingin GKE melakukan penggantian hierarkis untuk menggunakan konfigurasi hardware tertentu saat resource komputasi tidak tersedia, sehingga workload Anda selalu berjalan di mesin yang sesuai dengan persyaratannya.
- Anda ingin memutuskan secara terpusat konfigurasi optimal di seluruh fleet perusahaan Anda, sehingga biaya Anda lebih dapat diprediksi dan beban kerja Anda berjalan lebih andal.
- Anda ingin menentukan secara terpusat reservasi kapasitas Compute Engine mana yang harus digunakan GKE untuk menyediakan node baru bagi workload tertentu.
Cara kerja class komputasi kustom
Class komputasi kustom adalah resource kustom Kubernetes yang menyediakan infrastrukturGoogle Cloud . Anda menentukan objek ComputeClass
di
cluster, lalu meminta class komputasi tersebut di workload atau menetapkan class komputasi tersebut sebagai default untuk namespace Kubernetes. Saat workload yang cocok memerlukan infrastruktur baru, GKE akan menyediakan node baru sesuai dengan prioritas yang Anda tetapkan dalam definisi class komputasi.
Atribut yang Anda tetapkan di kelas komputasi menentukan cara GKE mengonfigurasi node baru untuk menjalankan workload. Saat Anda mengubah class komputasi yang ada, semua node mendatang yang dibuat GKE untuk class komputasi tersebut akan menggunakan konfigurasi yang diubah. GKE tidak mengubah konfigurasi node yang ada secara retroaktif agar sesuai dengan modifikasi Anda.
Untuk memastikan bahwa class komputasi kustom Anda dioptimalkan untuk armada Anda, pertimbangkan panduan berikut:
- Pahami persyaratan komputasi armada Anda, termasuk persyaratan hardware khusus aplikasi.
- Tentukan tema yang memandu desain setiap class komputasi. Misalnya, class komputasi yang dioptimalkan untuk performa mungkin memiliki strategi penggantian yang hanya menggunakan jenis mesin ber-CPU tinggi.
- Tentukan kelompok mesin dan rangkaian mesin Compute Engine yang paling sesuai dengan beban kerja Anda. Untuk mengetahui detailnya, lihat Panduan perbandingan dan resource kelompok mesin.
- Rencanakan strategi penggantian dalam setiap class komputasi sehingga beban kerja selalu berjalan di node yang menggunakan konfigurasi mesin serupa. Misalnya, jika seri mesin N4 tidak tersedia, Anda dapat melakukan penggantian ke mesin N2.
Melihat definisi resource kustom lengkap
Untuk melihat definisi resource kustom (CRD) terbaru untuk resource kustom ComputeClass
, termasuk semua kolom dan hubungannya, lihat dokumentasi referensi ComputeClass.
Anda juga dapat melihat CRD di cluster dengan menjalankan perintah berikut:
kubectl describe crd computeclasses.cloud.google.com
Merencanakan class komputasi kustom
Untuk merencanakan, men-deploy, dan menggunakan kelas komputasi kustom secara efektif di cluster Anda, lakukan langkah-langkah berikut:
- Pilih prioritas komputasi penggantian Anda: Tentukan serangkaian aturan yang mengatur properti node yang dibuat GKE untuk class komputasi.
- Mengonfigurasi node pool dan class komputasi GKE Standard: Untuk cluster mode Standard, lakukan langkah-langkah konfigurasi yang diperlukan untuk menggunakan class komputasi dengan node pool Anda.
- Tentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku: secara opsional, beri tahu GKE apa yang harus dilakukan jika node yang memenuhi aturan prioritas Anda tidak dapat disediakan.
- Tetapkan parameter penskalaan otomatis untuk konsolidasi node: beri tahu GKE kapan harus mengonsolidasikan workload dan menghapus node yang kurang dimanfaatkan.
- Mengonfigurasi migrasi aktif ke node dengan prioritas lebih tinggi: secara opsional, beri tahu GKE untuk memindahkan workload ke node yang lebih disukai saat hardware tersedia.
- Menggunakan reservasi Compute Engine: secara opsional, beri tahu GKE untuk menggunakan reservasi zonal Compute Engine yang ada saat membuat node baru.
Pilih prioritas komputasi penggantian Anda
Keuntungan utama menggunakan class komputasi kustom adalah Anda dapat mengontrol strategi penggantian saat node pilihan Anda tidak tersedia karena faktor-faktor seperti kehabisan resource dan batasan kuota.
Anda membuat strategi penggantian dengan menentukan daftar aturan prioritas di kelas komputasi kustom. Saat cluster perlu di-scale up, GKE membuat node yang cocok dengan aturan prioritas pertama. Jika GKE tidak dapat membuat node tersebut, GKE akan kembali ke aturan prioritas berikutnya, mengulangi proses ini hingga GKE berhasil menskalakan cluster atau kehabisan semua aturan. Jika semua aturan habis, GKE akan membuat node berdasarkan perilaku default atau yang ditentukan yang dijelaskan dalam Menentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku.
Seri mesin Compute Engine yang berbeda mendukung teknologi dan fitur yang berbeda. Generasi sebelumnya dari seri mesin mungkin tidak mendukung jenis penyimpanan yang sama dengan generasi yang lebih baru. Jika Anda menjalankan workload stateful yang mengandalkan data persisten, hindari penggunaan class komputasi yang mencakup beberapa generasi seri mesin. Workload mungkin tidak dapat mengakses data persisten jika GKE menempatkannya pada jenis mesin yang tidak mendukung jenis penyimpanan tersebut. Untuk mengetahui detailnya, filter tabel perbandingan seri mesin untuk jenis penyimpanan tertentu.
Aturan prioritas
Anda menentukan aturan prioritas di kolom spec.priorities
pada resource kustom ComputeClass
. Setiap aturan di kolom priorities
menjelaskan properti
node yang akan disediakan. GKE memproses kolom priorities
dalam
urutan, yang berarti bahwa item pertama dalam kolom adalah prioritas tertinggi untuk
penyediaan node.
Ada dua jenis aturan prioritas:
Jenis aturan deklaratif: Gunakan karakteristik node untuk mendeskripsikan node yang ingin Anda sediakan
Jenis aturan node pool: Di cluster GKE Standard, menyediakan daftar node pool yang dibuat secara manual dan terkait dengan kelas komputasi tempat GKE harus menyediakan node.
Aturan prioritas deklaratif
Dengan aturan prioritas deklaratif, Anda dapat menentukan properti mesin—seperti kelompok atau jenis mesin, VM Spot, opsi akselerator, opsi penyimpanan, reservasi, dan persyaratan resource minimum—agar digunakan GKE saat menyediakan node. Untuk mengetahui kumpulan lengkap kolom yang didukung, lihat referensi CRD ComputeClass.
Konfigurasi machineFamily
Kolom machineFamily
menerima
seri mesin Compute Engine seperti
n2
atau c3
. Jika tidak ditentukan, defaultnya adalah e2
.
Anda dapat menggunakan kolom spec.priorities
lainnya
bersama kolom machineFamily
untuk menentukan persyaratan
komputasi secara deklaratif, misalnya:
spot
: Spot VM. Nilai defaultnya adalahfalse
.minCores
: vCPU minimum per node. Nilai defaultnya adalah0
.minMemoryGb
: Memori minimum per node. Nilai defaultnya adalah0
.storage.bootDiskKMSKey
: Jalur ke kunci Cloud Key Management Service yang akan digunakan untuk enkripsi disk booting.storage.secondaryBootDisks
: Persistent Disk yang digunakan untuk memuat data terlebih dahulu ke node GKE, seperti model machine learning (ML) atau image container. Memerlukan GKE versi 1.31.2-gke.1105000 atau yang lebih baru. Untuk menyiapkan disk boot sekunder yang akan digunakan cluster Anda, lihat mengonfigurasi disk boot sekunder.storage.secondaryBootDisks.diskImageName
: nama disk image yang akan dimuat sebelumnya.storage.secondaryBootDisks.project
: nama project yang memiliki image disk. Jika nilai ini tidak ditentukan, defaultnya adalah project cluster Anda.storage.secondaryBootDisks.mode
: mode penggunaan boot disk sekunder. Jika nilai ini disetel keCONTAINER_IMAGE_CACHE
, boot disk sekunder akan digunakan sebagai cache image container. Nilai harus sama denganCONTAINER_IMAGE_CACHE
atauMODE_UNSPECIFIED
. Jika nilai ini tidak ditentukan, nilai defaultnya adalahMODE_UNSPECIFIED
.
Contoh berikut menunjukkan aturan prioritas yang menggunakan machineFamily
:
priorities:
- machineFamily: n2
spot: true
minCores: 16
minMemoryGb: 64
storage:
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
secondaryBootDisks:
- diskImageName: pytorch-mnist
project: k8s-staging-jobset
Konfigurasi machineType
Kolom machineType
menerima jenis mesin bawaan Compute Engine, seperti n2-standard-32
.
Anda dapat menentukan kolom spec.priorities
lainnya bersama dengan kolom machineType
untuk menentukan persyaratan komputasi secara deklaratif, misalnya:
spot
: Menggunakan Spot VM. Default-nya adalahfalse
.storage
: Mengonfigurasi penyimpanan node.storage.bootDiskType
: Jenis boot disk.storage.bootDiskKMSKey
: Jalur ke kunci Cloud KMS yang akan digunakan untuk enkripsi boot disk.storage.bootDiskSize
: Ukuran dalam GB untuk boot disk node.storage.localSSDCount
: Jumlah SSD lokal yang akan dipasang ke node. Jika ditentukan, minimal harus1
.
Contoh berikut menunjukkan aturan prioritas yang menggunakan machineType
untuk menyediakan jenis mesin n2-standard-32
:
priorities:
- machineType: n2-standard-32
spot: true
storage:
bootDiskType: pd-balanced
bootDiskSize: 250
localSSDCount: 2
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
Konfigurasi GPU
Untuk memilih GPU dalam aturan prioritas, tentukan jenis, jumlah, dan
driverVersion (opsional) GPU di kolom gpu
aturan prioritas.
Kolom berikut didukung:
gpu.type
: Jenis GPU, sepertinvidia-l4
. Untuk mengetahui detailnya, lihat Memilih dukungan GPU menggunakan Autopilot atau Standard.gpu.count
: Jumlah GPU yang akan dipasang. Untuk mengetahui jumlah yang didukung menurut jenis GPU, lihat Jumlah GPU yang didukung.gpu.driverVersion
: Versi driver NVIDIA yang akan diinstal. Harus berupadefault
ataulatest
. Memerlukan GKE versi 1.31.1-gke.1858000 atau yang lebih baru.
Anda juga dapat menentukan kolom spec.priorities
lainnya seperti Spot VM, opsi penyimpanan, dan reservasi bersama dengan kolom gpu
.
Contoh berikut menunjukkan aturan untuk GPU:
priorities:
- gpu:
type: nvidia-l4
count: 1
storage:
secondaryBootDisks:
- diskImageName: big-llm
project: k8s-llm
spot: true
Konfigurasi TPU
Memerlukan GKE versi 1.31.2-gke.1518000 atau yang lebih baru
Untuk memilih TPU dalam aturan prioritas, tentukan jenis, jumlah, dan topologi TPU di kolom tpu
pada aturan prioritas. Kolom berikut wajib diisi:
tpu.type
: Jenis TPU, sepertitpu-v5p-slice
. Untuk mengetahui detailnya, lihat Ketersediaan TPU di GKE Autopilot.tpu.count
: Jumlah TPU yang akan dilampirkan.tpu.topology
: Topologi TPU yang akan digunakan, seperti"2x2x1"
. Untuk mengetahui detailnya, lihat Memilih topologi untuk Autopilot.
Anda juga dapat menentukan kolom spec.priorities
lainnya
bersama dengan kolom tpu
dalam aturan prioritas, misalnya:
spot
: Menggunakan Spot VM. Default-nya adalahfalse
.storage
: Mengonfigurasi penyimpanan node.storage.bootDiskType
: Jenis boot disk.storage.bootDiskKMSKey
: Jalur ke kunci Cloud KMS yang akan digunakan untuk enkripsi disk boot.storage.bootDiskSize
: Ukuran dalam GB untuk boot disk node.
reservations
: Menggunakan reservasi Compute Engine. Untuk mengetahui detailnya, lihat bagian Menggunakan reservasi Compute Engine.
Contoh berikut menunjukkan aturan untuk TPU:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: tpu-class
spec:
priorities:
- tpu:
type: tpu-v5p-slice
count: 4
topology: 4x4x4
reservations:
specific:
- name: tpu-reservation
project: reservation-project
affinity: Specific
- spot: true
tpu:
type: tpu-v5p-slice
count: 4
topology: 4x4x4
nodePoolAutoCreation:
enabled: true
Contoh ini menentukan perilaku penggantian berikut:
- GKE mencoba menyediakan slice TPU v5p multi-host 16 node dengan menggunakan reservasi Compute Engine bersama bernama
tpu-reservation
dari projectreservation-project
. - Jika reservasi tidak memiliki TPU yang tersedia, GKE akan mencoba menyediakan slice TPU multi-host v5p 16 node yang berjalan di VM Spot.
- Jika tidak ada aturan sebelumnya yang dapat dipenuhi, GKE akan mengikuti logika di bagian Menentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku.
Setelah men-deploy class komputasi kustom TPU ke cluster, pilih class komputasi kustom tersebut di workload Anda:
- Workload Autopilot: lihat bagian "Menyediakan TPU menggunakan class komputasi kustom" di Men-deploy workload TPU di GKE Autopilot
- Workload standar: lihat bagian "Menyediakan TPU menggunakan class komputasi kustom" di Men-deploy workload TPU di GKE Standard.
Selain itu, untuk workload TPU, Anda dapat melakukan hal berikut:
Spesifikasi akselerator dan bentuk mesin
Konfigurasi akselerator deklaratif tidak memerlukan kolom machineType
atau
machineFamily
untuk ditentukan secara eksplisit kecuali jika Anda menggunakannya dalam
kombinasi dengan reservasi.
Aturan prioritas kumpulan node
Kolom nodepools
mengambil daftar node pool yang ada yang akan digunakan GKE untuk mencoba membuat Pod yang tertunda. GKE tidak
memproses nilai di kolom ini secara berurutan. Anda tidak dapat menggunakan kolom
spec.priorities
lainnya bersama kolom nodepools
dalam item aturan
prioritas yang sama karena aturan dengan kolom nodepools
tidak bersifat deklaratif.
Kolom ini hanya didukung pada mode GKE Standard. Untuk
detail penggunaan, lihat
Menargetkan node pool tertentu dalam definisi class komputasi.
Cara GKE membuat node menggunakan aturan prioritas
Saat Anda men-deploy workload yang meminta class komputasi dan node baru diperlukan, GKE memproses daftar aturan di kolom priorities
dari spesifikasi ComputeClass
secara berurutan.
Misalnya, pertimbangkan spesifikasi berikut:
spec:
...
priorities:
- machineFamily: n2
spot: true
minCores: 64
- machineFamily: n2
spot: true
- machineFamily: n2
spot: false
Saat Anda men-deploy workload yang meminta class komputasi dengan aturan prioritas ini, GKE akan mencocokkan node sebagai berikut:
- GKE menempatkan Pod di node yang ada yang terkait dengan class komputasi ini.
- Jika node yang ada tidak dapat menampung Pod, GKE akan menyediakan node baru yang menggunakan seri mesin N2, merupakan Spot VM, dan memiliki setidaknya 64 vCPU.
- Jika Spot VM N2 dengan minimal 64 vCPU tidak tersedia di region, GKE akan menyediakan node baru yang menggunakan Spot VM N2 yang dapat menyesuaikan Pod, terlepas dari jumlah core.
- Jika tidak ada N2 Spot VM yang tersedia di region, GKE akan menyediakan VM N2 on-demand baru.
- Jika tidak ada aturan sebelumnya yang dapat dipenuhi, GKE akan mengikuti logika di bagian Menentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku.
Nilai default untuk aturan prioritas
Anda dapat menetapkan nilai default untuk beberapa kolom dalam aturan prioritas spesifikasi
ComputeClass. Nilai default ini berlaku jika kolom yang sesuai dalam aturan tertentu tidak ada. Anda dapat menetapkan nilai default ini menggunakan
kolom priorityDefaults
dalam spesifikasi ComputeClass.
Kolom priorityDefaults
memiliki batasan berikut:
- Memerlukan GKE versi 1.32.1-gke.1729000 atau yang lebih baru.
- Tidak kompatibel dengan aturan prioritas
nodepools
, yang tidak berisi kolom apa pun.
Untuk mengetahui detail tentang jenis nilai default yang dapat Anda tetapkan, lihat bagian
priorityDefaults
dalam
ComputeClass CustomResourceDefinition.
Node pool GKE Standard dan kelas komputasi
Jika Anda menggunakan mode GKE Standard, Anda mungkin harus melakukan konfigurasi manual untuk memastikan Pod class komputasi Anda dijadwalkan seperti yang diharapkan.
- Node pool yang dikelola oleh penyediaan otomatis node: Tidak memerlukan konfigurasi manual. Penyediaan otomatis node akan otomatis melakukan langkah-langkah konfigurasi class komputasi untuk Anda. Untuk mengetahui detailnya, lihat Penyediaan otomatis node dan class komputasi.
- Node pool yang dibuat secara manual: Konfigurasi manual diperlukan. Anda harus menambahkan label node dan taint node ke node pool yang dibuat secara manual untuk mengaitkan node dengan class komputasi tertentu. Untuk mengetahui detailnya, lihat Mengonfigurasi kumpulan node yang dibuat secara manual untuk penggunaan class komputasi.
Mengonfigurasi node pool yang dibuat secara manual untuk penggunaan class komputasi
Jika cluster GKE Standard Anda memiliki node pool yang Anda buat secara manual tanpa penyediaan otomatis node, Anda harus mengonfigurasi node pool tersebut untuk mengaitkannya dengan kelas komputasi tertentu. GKE hanya menjadwalkan Pod yang meminta class komputasi tertentu di node dalam node pool yang Anda kaitkan dengan class komputasi tersebut. Node pool mode GKE Autopilot dan mode GKE Standard yang dibuat oleh penyediaan otomatis node akan otomatis melakukan konfigurasi ini untuk Anda.
Untuk mengaitkan node pool yang dibuat secara manual dengan class komputasi, Anda menambahkan label
node dan taint node ke node pool selama pembuatan atau selama update
dengan menentukan tanda --node-labels
dan tanda --node-taints
, sebagai berikut:
- Label node:
cloud.google.com/compute-class=COMPUTE_CLASS
- Taint:
cloud.google.com/compute-class=COMPUTE_CLASS:NoSchedule
Dalam atribut ini, COMPUTE_CLASS
adalah nama class
komputasi kustom Anda.
Misalnya, perintah berikut bersama-sama memperbarui node pool yang ada dan mengaitkan node pool dengan class komputasi dev-class
:
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-labels="cloud.google.com/compute-class=dev-class"
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-taints="cloud.google.com/compute-class=dev-class:NoSchedule"
Anda dapat mengaitkan setiap kumpulan node di cluster dengan satu class komputasi kustom. Pod yang dijadwalkan GKE di node pool yang dibuat secara manual ini hanya memicu pembuatan node di dalam node pool tersebut selama peristiwa penskalaan otomatis.
Penyediaan otomatis node dan class komputasi
Anda dapat menggunakan penyediaan otomatis node dengan class komputasi kustom untuk memungkinkan GKE membuat dan menghapus node pool secara otomatis berdasarkan aturan prioritas Anda.
Untuk menggunakan penyediaan otomatis node dengan kelas komputasi, Anda harus melakukan hal berikut:
- Pastikan Anda telah mengaktifkan penyediaan otomatis node di cluster Anda.
- Tambahkan kolom
nodePoolAutoCreation
dengan nilaienabled: true
ke spesifikasiComputeClass
Anda.
Kemudian, GKE dapat menempatkan Pod yang menggunakan class komputasi yang mengonfigurasi penyediaan otomatis node di node pool baru. GKE memutuskan apakah akan menskalakan node pool yang ada atau membuat node pool baru berdasarkan faktor-faktor seperti ukuran cluster dan persyaratan Pod. Pod dengan class komputasi yang tidak mengonfigurasi penyediaan otomatis node akan terus menskalakan node pool yang ada saja.
Anda dapat menggunakan class komputasi yang berinteraksi dengan penyediaan otomatis node bersama dengan class komputasi yang berinteraksi dengan node pool yang dibuat secara manual dalam cluster yang sama.
Pertimbangkan interaksi berikut dengan penyediaan otomatis node:
- Anda tidak dapat menggunakan pemilih node kelompok mesin atau Spot VM karena pemilih ini bertentangan dengan perilaku class komputasi. GKE menolak Pod apa pun yang meminta class komputasi dan juga meminta Spot VM atau seri mesin tertentu.
- Anda dapat mengonfigurasi penyediaan otomatis node untuk class komputasi yang menggunakan kolom
nodepools
untuk mereferensikan node pool yang ada. Penyediaan otomatis node memproses prioritas secara berurutan dan mencoba menskalakan node pool yang ada untuk menempatkan Pod Anda.
Pertimbangkan contoh berikut untuk cluster yang memiliki node pool yang dibuat secara manual dan penyediaan otomatis node:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- nodepools: [manually-created-pool]
- machineFamily: n2
- machineFamily: n2d
nodePoolAutoCreation:
enabled: true
Dalam contoh ini, GKE mencoba melakukan hal berikut:
- Buat node baru di node pool
manually-created-pool
. - Sediakan node N2, baik di node pool N2 yang ada maupun dengan membuat node pool baru.
- Jika GKE tidak dapat membuat node N2, GKE akan mencoba menskalakan node pool N2D yang ada atau membuat node pool N2D baru.
Menargetkan node pool tertentu dalam definisi class komputasi
Kolom priorities.nodepools
memungkinkan Anda menentukan daftar node pool yang dibuat secara manual yang digunakan GKE untuk mencoba menjadwalkan Pod tanpa urutan tertentu di cluster GKE Standard yang menggunakan penskalaan otomatis cluster. Kolom ini hanya mendukung daftar kumpulan node; Anda tidak dapat menentukan
properti mesin tambahan seperti seri mesin dalam aturan prioritas yang sama.
Saat Anda men-deploy workload yang meminta class komputasi yang memiliki kumpulan node bernama, GKE akan mencoba menjadwalkan Pod yang tertunda di kumpulan node tersebut. GKE dapat membuat node baru di node pool tersebut untuk menempatkan Pod.
Node pool yang Anda tentukan di kolom priorities.nodepools
harus dikaitkan dengan kelas komputasi tersebut menggunakan label node dan taint node, seperti yang dijelaskan di bagian Mengonfigurasi node pool yang dibuat secara manual untuk kelas komputasi.
Daftar node pool yang Anda tentukan di kolom nodepools
tidak memiliki
prioritas. Untuk mengonfigurasi urutan penggantian untuk kumpulan node bernama, Anda harus menentukan
beberapa item priorities.nodepools
terpisah. Misalnya, pertimbangkan spesifikasi berikut:
spec:
...
priorities:
- nodepools: [pool1, pool2]
- nodepools: [pool3]
Dalam contoh ini, GKE pertama-tama mencoba menempatkan Pod yang tertunda yang
meminta class komputasi ini pada node yang ada di node pool yang diberi label
dengan class komputasi. Jika node yang ada tidak tersedia, GKE akan mencoba menyediakan node baru di pool1
atau pool2
. Jika GKE tidak dapat menyediakan node baru di node pool ini, GKE akan mencoba menyediakan Pod baru di pool3
.
Menentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku
Resource kustom ComputeClass
memungkinkan Anda menentukan tindakan yang harus dilakukan GKE jika tidak ada node yang dapat memenuhi salah satu aturan prioritas. Kolom
whenUnsatisfiable
dalam spesifikasi mendukung nilai berikut.
ScaleUpAnyway
: Buat node baru yang menggunakan konfigurasi mesin default cluster. Pada versi GKE sebelum 1.33, ini adalah perilaku default jika Anda menghapus kolom ini.GKE melakukan salah satu tindakan berikut:
- Di cluster Autopilot, GKE menempatkan Pod di node baru atau yang sudah ada, terlepas dari konfigurasi mesin node.
- Di cluster Standard yang tidak menggunakan penyediaan otomatis node, GKE mencoba menskalakan node pool yang dibuat secara manual yang menentukan label dan taint yang cocok dengan class komputasi tertentu.
- Di cluster Standard yang menggunakan penyediaan otomatis node, GKE dapat membuat node pool baru yang menggunakan seri mesin E2 default untuk menempatkan Pod.
DoNotScaleUp
: Biarkan Pod dalam statusPending
hingga node yang memenuhi persyaratan class komputasi tersedia. Di GKE versi 1.33 dan yang lebih baru, ini adalah perilaku default jika Anda tidak menyertakan kolom ini.
Menetapkan parameter penskalaan otomatis untuk konsolidasi node
Secara default, GKE menghapus node yang kurang dimanfaatkan dengan menjalankan beban kerja, menggabungkan beban kerja tersebut di node lain yang memiliki kapasitas. Untuk semua kelas komputasi, ini adalah perilaku default karena semua cluster yang menggunakan kelas komputasi harus menggunakan autoscaler cluster atau merupakan cluster Autopilot. Selama konsolidasi node, GKE mengosongkan node yang kurang dimanfaatkan, membuat ulang beban kerja di node lain, lalu menghapus node yang dikosongkan.
Waktu dan kriteria penghapusan node bergantung pada
profil penskalaan otomatis.
Anda dapat menyesuaikan batas pemanfaatan resource yang memicu penghapusan node dan konsolidasi workload dengan menggunakan bagian autoscalingPolicy
dalam definisi class komputasi kustom. Anda dapat menyesuaikan parameter
berikut:
consolidationDelayMinutes
: Jumlah menit setelah GKE menghapus node yang kurang dimanfaatkanconsolidationThreshold
: Threshold penggunaan untuk CPU dan memori sebagai persentase resource yang tersedia di node. GKE hanya mempertimbangkan penghapusan node jika pemakaian resource kurang dari nilai minimum ini.gpuConsolidationThreshold
: Threshold pemakaian GPU sebagai persentase resource yang tersedia di node. GKE hanya mempertimbangkan penghapusan node jika pemakaian resource kurang dari nilai minimum ini. Sebaiknya tetapkan ini ke100
atau0
agar GKE menggabungkan node yang tidak memiliki pemanfaatan 100% GPU terpasang.
Perhatikan contoh berikut:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n2
- machineFamily: n2d
autoscalingPolicy:
consolidationDelayMinutes: 5
consolidationThreshold: 70
Dalam konfigurasi ini, GKE menghapus node yang tidak digunakan setelah lima menit, dan node hanya menjadi kandidat untuk konsolidasi jika penggunaan CPU dan memorinya kurang dari 70%.
Mengonfigurasi migrasi aktif ke node dengan prioritas yang lebih tinggi
Migrasi aktif adalah fitur penskalaan otomatis opsional di class komputasi kustom yang secara otomatis menggantikan node yang ada yang lebih rendah dalam daftar prioritas penggantian class komputasi dengan node baru yang lebih tinggi dalam daftar prioritas tersebut. Hal ini memastikan bahwa semua Pod yang berjalan pada akhirnya akan berjalan di node yang paling Anda sukai untuk class komputasi tersebut, meskipun awalnya GKE harus menjalankan Pod tersebut di node yang kurang disukai.
Saat migrasi aktif terjadi, GKE membuat node baru berdasarkan aturan prioritas class komputasi, lalu menguras dan menghapus node prioritas rendah yang sudah tidak digunakan. Migrasi terjadi secara bertahap untuk meminimalkan gangguan workload. Migrasi aktif memiliki pertimbangan berikut:
- Migrasi aktif tidak memigrasikan data yang disimpan di penyimpanan persisten, seperti Persistent Disk Compute Engine. Untuk meminimalkan risiko kehilangan data, jangan aktifkan migrasi aktif di class komputasi yang digunakan oleh beban kerja stateful.
- Jika Anda telah mengaktifkan penyediaan otomatis node di cluster Standar, migrasi aktif dapat memicu pembuatan node pool baru jika node pool yang ada tidak memenuhi kriteria prioritas yang lebih tinggi yang ditentukan dalam class komputasi kustom Anda.
- Untuk menghindari gangguan workload penting, migrasi aktif tidak memindahkan Pod berikut:
- Pod yang menetapkan PodDisruptionBudget, jika pemindahan akan melebihi PodDisruptionBudget.
- Pod yang memiliki
anotasi
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
.
- Beban kerja yang menggunakan volume persisten dengan resource zonal seperti Hyperdisk mungkin tidak berfungsi dengan baik saat migrasi aktif. Batasan zona dan batasan jenis mesin beberapa produk Hyperdisk dapat mengurangi efektivitas migrasi aktif. Selain itu, beberapa workload stateful mungkin tidak dapat mentoleransi gangguan yang disebabkan oleh migrasi aktif.
Pertimbangkan spesifikasi class komputasi contoh berikut, yang memprioritaskan node N2 daripada node N2D:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n2
- machineFamily: n2d
activeMigration:
optimizeRulePriority: true
Jika node N2 tidak tersedia saat Anda men-deploy Pod dengan class komputasi ini, GKE akan menggunakan node N2D sebagai opsi penggantian. Jika node N2 tersedia untuk disediakan nanti, seperti jika kuota Anda meningkat atau jika VM N2 tersedia di lokasi Anda, GKE akan membuat node N2 baru dan secara bertahap memigrasikan Pod dari node N2D yang ada ke node N2 baru. Kemudian, GKE menghapus node N2D yang sudah tidak digunakan.
Menggunakan reservasi Compute Engine
Tersedia di GKE versi 1.31.1-gke.2105000 dan yang lebih baru
Jika Anda menggunakan pemesanan kapasitas Compute Engine untuk mendapatkan tingkat jaminan ketersediaan hardware yang lebih tinggi di zonaGoogle Cloud tertentu, Anda dapat mengonfigurasi setiap prioritas penggantian di kelas komputasi kustom sehingga GKE menggunakan pemesanan saat membuat node baru.
Penggunaan reservasi di kelas komputasi kustom memiliki persyaratan berikut:
- Cluster mode Standard harus menggunakan penyediaan otomatis node agar GKE dapat menggunakan reservasi untuk membuat node baru. Untuk mengetahui detailnya, lihat bagian Penyediaan otomatis node dan class komputasi. Anda juga dapat terus menggunakan reservasi saat membuat node pool secara manual di cluster.
- Reservasi non-TPU hanya dapat digunakan jika
machineType
ataumachineFamily
ditentukan. - Class komputasi yang mengonfigurasi SSD lokal harus menggunakan aturan prioritas
machineType
, bukanmachineFamily
. Untuk mengetahui detailnya, lihat bagian jenis aturan machineType. - Kelas komputasi yang menentukan reservasi untuk
machineType
yang telah melampirkan SSD lokal harus menyertakan kolomlocalSSDCount:
secara eksplisit.
Pertimbangkan contoh spesifikasi class komputasi berikut, yang memprioritaskan pemesanan bersama tertentu untuk digunakan saat menyediakan instance a3-highgpu-1g
.
Jika jenis instance yang diprioritaskan tidak tersedia, GKE akan melakukan
pengalihan ke reservasi yang cocok dalam spesifikasi:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: accelerator-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineType: a3-highgpu-1g
storage:
localSSDCount: 2
gpu:
type: nvidia-h100-80gb
count: 1
reservations:
specific:
- name: a3-shared-reservation
project: reservation-project
affinity: Specific
- machineType: a3-highgpu-1g
storage:
localSSDCount: 2
gpu:
type: nvidia-h100-80gb
count: 1
reservations:
affinity: AnyBestEffort
whenUnsatisfiable: DoNotScaleUp
Jika Anda men-deploy Pod yang menggunakan class komputasi accelerator-reservations
, GKE akan mencoba menggunakan reservasi a3-shared-reservation
terlebih dahulu saat membuat instance a3-highgpu-1g
baru untuk menjalankan Pod. Jika reservasi
tertentu ini tidak memiliki kapasitas yang tersedia, GKE akan mencoba melakukan penskalaan
instance a3-highgpu-1g
dengan menggunakan reservasi yang cocok. Jika tidak ada reservasi yang dapat diakses, GKE akan melakukan penggantian ke a3-highgpu-1g
Spot VM. Terakhir, jika tidak ada Spot VM yang tersedia, operasi penskalaan akan gagal.
Dalam contoh ini, kedua aturan prioritas dengan referensi reservasi secara eksplisit
memerlukan kolom localSSDCount:
karena bentuk mesin a3-highgpu-1g
mencakup SSD lokal.
Contoh berikut menunjukkan reservasi spesifik bersama, yang melakukan penggantian ke VM Spot, lalu akhirnya ke VM on-demand:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: shared-specific-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: n2
reservations:
specific:
- name: n2-shared-reservation
project: reservation-project
affinity: Specific
- machineFamily: n2
spot: true
- machineFamily: n2
whenUnsatisfiable: DoNotScaleUp
Anda dapat menggunakan jenis reservasi berikut:
Reservasi satu project tertentu: konfigurasi kolom berikut:
reservations.specific.name
: nama reservasi.reservations.affinity
: harusSpecific
.
Reservasi bersama khusus: konfigurasi kolom berikut:
reservations.specific.name
: nama reservasi.reservations.specific.project
: project ID project yang memiliki pemesanan.reservations.affinity
: harusSpecific
.
Reservasi yang cocok: konfigurasikan kolom berikut:
reservations.affinity
: harusAnyBestEffort
.- Jangan tetapkan nama atau project pemesanan.
Pemesanan TPU memerlukan Afinitas spesifik. reservations.affinity: AnyBestEffort
tidak didukung.
Jika GKE tidak dapat menemukan kapasitas yang tersedia dalam reservasi, perilaku yang dihasilkan bergantung pada jenis reservasi yang dipilih dalam aturan prioritas class komputasi, sebagai berikut:
- Reservasi spesifik: GKE mencoba aturan prioritas berikutnya di class komputasi.
- Reservasi yang cocok: GKE mencoba menyediakan node sesuai permintaan yang memenuhi persyaratan aturan prioritas tersebut. Jika GKE tidak dapat menyediakan node sesuai permintaan, GKE akan mencoba aturan prioritas berikutnya di kelas komputasi.
Jika GKE tidak dapat memenuhi persyaratan salah satu aturan prioritas untuk class komputasi, perilaku saat tidak ada aturan yang berlaku akan terjadi.
Memakai blok reservasi tertentu
Mulai dari GKE versi 1.31.4-gke.1072000, Anda dapat menargetkan blok reservasi tertentu dalam reservasi yang didukung hardware. Fitur ini tersedia untuk jenis mesin A3 Ultra dan A4.
Untuk menggunakan blok reservasi tertentu, konfigurasi resource ComputeClass Anda seperti yang ditunjukkan dalam contoh ini:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: specific-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: a3
gpu:
type: nvidia-h200-141gb
count: 8
reservations:
specific:
- name: a3ultra-specific-reservation
reservationBlock:
name: RESERVATION_BLOCK_NAME
affinity: Specific
Ganti RESERVATION_BLOCK_NAME dengan nama blok reservasi target.
Saat Anda menggunakan fitur ini, perhatikan pertimbangan berikut:
- Fitur ini hanya berlaku untuk reservasi tertentu dalam project tunggal atau bersama.
Menyesuaikan konfigurasi sistem node
Anda dapat menyesuaikan parameter tertentu di kubelet dan kernel Linux dengan
menggunakan kolom nodeSystemConfig
dalam spesifikasi ComputeClass. Anda dapat
menentukan kolom ini dalam aturan prioritas apa pun yang menentukan seri mesin atau jenis mesin Compute Engine. Anda juga dapat menetapkan nilai global default untuk
kolom konfigurasi sistem node yang dihilangkan dalam aturan prioritas dengan
menambahkan kolom nodeSystemConfig
ke
kolom priorityDefaults
di
kelas komputasi.
Fitur ini tersedia di GKE versi 1.32.1-gke.1729000 dan yang lebih baru.
Untuk informasi lebih lanjut, lihat halaman berikut:
Mengelompokkan node pool
Anda dapat mengelompokkan beberapa kumpulan node ke dalam satu unit logis yang disebut
koleksi menggunakan kolom nodePoolGroup
dalam spesifikasi
ComputeClass. Pengelompokan ini memungkinkan Anda menerapkan konfigurasi bersama di banyak
node pool.
Koleksi multi-host TPU
Anda dapat mengelompokkan deployment multi-host TPU untuk menetapkan Tujuan Tingkat Layanan (SLO) di semua node pool dalam koleksi. Untuk mengelompokkan kumpulan node, tentukan
nama grup di kolom nodePoolGroup
. Semua node pool yang disediakan
menggunakan class komputasi ini termasuk dalam grup yang sama.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: tpu-multi-host-collection
spec:
nodePoolGroup:
name: my-tpu-collection
...
Untuk informasi selengkapnya, lihat referensi berikut:
- Merencanakan TPU di GKE
- Node pool slice TPU multi-host
- Menjadwalkan kumpulan TPU untuk beban kerja inferensi
Konfigurasi node pool
Kolom nodePoolConfig
dalam spesifikasi ComputeClass memungkinkan Anda menerapkan
konfigurasi yang tercermin di semua node dalam node pool yang dibuat
menggunakan class tersebut.
Menentukan jenis gambar
Anda dapat menentukan sistem operasi dasar untuk node di node pool dengan
menggunakan kolom imageType
. Kolom ini memungkinkan Anda memilih jenis image untuk node pool yang akan berjalan di node. Jika Anda menghapus kolom ini, nilai
defaultnya adalah cos_containerd
. Contoh berikut menunjukkan cara menentukan
imageType
di ComputeClass Anda:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-node-pool-config
spec:
nodePoolConfig:
imageType: cos_containerd
Untuk mengetahui informasi selengkapnya, lihat Image node.
Akun layanan
Kolom serviceAccount
menentukan akun layanan Google Cloud yang digunakan oleh
node dalam node pool yang dikelola oleh class komputasi. Contoh
berikut menunjukkan cara menentukan serviceAccount
di ComputeClass Anda:
spec:
nodePoolConfig:
serviceAccount: my-service-account@my-project.iam.gserviceaccount.com
Untuk mengetahui informasi selengkapnya, lihat Tentang akun layanan di GKE.
Menentukan jenis beban kerja untuk SLO TPU
Anda dapat menentukan Tujuan Tingkat Layanan (SLO) untuk beban kerja TPU menggunakan
kolom workloadType
dalam nodePoolConfig
. Nilai dalam kolom ini memberi tahu GKE
penggunaan yang dimaksudkan untuk resource TPU. Kolom workloadType
mendukung nilai berikut:
HIGH_AVAILABILITY
: gunakan nilai ini untuk workload yang berfokus pada ketersediaan, seperti penyajian inferensi, untuk membatasi dan menyederhanakan gangguan.HIGH_THROUGHPUT
: gunakan nilai ini untuk tugas batch atau pelatihan yang memerlukan semua infrastruktur yang mendasarinya untuk berjalan hampir sepanjang waktu agar dapat berjalan. Nilai ini hanya dapat digunakan jikanodePoolGroup
juga ditentukan.
Contoh berikut menentukan class komputasi untuk koleksi TPU multi-host yang dioptimalkan untuk workload inferensi dengan ketersediaan tinggi.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: multi-host-inference
spec:
nodePoolGroup:
name: my-inference-collection
nodePoolConfig:
workloadType: HIGH_AVAILABILITY
nodePoolAutoCreation:
enabled: true
priorities:
- tpu:
type: tpu-v6e-slice
topology: 2x4
Untuk informasi lebih lanjut, lihat halaman berikut:
Meminta class komputasi dalam workload
Untuk menggunakan class komputasi kustom, Pod Anda harus secara eksplisit meminta class komputasi tersebut menggunakan nodeSelector
dalam spesifikasi Pod. Secara opsional, Anda dapat menetapkan kelas komputasi sebagai default untuk namespace Kubernetes tertentu. Pod di namespace tersebut menggunakan class komputasi tersebut kecuali jika Pod meminta class komputasi yang berbeda.
Misalnya, manifes berikut meminta class komputasi cost-optimized
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-workload
spec:
replicas: 2
selector:
matchLabels:
app: custom-workload
template:
metadata:
labels:
app: custom-workload
spec:
nodeSelector:
cloud.google.com/compute-class: cost-optimized
containers:
- name: test
image: gcr.io/google_containers/pause
resources:
requests:
cpu: 1.5
memory: "4Gi"
Langkah berikutnya
- Pelajari rekomendasi deployment workload lainnya di GKE Autopilot
- Pelajari cara mengonfigurasi, men-deploy, dan meminta class komputasi kustom