Tentang class komputasi kustom


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:

  1. Pilih prioritas komputasi penggantian Anda: Tentukan serangkaian aturan yang mengatur properti node yang dibuat GKE untuk class komputasi.
  2. 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.
  3. 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.
  4. Tetapkan parameter penskalaan otomatis untuk konsolidasi node: beri tahu GKE kapan harus mengonsolidasikan workload dan menghapus node yang kurang dimanfaatkan.
  5. 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.
  6. 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 adalah false.
  • minCores: vCPU minimum per node. Nilai defaultnya adalah 0.
  • minMemoryGb: Memori minimum per node. Nilai defaultnya adalah 0.
  • 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 ke CONTAINER_IMAGE_CACHE, boot disk sekunder akan digunakan sebagai cache image container. Nilai harus sama dengan CONTAINER_IMAGE_CACHE atau MODE_UNSPECIFIED. Jika nilai ini tidak ditentukan, nilai defaultnya adalah MODE_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 adalah false.
  • 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 harus 1.

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, seperti nvidia-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 berupa default atau latest. 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:

Anda juga dapat menentukan kolom spec.priorities lainnya bersama dengan kolom tpu dalam aturan prioritas, misalnya:

  • spot: Menggunakan Spot VM. Default-nya adalah false.
  • 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:

  1. GKE mencoba menyediakan slice TPU v5p multi-host 16 node dengan menggunakan reservasi Compute Engine bersama bernama tpu-reservation dari project reservation-project.
  2. Jika reservasi tidak memiliki TPU yang tersedia, GKE akan mencoba menyediakan slice TPU multi-host v5p 16 node yang berjalan di VM Spot.
  3. 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:

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:

  1. GKE menempatkan Pod di node yang ada yang terkait dengan class komputasi ini.
  2. 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.
  3. 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.
  4. Jika tidak ada N2 Spot VM yang tersedia di region, GKE akan menyediakan VM N2 on-demand baru.
  5. 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.

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:

  1. Pastikan Anda telah mengaktifkan penyediaan otomatis node di cluster Anda.
  2. Tambahkan kolom nodePoolAutoCreation dengan nilai enabled: true ke spesifikasi ComputeClass 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:

  1. Buat node baru di node pool manually-created-pool.
  2. Sediakan node N2, baik di node pool N2 yang ada maupun dengan membuat node pool baru.
  3. 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 status Pending 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 dimanfaatkan
  • consolidationThreshold: 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 ke 100 atau 0 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 atau machineFamily ditentukan.
  • Class komputasi yang mengonfigurasi SSD lokal harus menggunakan aturan prioritas machineType, bukan machineFamily. Untuk mengetahui detailnya, lihat bagian jenis aturan machineType.
  • Kelas komputasi yang menentukan reservasi untuk machineType yang telah melampirkan SSD lokal harus menyertakan kolom localSSDCount: 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-1gSpot 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: harus Specific.
  • Reservasi bersama khusus: konfigurasi kolom berikut:

    • reservations.specific.name: nama reservasi.
    • reservations.specific.project: project ID project yang memiliki pemesanan.
    • reservations.affinity: harus Specific.
  • Reservasi yang cocok: konfigurasikan kolom berikut:

    • reservations.affinity: harus AnyBestEffort.
    • 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:

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 jika nodePoolGroup 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