Dokumen ini menunjukkan cara mengontrol infrastruktur komputasi dan perilaku penskalaan otomatis cluster Google Kubernetes Engine (GKE) berdasarkan kebutuhan spesifik workload Anda menggunakan ComputeClass kustom.
Dokumen ini ditujukan untuk administrator platform yang ingin menentukan profil penskalaan otomatis untuk node secara deklaratif, dan untuk operator cluster yang ingin menjalankan workload mereka di ComputeClass tertentu.
Tentang ComputeClass kustom
ComputeClass Kustom adalah Resource Kustom Kubernetes yang memungkinkan Anda menentukan prioritas yang harus diikuti GKE saat menyediakan node untuk menjalankan workload Anda. Anda dapat menggunakan ComputeClass kustom untuk melakukan hal berikut:
- Memberi GKE serangkaian prioritas untuk diikuti secara berurutan saat menyediakan node, masing-masing dengan parameter tertentu seperti seri mesin Compute Engine atau kapasitas resource minimum
- Menentukan nilai minimum dan parameter penskalaan otomatis untuk menghapus node yang kurang dimanfaatkan dan menggabungkan workload secara efisien pada kapasitas komputasi yang ada
- Memberi tahu GKE agar otomatis mengganti konfigurasi node yang kurang disukai dengan konfigurasi node yang lebih disukai untuk performa workload yang optimal
Untuk memahami semua opsi konfigurasi dan cara interaksinya satu sama lain serta dengan mode GKE Autopilot dan mode GKE Standard, lihat Tentang ComputeClass kustom.
Harga
Resource kustom ComputeClass disediakan tanpa biaya tambahan di GKE. Pertimbangan harga berikut berlaku:
Mode GKE Autopilot: Anda akan ditagih menggunakan mode penagihan berbasis node. Untuk mengetahui detailnya, lihat Harga mode Autopilot.
Mode GKE Standard: lihat Harga mode Standard.
Batasan
Nama ComputeClass Anda tidak boleh diawali dengan gke atau autopilot.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki cluster GKE yang sudah ada dan menjalankan versi 1.30.3-gke.1451000 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Membuat cluster Autopilot.
Jika Anda menggunakan cluster mode Standar, pastikan Anda memenuhi salah satu persyaratan berikut:
- Aktifkan penskalaan otomatis di setidaknya satu node pool dalam cluster.
- Jika cluster Standard Anda menjalankan versi yang lebih lama dari 1.33.3-gke.1136000 dan tidak terdaftar di saluran rilis Rapid, aktifkan node auto-provisioning tingkat cluster.
Contoh skenario untuk ComputeClasses
Dokumen ini menyajikan contoh skenario saat Anda menentukan ComputeClass kustom. Dalam praktiknya, Anda harus mempertimbangkan persyaratan workload dan organisasi tertentu, serta menentukan ComputeClass yang memenuhi persyaratan tersebut. Untuk deskripsi lengkap semua opsi untuk ComputeClass, dan untuk pertimbangan khusus, lihat Tentang ComputeClass kustom.
Perhatikan contoh skenario berikut:
- Sasaran Anda adalah mengoptimalkan biaya operasional untuk workload Anda
- Workload Anda fault-tolerant dan tidak memerlukan penghentian normal atau runtime yang diperpanjang
- Workload Anda memerlukan setidaknya 64 vCPU agar dapat berjalan secara optimal
- Anda dibatasi untuk menggunakan seri mesin Compute Engine N4
Berdasarkan contoh skenario, Anda memutuskan bahwa Anda menginginkan ComputeClass yang melakukan hal berikut:
- Memprioritaskan node Spot N4 yang memiliki setidaknya 64 vCPU
- Memungkinkan GKE beralih ke node Spot N4, terlepas dari kapasitas komputasi
- Jika tidak ada node Spot N4 yang tersedia, GKE akan menggunakan node N4 on-demand
- Memberi tahu GKE untuk memindahkan workload Anda ke node Spot setiap kali node tersebut tersedia lagi
Mengonfigurasi ComputeClass dalam mode Autopilot
Di GKE Autopilot, Anda menentukan ComputeClass, men-deploy-nya ke cluster, dan meminta ComputeClass tersebut dalam workload Anda. GKE melakukan langkah-langkah konfigurasi node, seperti menerapkan label dan taint, untuk Anda.
Simpan manifes berikut sebagai compute-class.yaml:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Mengonfigurasi ComputeClass dalam mode Standard
Di cluster mode GKE Standard, Anda mungkin harus melakukan konfigurasi manual untuk memastikan Pod ComputeClass Anda dijadwalkan seperti yang diharapkan. Konfigurasi manual bergantung pada apakah node pool Anda dibuat secara otomatis, sebagai berikut:
- Node pool yang dibuat otomatis: Tidak memerlukan konfigurasi manual. GKE secara otomatis melakukan langkah-langkah konfigurasi ComputeClass untuk Anda. Untuk mengetahui detailnya, lihat Pembuatan otomatis node pool dan ComputeClass.
- 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 ComputeClass tertentu. Untuk mengetahui detailnya, lihat Mengonfigurasi node pool yang dibuat secara manual untuk penggunaan ComputeClass.
Agar GKE otomatis membuat node pool untuk ComputeClass Anda, ikuti langkah-langkah berikut:
- Untuk cluster mode Standard yang menjalankan versi sebelum 1.33.3-gke.1136000 dan tidak terdaftar di saluran rilis Rapid, aktifkan penyediaan otomatis node tingkat cluster.
Simpan contoh manifes berikut sebagai
compute-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true nodePoolAutoCreation: enabled: trueSaat Anda men-deploy Pod yang meminta ComputeClass contoh ini dan node baru perlu dibuat, GKE akan memprioritaskan pembuatan node sesuai urutan item di kolom
priorities. Jika diperlukan, GKE akan membuat node pool baru yang memenuhi persyaratan hardware ComputeClass.
Anda juga dapat menentukan
jenis mesin kustom
yang tepat dalam prioritas Anda. Penggunaan jenis mesin kustom memerlukan GKE
versi 1.33.2-gke.1111000 atau yang lebih baru. Contoh berikut mengonfigurasi ComputeClass yang memprioritaskan Spot VM untuk jenis mesin kustom n4-custom-8-20480, dan beralih ke VM on-demand dengan jenis yang sama jika kapasitas Spot tidak tersedia:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: custom-machine-type
spec:
priorities:
- machineType: n4-custom-8-20480
spot: true
- machineType: n4-custom-8-20480
spot: false
nodePoolAutoCreation:
enabled: true
Untuk mengoptimalkan ketersediaan kapasitas selama batasan kapasitas, tentukan ComputeClass yang mencakup beberapa seri dan generasi mesin. Untuk workload stateless atau toleran terhadap gangguan, Anda juga dapat mengaktifkan migrasi aktif untuk mengembalikan workload ke hardware pilihan Anda saat kapasitas pulih:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: multi-family-fallback
spec:
priorities:
- machineFamily: c4d
- machineFamily: c3d
- machineFamily: c4
- machineFamily: c3
- machineFamily: n4
- machineFamily: n2d
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Seri mesin yang lebih baru seperti C4, C4D, dan N4 hanya mendukung
Hyperdisk, dan seri yang lebih lama seperti N2D menggunakan Persistent Disk.
Jika workload stateful menggunakan ComputeClass yang mencakup kedua generasi,
nonaktifkan migrasi aktif
dan, di GKE versi 1.35.3-gke.1290000 dan yang lebih baru, gunakan
StorageClass dynamic-rwo bawaan atau StorageClass kustom dengan
pemilihan jenis disk otomatis
(parameters.type: dynamic), use-allowed-disk-topology: "true", dan
volumeBindingMode: WaitForFirstConsumer. GKE kemudian memilih jenis disk yang kompatibel saat menyediakan volume baru dan menjadwalkan volume yang ada hanya pada seri mesin yang kompatibel.
Menggunakan ComputeClass dengan node pool yang dibuat secara manual
Bagian ini menunjukkan cara menentukan ComputeClass dalam cluster yang hanya menggunakan node pool yang dibuat secara manual.
Simpan manifes berikut sebagai
compute-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: trueBuat node pool baru yang diskalakan otomatis yang menggunakan Spot VM dan kaitkan dengan ComputeClass:
gcloud container node-pools create cost-optimized-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --spot \ --enable-autoscaling \ --max-nodes=9 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"Ganti kode berikut:
LOCATION: lokasi cluster Anda.CLUSTER_NAME: nama cluster yang ada.
Buat node pool baru yang diskalakan otomatis dengan VM on-demand dan kaitkan dengan ComputeClass:
gcloud container node-pools create on-demand-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --enable-autoscaling \ --max-nodes=9 \ --num-nodes=0 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
Saat Anda men-deploy Pod yang meminta ComputeClass ini dan node baru perlu dibuat, GKE akan memprioritaskan pembuatan node di node pool cost-optimized-pool. Jika node baru tidak dapat dibuat, GKE akan membuat node di node pool on-demand-pool.
Untuk mengetahui detail selengkapnya tentang cara node pool yang dibuat secara manual berinteraksi dengan ComputeClass kustom, lihat Mengonfigurasi node pool yang dibuat secara manual untuk penggunaan ComputeClass.
Menyesuaikan nilai minimum penskalaan otomatis untuk konsolidasi node
Secara default, GKE menghapus node yang kurang dimanfaatkan dan menjadwalkan ulang workload Anda ke node lain yang tersedia. Anda dapat menyesuaikan lebih lanjut nilai minimum
dan waktu setelah node menjadi kandidat untuk dihapus menggunakan
kolom autoscalingPolicy dalam definisi ComputeClass, seperti dalam contoh
berikut:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
autoscalingPolicy:
consolidationDelayMinutes : 5
consolidationThreshold : 70
Contoh ini membuat node menjadi kandidat untuk dihapus jika kurang dimanfaatkan sebesar 70% dari kapasitas CPU dan memori yang tersedia selama lebih dari lima menit. Untuk mengetahui daftar parameter yang tersedia, lihat Menetapkan parameter penskalaan otomatis untuk konsolidasi node.
Men-deploy ComputeClass di cluster
Setelah Anda menentukan ComputeClass, deploy ke cluster:
kubectl apply -f compute-class.yaml
ComputeClass ini siap digunakan di cluster. Anda dapat meminta ComputeClass dalam spesifikasi Pod atau, secara opsional, menetapkannya sebagai ComputeClass default di namespace tertentu.
Meminta ComputeClass dalam workload
Untuk meminta ComputeClass dalam workload, tambahkan pemilih node untuk ComputeClass tersebut dalam manifes Anda, seperti dalam langkah-langkah berikut:
Simpan manifes berikut sebagai
cc-workload.yaml: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: registry.k8s.io/pause resources: requests: cpu: 1.5 memory: "4Gi"Men-deploy workload:
kubectl apply -f cc-workload.yaml
Saat Anda men-deploy workload ini, GKE akan otomatis menambahkan toleransi ke Pod yang sesuai dengan taint node untuk ComputeClass yang diminta. Toleransi ini membantu memastikan bahwa hanya Pod yang meminta ComputeClass yang berjalan di node ComputeClass.
Memfilter node berdasarkan ComputeClass
Setiap node yang terkait dengan ComputeClass memiliki label cloud.google.com/compute-class.
Untuk melihat semua node yang terkait dengan ComputeClass tertentu, jalankan perintah berikut:
kubectl get nodes -l cloud.google.com/compute-class=COMPUTECLASS_NAME
Ganti COMPUTECLASS_NAME dengan nama ComputeClass (misalnya, cost-optimized).
Outputnya mirip dengan hal berikut ini:
NAME STATUS ROLES AGE VERSION
gke-cluster-1-cost-optimized-pool-f213e529-rx7d Ready <none> 5m v1.32.4-gke.1236007
gke-cluster-1-cost-optimized-pool-f213e529-ab12 Ready <none> 5m v1.32.4-gke.1236007
Untuk menampilkan semua node dalam cluster yang terkait dengan ComputeClass, jalankan perintah berikut:
kubectl get nodes -L cloud.google.com/compute-class
Mengupdate ComputeClass yang di-deploy
Untuk mengupdate ComputeClass yang di-deploy, ubah manifes YAML untuk ComputeClass. Kemudian, deploy manifes yang telah diubah dengan menjalankan perintah berikut:
kubectl apply -f PATH_TO_FILE
Ganti PATH_TO_FILE dengan jalur ke manifes yang telah diubah. Pastikan nilai di kolom name tidak berubah.
Saat Anda men-deploy ComputeClass yang telah diupdate, GKE akan menggunakan konfigurasi yang telah diupdate untuk membuat node baru. GKE tidak mengubah node yang ada dengan konfigurasi yang telah Anda update.
Seiring waktu, GKE mungkin memindahkan Pod yang ada ke node yang menggunakan konfigurasi yang telah diperbarui jika ComputeClass menggunakan migrasi aktif dan jika Pod yang ada memenuhi syarat untuk dimigrasikan.
Langkah berikutnya
- Pelajari praktik terbaik untuk ComputeClass.
- Baca selengkapnya tentang ComputeClass kustom.
- Menerapkan ComputeClass kustom ke Pod secara default.
- Memecahkan masalah ComputeClass kustom.