Tentang alokasi resource dinamis di GKE


Halaman ini memberikan informasi tentang alokasi resource dinamis (DRA) di Google Kubernetes Engine (GKE). Di halaman ini, Anda akan mempelajari dasar-dasar DRA, cara kerjanya di GKE, dan manfaat menggunakan DRA untuk mengalokasikan hardware seperti GPU dan TPU.

Halaman ini ditujukan untuk peran berikut:

Sebelum membaca halaman ini, pastikan Anda memahami referensi berikut:

Pengantar DRA

DRA adalah fitur Kubernetes bawaan yang memungkinkan Anda secara fleksibel meminta, mengalokasikan, dan membagikan hardware di cluster Anda di antara Pod dan container. DRA meningkatkan pengalaman mengalokasikan hardware terlampir, seperti akselerator, dengan memungkinkan vendor perangkat dan administrator platform mendeklarasikan class perangkat yang dapat diminta dan dialokasikan. Operator aplikasi dapat meminta konfigurasi perangkat tertentu dalam class tersebut, lalu meminta konfigurasi tersebut dalam workload mereka. Kubernetes dan GKE mengelola penjadwalan Pod, penetapan node, dan alokasi perangkat berdasarkan permintaan workload.

Misalnya, administrator platform dapat menentukan class perangkat yang hanya memiliki GPU NVIDIA A100. Operator aplikasi kemudian dapat memfilter perangkat dalam kelas perangkat tersebut berdasarkan persyaratan workload, seperti memfilter untuk memori GPU minimal 80 GB. Saat operator aplikasi men-deploy workload yang meminta konfigurasi yang difilter, GKE menempatkan Pod di node yang memenuhi kriteria yang dipilih. Dalam contoh ini, GKE menemukan node yang memiliki GPU A100 (80 GB) yang tersedia. Operator aplikasi tidak perlu memilih konfigurasi perangkat atau node tertentu dalam manifes workload.

Manfaat DRA

Tanpa DRA, alokasi perangkat hardware di Kubernetes bergantung pada plugin perangkat. Untuk melampirkan resource hardware ke Pod menggunakan plugin perangkat, Anda menggunakan label node untuk menempatkan Pod di node tertentu. Selain itu, untuk mendedikasikan seluruh resource node ke satu Pod, Anda meminta jumlah perangkat persis yang terpasang ke node.

Dengan DRA, pengalaman mengalokasikan perangkat ke Pod mirip dengan mengalokasikan volume untuk penyimpanan. Anda menentukan class perangkat, meminta perangkat dalam class tersebut, lalu menetapkan perangkat yang diminta ke workload. DRA menyediakan platform yang jauh lebih mudah di-extend untuk memfilter perangkat berdasarkan beban kerja dan kebutuhan bisnis. Pendekatan DRA yang menggunakan ekspresi dan template untuk mengklaim hardware dan menjadwalkan Pod memiliki manfaat berikut:

  • Alokasi perangkat deklaratif: administrator platform dapat menentukan konfigurasi perangkat untuk jenis beban kerja atau tim tertentu.
  • Mengurangi kompleksitas lintas tim: saat administrator platform menyediakan node yang memiliki konfigurasi hardware khusus, operator aplikasi tidak perlu mengetahui node mana yang memiliki konfigurasi tertentu. Administrator platform tidak perlu memberi label pada node atau mengomunikasikan informasi tentang node dan perangkat tertentu kepada operator.
  • Mengurangi kompleksitas developer: Kubernetes menjadwalkan Pod berdasarkan konfigurasi perangkat yang dirujuk. Operator aplikasi tidak perlu memilih node tertentu dalam beban kerja mereka dan tidak perlu memastikan bahwa setiap Pod meminta jumlah perangkat yang terpasang ke node tersebut.
  • Pengelolaan infrastruktur terpusat: administrator platform dapat menentukan konfigurasi hardware secara terpusat yang memenuhi persyaratan bisnis tertentu. Misalnya, administrator platform dapat mendeklarasikan konfigurasi berperforma tinggi yang memiliki GPU H100 bersama dengan konfigurasi inferensi kecil yang memiliki GPU Tesla T4.
  • Pemilihan hardware yang fleksibel: DRA memungkinkan Anda menggunakan ekspresi CEL untuk memfilter perangkat yang memiliki atribut tertentu. Penggunaan ekspresi memberikan fleksibilitas untuk memfilter perangkat yang optimal untuk beban kerja tertentu.

Kapan harus menggunakan DRA

Selama Pratinjau, alasan utama penggunaan DRA di GKE adalah fleksibilitas dalam meminta perangkat untuk workload. Anda dapat menulis manifes satu kali dan men-deploy workload ke cluster yang berbeda dengan jenis perangkat yang berbeda tanpa perlu mengubah manifes. Fleksibilitas ini ideal untuk kasus penggunaan seperti berikut:

  • Meningkatkan ketersediaan GPU: untuk workload yang memerlukan akses ke hardware GPU, Anda dapat menggunakan DRA untuk meminta GPU apa pun yang tersedia di cluster, bukan harus menentukan model GPU. Jika workload tersebut memiliki persyaratan memori GPU (VRAM) tertentu, Anda dapat meminta GPU apa pun di cluster yang memiliki jumlah memori minimum. Jenis permintaan fleksibel ini memperluas kumpulan node GPU yang dapat menjalankan workload, sehingga mengurangi risiko workload tidak dijadwalkan karena resource tidak tersedia.
  • Mengoptimalkan ketersediaan node GPU selama penskalaan: jumlah GPU terpasang yang diperlukan beban kerja dapat berubah, bergantung pada jenis GPU. Anda dapat menggunakan kelas komputasi GKE untuk menyediakan node berdasarkan ketersediaan GPU, kuota, atau reservasi kapasitas. Kemudian, Anda dapat menggunakan DRA di workload untuk mengonfigurasi Pod agar berjalan di node mana pun yang disediakan GKE untuk class komputasi. Dengan menggunakan DRA dengan class komputasi, Anda dapat meminimalkan risiko workload yang tidak terjadwal sekaligus memastikan bahwa workload berjalan di hardware yang dioptimalkan.

Terminologi

Kubernetes open source dan penyedia Kubernetes terkelola seperti GKE menggunakan istilah DRA berikut:

ResourceSlice
ResourceSlice mencantumkan satu atau beberapa perangkat hardware di cluster yang dapat diakses oleh node. Misalnya, di node yang dapat mengakses satu GPU, ResourceSlice mencantumkan GPU dan nama node. Driver perangkat DRA di setiap node membuat ResourceSlice. Penjadwal Kubernetes menggunakan ResourceSlice untuk memutuskan perangkat mana yang akan dialokasikan untuk memenuhi permintaan beban kerja.
DeviceClass
DeviceClass menentukan kategori perangkat, seperti GPU, yang tersedia untuk diminta bagi workload. Beberapa driver perangkat menyediakan DeviceClass bawaan, seperti gpu.nvidia.com DeviceClass untuk GPU NVIDIA. Administrator platform juga dapat membuat DeviceClass kustom yang menentukan konfigurasi perangkat tertentu.
ResourceClaim

ResourceClaim memungkinkan Pod atau pengguna meminta resource hardware dengan memfilter parameter tertentu dalam DeviceClass. Saat workload mereferensikan ResourceClaim, Kubernetes akan menetapkan perangkat yang cocok dengan parameter yang ditentukan ke ResourceClaim tersebut.

Misalnya, pertimbangkan skenario saat Anda membuat ResourceClaim untuk satu GPU A100 (40 GB), lalu men-deploy workload yang memilih ResourceClaim tersebut. Kubernetes menetapkan GPU A100 (40 GB) yang tersedia ke ResourceClaim dan menjadwalkan Pod Anda di node yang dapat mengakses GPU tersebut.

ResourceClaimTemplate

ResourceClaimTemplate menentukan template yang dapat digunakan Pod untuk membuat ResourceClaim per-Pod baru secara otomatis. ResourceClaimTemplate berguna jika Anda memiliki beberapa workload yang memerlukan akses ke konfigurasi perangkat serupa, terutama saat menggunakan pengontrol workload seperti Deployment atau StatefulSet.

Operator aplikasi men-deploy ResourceClaimTemplates, lalu mereferensikan template dalam workload. Kubernetes membuat ResourceClaim untuk setiap Pod berdasarkan template yang ditentukan, mengalokasikan perangkat, dan menjadwalkan Pod. Saat Pod dihentikan, Kubernetes akan membersihkan ResourceClaim yang sesuai.

Cara kerja DRA

Penggunaan DRA di cluster dan workload Anda memiliki pengalaman yang serupa dengan penggunaan StorageClass, PersistentVolumeClaim, dan PersistentVolume untuk menyediakan volume secara dinamis untuk Pod.

Diagram berikut menunjukkan langkah-langkah yang dilakukan oleh administrator cluster dan operator aplikasi untuk mengalokasikan perangkat menggunakan DRA:

Dalam diagram ini, administrator cluster dan operator aplikasi melakukan hal berikut:

  1. Administrator cluster menginstal driver perangkat yang mendukung DRA di node.
  2. Administrator cluster membuat DeviceClass yang memfilter hardware yang memenuhi persyaratan tertentu, seperti semua GPU dengan memori lebih dari 40 GB. Beberapa perangkat mungkin juga menyertakan DeviceClass bawaan.
  3. Operator aplikasi membuat ResourceClaimTemplate atau ResourceClaim yang meminta konfigurasi perangkat. Kasus penggunaan utama untuk setiap jenis klaim adalah sebagai berikut:
    • ResourceClaim memungkinkan beberapa Pod berbagi akses ke perangkat yang sama.
    • ResourceClaimTemplate memungkinkan beberapa Pod mengakses perangkat terpisah yang serupa dengan membuat ResourceClaim per-Pod secara otomatis.
  4. Operator aplikasi menambahkan ResourceClaimTemplates atau ResourceClaims ke manifes workload mereka.
  5. Operator aplikasi men-deploy workload.

Saat Anda men-deploy workload yang mereferensikan ResourceClaimTemplate atau ResourceClaim, Kubernetes akan melakukan langkah-langkah penjadwalan berikut:

  1. Jika workload mereferensikan ResourceClaimTemplate, Kubernetes akan membuat objek ResourceClaim baru untuk setiap instance workload (misalnya, setiap replika dalam Deployment).
  2. Penjadwal Kubernetes menggunakan ResourceSlice di cluster untuk mengalokasikan perangkat yang tersedia dan memenuhi syarat ke ResourceClaim setiap Pod.
  3. Scheduler menempatkan setiap Pod pada node yang memiliki akses ke perangkat yang dialokasikan ke ResourceClaim Pod.
  4. Kubelet di node tujuan memanggil driver DRA di node untuk melampirkan hardware yang dialokasikan ke Pod guna memenuhi permintaan resource-nya.

Kapan ResourceClaims dan ResourceClaimTemplates digunakan

ResourceClaim dan ResourceClaimTemplate memungkinkan Anda menunjukkan kepada Kubernetes bahwa Anda menginginkan perangkat yang memenuhi persyaratan tertentu. Saat ResourceClaim direferensikan di Pod, Kubernetes mengalokasikan perangkat ke resource API ResourceClaim yang sesuai di server Kubernetes API. Alokasi ini terjadi terlepas dari apakah Anda membuat ResourceClaim atau Kubernetes membuat ResourceClaim dari ResourceClaimTemplate.

Jika Anda membuat ResourceClaim, lalu mereferensikannya di beberapa Pod, semua Pod tersebut dapat mengakses perangkat yang dialokasikan Kubernetes untuk ResourceClaim tersebut. Misalnya, akses bersama ini dapat terjadi jika Anda mereferensikan ResourceClaim tertentu dalam manifes Deployment yang memiliki beberapa replika. Namun, jika perangkat yang dialokasikan tidak dikonfigurasi untuk dibagikan oleh beberapa proses, akses perangkat bersama di seluruh Pod ini dapat menyebabkan perilaku yang tidak diinginkan.

ResourceClaimTemplate memungkinkan Anda menentukan template yang digunakan Kubernetes untuk membuat ResourceClaim individual secara otomatis untuk Pod. Misalnya, jika Anda mereferensikan ResourceClaimTemplate dalam Deployment yang memiliki beberapa replika, Kubernetes akan membuat ResourceClaim terpisah untuk setiap Pod yang direplikasi. Akibatnya, setiap Pod mendapatkan perangkat yang dialokasikan sendiri, bukan berbagi akses ke perangkat dengan Pod lain. ResourceClaim yang dibuat otomatis ini terikat dengan masa aktif Pod yang sesuai, dan dihapus saat Pod dihentikan. Jika Anda memiliki Pod independen yang memerlukan akses ke konfigurasi perangkat serupa, gunakan ResourceClaimTemplate untuk mengalokasikan perangkat ke setiap Pod secara terpisah.

Tabel berikut menjelaskan beberapa perbedaan antara membuat ResourceClaim secara manual dan membiarkan Kubernetes membuat ResourceClaim dari ResourceClaimTemplate:

ResourceClaim yang dibuat secara manual ResourceClaim yang dibuat secara otomatis
Anda kelola Dikelola oleh Kubernetes
Memberikan akses ke perangkat yang sama dari beberapa Pod Memberikan akses ke perangkat dari satu Pod
Ada di cluster secara independen dari Pod Terikat dengan siklus proses Pod yang sesuai
Ideal untuk beberapa workload yang perlu berbagi perangkat tertentu Ideal untuk beberapa workload yang memerlukan akses perangkat independen

Perbandingan DRA dengan alokasi perangkat manual

DRA membuat alokasi perangkat terpasang menjadi pengalaman yang serupa dengan penyediaan PersistentVolume secara dinamis. Kubernetes juga mendukung alokasi perangkat dengan menggunakan plugin perangkat. Metode ini melibatkan langkah-langkah berikut:

  1. Administrator cluster membuat node yang telah memasang perangkat, seperti GPU.
  2. Administrator cluster menyampaikan informasi tentang node tertentu dan perangkat yang terpasang ke operator workload.
  3. Operator workload meminta perangkat dalam manifes workload sebagai berikut:
    • Pilih node yang memiliki konfigurasi perangkat yang diperlukan, seperti model GPU atau jenis dan topologi TPU, dengan menggunakan kolom nodeSelector.
    • Tentukan jumlah pasti perangkat yang akan digunakan oleh container dengan menggunakan kolom resources dalam spesifikasi Pod.

Metode alokasi manual ini mengharuskan operator aplikasi dan administrator cluster berkomunikasi tentang node atau node pool tertentu yang memiliki konfigurasi perangkat tertentu. Mereka harus mengoordinasikan permintaan beban kerja agar sesuai dengan perangkat di node, atau deployment akan gagal. Sebagai perbandingan, DRA memungkinkan Anda menggunakan ekspresi untuk memfilter perangkat secara fleksibel berdasarkan atribut, dan tidak memerlukan operator workload untuk mengetahui konfigurasi node yang tepat dalam cluster.

Tabel berikut membandingkan DRA dengan plugin perangkat:

DRA Alokasi manual
Pemilihan perangkat yang fleksibel menggunakan ekspresi CEL Pemilihan node tertentu menggunakan pemilih dan permintaan resource
Keputusan penjadwalan yang dibuat oleh Kubernetes Keputusan penjadwalan yang dibuat oleh operator menggunakan pemilih node
Pemfilteran perangkat terpisah dari pembuatan workload Pemfilteran perangkat harus dilakukan dalam manifes workload
Pemfilteran perangkat terpusat dan kelas berbasis kebutuhan, yang dikelola oleh administrator platform Pemfilteran perangkat terisolasi menurut operator aplikasi
Operator aplikasi tidak perlu mengetahui kapasitas node, informasi label node, atau model perangkat yang terpasang untuk setiap node Operator aplikasi harus mengetahui node mana yang memiliki model dan jumlah perangkat tertentu yang terpasang.

Perangkat GKE yang didukung untuk DRA

Anda dapat menggunakan DRA untuk mengalokasikan GPU atau TPU ke workload GKE. Anda dapat mengalokasikan model GPU dan TPU yang didukung GKE. Untuk mengetahui detail tentang GPU dan TPU yang didukung GKE, lihat referensi berikut:

Batasan DRA di GKE

DRA memiliki batasan berikut di cluster GKE:

  • Anda tidak dapat menggunakan DRA dengan penyediaan otomatis node.
  • Anda tidak dapat menggunakan DRA dengan fitur berbagi GPU berikut:
    • GPU berbagi waktu.
    • GPU multi-instance.
    • Multi-Process Service (MPS).
  • Anda tidak dapat menggunakan DRA di cluster Autopilot.
  • Anda harus menggunakan GKE versi 1.32.1-gke.1489001 atau yang lebih baru.

Bagian ini memberikan rekomendasi untuk administrator platform atau operator aplikasi yang ingin menggunakan DRA untuk mengalokasikan perangkat ke workload. DRA mengubah metode permintaan perangkat terpasang secara signifikan, baik di GKE maupun di Kubernetes. Untuk mendapatkan manfaat dari kasus penggunaan yang lebih canggih, seperti penggantian lintas perangkat atau pemfilteran dan pemilihan perangkat yang lebih mendetail, pertimbangkan panduan berikut:

Meningkatkan ketersediaan node selama penskalaan

ComputeClass di GKE memungkinkan Anda menentukan perilaku penggantian berbasis prioritas yang diikuti GKE saat membuat node baru di cluster. Anda dapat menggunakan ComputeClass untuk mengonfigurasi serangkaian konfigurasi node dan perangkat yang diprioritaskan yang digunakan GKE saat membuat node untuk menjalankan workload. Kemudian, Anda dapat menggunakan DRA untuk memastikan bahwa workload Anda dapat berjalan di node mana pun dalam ComputeClass tanpa perlu memilih node secara manual berdasarkan label.

Misalnya, workload mungkin memerlukan dua GPU NVIDIA L4 atau satu GPU NVIDIA A100 (40 GB) agar dapat berjalan secara optimal. Anda dapat membuat ComputeClass yang membuat prioritas untuk membuat node dengan satu GPU A100 (40 GB), tetapi dapat melakukan penggantian ke pembuatan node dengan dua GPU L4 per node. Kemudian, Anda dapat menggunakan DRA untuk meminta GPU yang tersedia untuk workload Anda. Saat Anda men-deploy workload dan memilih ComputeClass tersebut, GKE akan membuat node yang memiliki salah satu konfigurasi GPU yang ditentukan. Dengan DRA, GKE dapat menempatkan workload pada node pertama yang tersedia, terlepas dari model GPU, label node, atau jumlah GPU.

Untuk mempelajari lebih lanjut, lihat halaman berikut:

Langkah berikutnya