Halaman ini menjelaskan cara menggunakan class komputasi kustom untuk mengontrol properti node yang disediakan Google Kubernetes Engine (GKE) saat menskalakan cluster secara otomatis. Dokumen ini ditujukan bagi administrator platform yang ingin menentukan profil penskalaan otomatis secara deklaratif untuk node, sehingga workload tertentu berjalan di hardware yang memenuhi persyaratannya.
Ringkasan class komputasi
Di GKE, compute class adalah profil yang terdiri dari kumpulan atribut node yang digunakan GKE untuk menyediakan node yang menjalankan workload Anda. Class komputasi dapat menargetkan pengoptimalan tertentu, seperti menyediakan node berperforma tinggi atau memprioritaskan konfigurasi yang dioptimalkan biaya untuk biaya pengoperasian yang lebih murah. Class komputasi Kustom memungkinkan Anda menentukan profil yang kemudian digunakan GKE untuk menyediakan node yang sangat memenuhi persyaratan workload tertentu.
Class komputasi kustom tersedia untuk digunakan dalam mode GKE Autopilot dan mode GKE Standard dalam 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: Menentukan hierarki konfigurasi node di setiap kelas komputasi agar GKE dapat memprioritaskannya. Jika konfigurasi yang paling diinginkan 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 terperinci: Menentukan konfigurasi node yang paling cocok untuk workload tertentu. GKE memprioritaskan konfigurasi tersebut saat membuat node selama penskalaan.
- Konfigurasi infrastruktur deklaratif: Mengadopsi pendekatan deklaratif untuk pengelolaan infrastruktur sehingga GKE otomatis membuat node untuk Anda yang sesuai dengan persyaratan workload tertentu.
- 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 lebih disukai.
- Pengoptimalan biaya: Prioritaskan jenis node yang hemat biaya seperti VM Spot 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.
- Batas penggabungan node kustom: Menentukan batas penggunaan resource kustom untuk node. Jika penggunaan resource node tertentu berada di bawah nilai minimum, GKE akan mencoba menggabungkan workload ke dalam node serupa yang tersedia dan menskalakan node yang kurang dimanfaatkan.
Kasus penggunaan untuk class komputasi kustom
Pertimbangkan untuk menggunakan class komputasi kustom dalam skenario seperti berikut:
- Anda ingin menjalankan workload AI/ML pada konfigurasi GPU tertentu.
- Anda ingin menetapkan konfigurasi hardware default untuk beban kerja yang dijalankan tim tertentu, sehingga mengurangi overhead dari operator aplikasi.
- Anda menjalankan workload yang berperforma optimal pada konfigurasi hardware atau rangkaian mesin Compute Engine tertentu.
- Anda ingin mendeklarasikan konfigurasi hardware yang memenuhi persyaratan bisnis tertentu, seperti performa tinggi, pengoptimalan biaya, atau ketersediaan tinggi.
- Anda ingin GKE secara hierarkis beralih untuk menggunakan konfigurasi hardware tertentu selama resource komputasi tidak tersedia, sehingga workload Anda selalu berjalan di mesin yang sesuai dengan persyaratannya.
- Anda ingin memutuskan konfigurasi yang optimal secara terpusat di seluruh armada perusahaan, sehingga biaya Anda lebih dapat diprediksi dan beban kerja Anda berjalan dengan lebih andal.
- Anda ingin menentukan secara terpusat pemesanan kapasitas Compute Engine mana yang harus digunakan GKE untuk menyediakan node baru untuk beban kerja tertentu.
Cara kerja class komputasi kustom
Class komputasi kustom adalah resource kustom Kubernetes yang menyediakan
infrastruktur Google Cloud. Anda menentukan objek ComputeClass
di
cluster, lalu meminta class komputasi tersebut dalam workload atau menetapkan class
komputasi tersebut sebagai default untuk namespace Kubernetes. Saat Anda men-deploy workload yang
meminta class komputasi, GKE akan mencoba menempatkan Pod di
node yang memenuhi persyaratan class komputasi.
Untuk memastikan class komputasi kustom dioptimalkan untuk fleet Anda, pertimbangkan panduan berikut:
- Pahami persyaratan komputasi untuk perangkat 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 seri 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 kembali ke mesin N2.
Melihat definisi resource kustom lengkap
Untuk melihat definisi resource kustom (CRD) lengkap untuk resource kustom ComputeClass
, jalankan perintah berikut:
kubectl describe crd computeclasses.cloud.google.com
Output akan menampilkan seluruh CRD, termasuk semua kolom yang didukung dan hubungan antar-kolom. Untuk lebih memahami class komputasi kustom, lihat definisi ini saat Anda membaca dokumen ini.
Merencanakan class komputasi kustom
Untuk merencanakan, men-deploy, dan menggunakan class komputasi kustom secara efektif di cluster, Anda harus melakukan langkah-langkah berikut:
- Pilih prioritas komputasi penggantian: 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.
- Menentukan perilaku penskalaan saat tidak ada aturan prioritas yang berlaku: secara opsional, beri tahu GKE tindakan yang harus dilakukan jika node yang memenuhi aturan prioritas Anda tidak dapat disediakan.
- Menetapkan parameter penskalaan otomatis untuk konsolidasi node: beri tahu GKE kapan harus menggabungkan workload dan menghapus node yang kurang digunakan.
- 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, minta GKE untuk menggunakan reservasi zona Compute Engine yang ada saat membuat node baru.
Memilih prioritas komputasi penggantian
Keuntungan utama menggunakan class komputasi kustom adalah memiliki kontrol atas strategi penggantian saat node pilihan Anda tidak tersedia karena faktor seperti kehabisan resource dan batasan kuota.
Anda membuat strategi penggantian dengan menentukan daftar aturan prioritas di class komputasi kustom. Saat cluster perlu diskalakan, GKE akan memprioritaskan pembuatan node yang cocok dengan aturan prioritas pertama. Jika GKE tidak dapat membuat node tersebut, GKE akan kembali ke aturan prioritas berikutnya, yang akan mengulangi proses ini hingga GKE berhasil menskalakan cluster atau menghabiskan 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.
Aturan prioritas
Anda menentukan aturan prioritas di kolom spec.priorities
dari resource kustom ComputeClass
. Setiap aturan di kolom priorities
menjelaskan properti node yang akan disediakan. GKE memproses kolom priorities
secara
berurutan, yang berarti item pertama di kolom adalah prioritas tertinggi untuk
penyediaan node.
Bergantung pada jenis aturan prioritas, Anda dapat menentukan properti mesin tambahan, seperti Spot VM atau kapasitas CPU minimum, untuk digunakan GKE saat menyediakan node. Kolom priorities
mendukung jenis aturan prioritas berikut:
machineFamily
: Menentukan node menggunakan seri mesin Compute Engine, sepertin2
atauc3
.machineType
: Menentukan node menggunakan jenis mesin Compute Engine yang telah ditetapkan, sepertin2-standard-4
.nodepools
: Di cluster GKE Standard, menyediakan daftar node pool yang dibuat secara manual dan dikaitkan dengan class compute tempat GKE harus menyediakan node.
Jenis aturan machineFamily
Kolom machineFamily
menerima
seri mesin Compute Engine seperti
n2
atau c3
. Jika tidak ditentukan, defaultnya adalah e2
. Anda dapat menggunakan kolom berikut bersama jenis aturan machineFamily
:
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.
Contoh berikut menunjukkan aturan prioritas machineFamily
:
priorities:
- machineFamily: n2
spot: true
minCores: 16
minMemoryGb: 64
storage:
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
Jenis aturan machineType
Kolom machineType
menerima jenis mesin bawaan Compute Engine, seperti n2-standard-32
. Jenis mesin harus mendukung GPU apa pun yang
Anda tentukan.
Anda dapat menggunakan kolom berikut bersama dengan jenis aturan machineType
:
spot
: Menggunakan Spot VM. Default-nya adalahfalse
.storage
: Mengonfigurasi penyimpanan node.storage.bootDiskType
: Jenis disk booting.storage.bootDiskKMSKey
: Jalur ke kunci Cloud KMS yang akan digunakan untuk enkripsi disk booting.storage.bootDiskSize
: Ukuran dalam GB untuk disk booting node.storage.localSSDCount
: Jumlah SSD lokal yang akan dilampirkan ke node. Jika ditentukan, harus minimal1
.
gpu
: Mengonfigurasi GPU.gpu.type
: Jenis GPU, sepertinvidia-l4
. Untuk mengetahui detailnya, lihat Men-deploy workload GPU di Autopilot.gpu.count
: Jumlah GPU yang akan dilampirkan. Untuk mengetahui jumlah yang didukung berdasarkan jenis GPU, lihat Jumlah GPU yang didukung.
Contoh berikut menunjukkan aturan machineType
untuk 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
Contoh berikut menunjukkan aturan machineType
untuk GPU:
priorities:
- machineType: g2-standard-16
spot: false
gpu:
type: nvidia-l4
count: 1
jenis aturan nodepools
Kolom nodepools
mengambil daftar node pool yang ada tempat GKE mencoba membuat Pod yang tertunda. GKE tidak
memproses nilai di kolom ini secara berurutan. Anda tidak dapat menentukan properti mesin
lain bersama kolom ini dalam item aturan prioritas yang sama. Kolom ini
hanya didukung pada mode GKE Standard. Untuk mengetahui 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 akan memproses daftar aturan di kolom priorities
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 dan terkait dengan class komputasi ini.
- Jika node yang ada tidak dapat mengakomodasi 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 menampung Pod, terlepas dari jumlah core.
- Jika tidak ada Spot VM N2 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.
Node pool dan class komputasi GKE Standard
Jika 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 class komputasi tertentu. GKE hanya menjadwalkan Pod yang meminta class komputasi tertentu pada node di node pool yang Anda kaitkan dengan class komputasi tersebut. Mode GKE Autopilot dan node pool 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 harus menambahkan label node dan taint node ke node pool selama pembuatan atau selama update dengan menentukan flag --node-labels
dan flag --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 memperbarui node pool yang ada dan mengaitkannya
dengan class komputasi dev-class
:
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-labels="cloud.google.com/compute-class=dev-class" \
--node-taints="cloud.google.com/compute-class=dev-class:NoSchedule"
Anda dapat mengaitkan setiap node pool 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 class komputasi, Anda harus melakukan hal berikut:
- Pastikan Anda telah mengaktifkan penyediaan otomatis node di cluster.
- Tambahkan kolom
nodePoolAutoCreation
dengan nilaienabled: true
ke spesifikasiComputeClass
Anda.
GKE kemudian dapat menempatkan Pod yang menggunakan class komputasi yang mengonfigurasi penyediaan otomatis node di node pool baru. GKE memutuskan apakah akan meningkatkan skala node pool yang ada atau membuat node pool baru berdasarkan faktor seperti ukuran cluster dan persyaratan Pod. Pod dengan class komputasi yang tidak mengonfigurasi penyediaan otomatis node akan terus hanya menskalakan node pool yang ada.
Anda dapat menggunakan class komputasi yang berinteraksi dengan penyediaan otomatis node bersama dengan class komputasi yang berinteraksi dengan node pool yang dibuat secara manual di cluster yang sama.
Pertimbangkan interaksi berikut dengan penyediaan otomatis node:
- Anda tidak dapat menggunakan pemilih node kelompok mesin atau VM Spot karena pemilih ini bertentangan dengan perilaku class komputasi. GKE menolak Pod yang meminta class komputasi dan juga meminta VM Spot 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 atau dengan membuat node pool baru.
- Jika 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
tempat GKE 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 mungkin membuat node baru di node pool tersebut untuk menempatkan Pod.
Node pool yang Anda tentukan di kolom priorities.nodepools
harus
dikaitkan dengan class komputasi tersebut menggunakan label node dan taint node, seperti
yang dijelaskan di bagian
Mengonfigurasi node pool yang dibuat secara manual untuk class komputasi.
Daftar node pool yang Anda tentukan di kolom nodepools
tidak memiliki
prioritas. Untuk mengonfigurasi urutan penggantian untuk node pool 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 tertunda yang
meminta class komputasi ini di 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 aturan prioritas. Kolom
whenUnsatisfiable
dalam spesifikasi mendukung nilai berikut:
ScaleUpAnyway
: Membuat node baru yang menggunakan konfigurasi mesin default cluster. Ini adalah perilaku default.- 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 kumpulan node 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
: Membiarkan Pod dalam statusPending
hingga node yang memenuhi persyaratan class komputasi tersedia.
Menetapkan parameter penskalaan otomatis untuk penggabungan node
Secara default, GKE menghapus node yang kurang dimanfaatkan dengan menjalankan workload, menggabungkan workload tersebut di node lain yang memiliki kapasitas. Untuk semua class komputasi, ini adalah perilaku default karena semua cluster yang menggunakan class komputasi harus menggunakan autoscaler cluster atau merupakan cluster Autopilot. Selama konsolidasi node, GKE akan mengosongkan node yang kurang digunakan, 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 nilai minimum penggunaan resource yang tidak optimal yang memicu penghapusan node dan konsolidasi workload menggunakan bagian autoscalingPolicy
dalam definisi class komputasi kustom. Anda dapat menyesuaikan parameter
berikut:
consolidationDelayMinutes
: Jumlah menit setelahnya GKE menghapus node yang kurang digunakanconsolidationThreshold
: Nilai minimum penggunaan untuk CPU dan memori sebagai persentase dari resource yang tersedia di node. GKE hanya mempertimbangkan node untuk dihapus jika penggunaan resource kurang dari nilai minimum ini.gpuConsolidationThreshold
: Nilai minimum penggunaan untuk GPU sebagai persentase dari resource yang tersedia di node. GKE hanya mempertimbangkan node untuk dihapus jika penggunaan resource kurang dari nilai minimum ini. Sebaiknya tetapkan ini ke100
atau0
sehingga GKE menggabungkan node yang tidak memiliki pemanfaatan GPU yang terpasang sebesar 100%.
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 akan menghapus node yang tidak digunakan setelah lima menit, dan node hanya menjadi kandidat untuk penggabungan 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 otomatis mengganti 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 inginkan untuk class komputasi tersebut, meskipun GKE awalnya harus menjalankan Pod tersebut di node yang kurang disukai.
Saat migrasi aktif terjadi, GKE membuat node baru berdasarkan aturan prioritas class komputasi, lalu menghabiskan dan menghapus node prioritas rendah yang sudah tidak digunakan lagi. Migrasi dilakukan secara bertahap untuk meminimalkan gangguan beban kerja. Migrasi aktif memiliki pertimbangan berikut:
- Jika Anda telah mengaktifkan penyediaan otomatis node di cluster Standar, migrasi aktif mungkin memicu pembuatan node pool baru jika node pool yang ada tidak memenuhi kriteria prioritas yang lebih tinggi yang ditentukan dalam class compute 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"
.
Pertimbangkan contoh spesifikasi class komputasi 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 akan menghapus node N2D yang sudah tidak digunakan lagi.
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 zona Google Cloud tertentu, Anda dapat mengonfigurasi setiap prioritas penggantian di class komputasi kustom sehingga GKE menggunakan pemesanan saat membuat node baru.
Menggunakan reservasi di class 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.
- Class komputasi yang mengonfigurasi SSD lokal harus menggunakan aturan
prioritas
machineType
, bukanmachineFamily
. Untuk mengetahui detailnya, lihat bagian jenis aturan machineType.
Pertimbangkan contoh spesifikasi class komputasi berikut, yang memilih
pemesanan bersama tertentu untuk digunakan saat menyediakan instance n2
untuk node:
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
Jika Anda men-deploy Pod yang menggunakan class komputasi shared-specific-reservations
, GKE akan mencoba menggunakan reservasi n2-shared-reservation
saat membuat instance n2
baru untuk menjalankan Pod. Jika reservasi tidak memiliki
kapasitas yang tersedia, operasi penskalaan akan gagal.
Anda dapat menggunakan jenis reservasi berikut:
Pemesanan satu project tertentu: konfigurasikan kolom berikut:
reservations.specific.name
: nama reservasi.reservations.affinity
: harusSpecific
.
Reservasi bersama tertentu: konfigurasikan kolom berikut:
reservations.specific.name
: nama reservasi.reservations.specific.project
: project ID dari project yang memiliki pemesanan.reservations.affinity
: harusSpecific
.
Semua reservasi yang cocok: konfigurasikan kolom berikut:
reservations.affinity
: harusAnyBestEffort
.- Jangan menetapkan nama atau project reservasi.
Jika GKE tidak dapat menemukan kapasitas yang tersedia dalam reservasi yang cocok dengan aturan prioritas tertentu, GKE akan mencoba aturan prioritas berikutnya di class komputasi. Jika GKE tidak dapat memenuhi persyaratan salah satu aturan prioritas untuk class komputasi, perilaku saat tidak ada aturan yang berlaku akan terjadi.
Meminta class komputasi dalam workload
Untuk menggunakan class komputasi kustom setelah Anda selesai mendesainnya, Pod Anda harus meminta class komputasi tersebut secara eksplisit dalam spesifikasi Pod. Anda dapat menetapkan class komputasi sebagai default di namespace Kubernetes tertentu secara opsional. Dalam hal ini, Pod di namespace tersebut akan menggunakan class komputasi tersebut kecuali jika Pod meminta class komputasi yang berbeda.
Untuk petunjuk cara meminta dan menggunakan class komputasi di GKE, lihat Mengontrol atribut node yang diskalakan otomatis dengan class komputasi kustom.