Tentang alokasi resource dinamis di GKE

Anda dapat menggunakan alokasi resource dinamis (DRA) untuk mengalokasikan GPU ke workload Google Kubernetes Engine (GKE) Anda. Dokumen ini menjelaskan dasar-dasar DRA, cara menggunakan DRA di GKE, dan manfaat penggunaan DRA.

Dokumen ini ditujukan untuk peran berikut:

Anda seharusnya sudah memahami hal-hal 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, 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 workload 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 workload 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 workload 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: Anda dapat menggunakan ekspresi CEL untuk memfilter perangkat yang memiliki atribut tertentu. Penggunaan ekspresi memberikan fleksibilitas untuk memfilter perangkat yang optimal untuk workload tertentu.

Kapan harus menggunakan DRA

Alasan utama menggunakan 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 set node GPU yang dapat menjalankan workload, sehingga mengurangi risiko workload tidak dijadwalkan karena resource tidak tersedia.
  • Mengoptimalkan ketersediaan node selama penskalaan: jumlah perangkat yang diperlukan workload dapat berubah, bergantung pada faktor-faktor seperti jenis perangkat dan kemampuannya. Anda dapat menggunakan ComputeClasses GKE untuk menempatkan Pod yang dipercepat di node pool tertentu berdasarkan ketersediaan perangkat. Kemudian, Anda dapat mengonfigurasi Pod untuk mengklaim perangkat di node mana pun tempat GKE menempatkan Pod.

    Dengan menggunakan DRA dengan ComputeClass, Anda dapat meminimalkan risiko workload yang tidak terjadwal sekaligus membantu Anda menjalankan workload di hardware yang dioptimalkan.

Terminologi

Kubernetes open source dan penyedia Kubernetes terkelola seperti GKE menggunakan jenis API DRA inti 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 oleh 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.

Untuk mengetahui informasi selengkapnya tentang jenis DRA API, lihat terminologi DRA.

Cara kerja DRA

Penggunaan DRA di cluster dan workload Anda adalah proses 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 ResourceClaimTemplates atau ResourceClaims 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 otomatis membuat ResourceClaim per-Pod.
  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 on-node untuk melampirkan hardware yang dialokasikan ke Pod guna memenuhi permintaan resourcenya.

Kapan ResourceClaims dan ResourceClaimTemplates digunakan

Anda dapat menggunakan ResourceClaim atau ResourceClaimTemplate untuk 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.

Untuk mengalokasikan perangkat terpisah ke Pod, Anda dapat menggunakan ResourceClaimTemplate, yang merupakan template yang digunakan Kubernetes untuk membuat ResourceClaim individual secara otomatis. 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:

Tabel 1. Perbandingan ResourceClaim dan 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 terpisah dari Pod Terikat pada 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 pengalokasian perangkat menggunakan plugin perangkat. Metode ini mencakup 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 beban kerja.
  3. Operator workload meminta perangkat dalam manifes workload sebagai berikut:
    • Pilih node yang memiliki konfigurasi perangkat yang diperlukan, seperti model GPU, 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 workload 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 mengharuskan operator workload mengetahui konfigurasi node yang tepat dalam cluster.

Tabel berikut membandingkan DRA dengan plugin perangkat:

Tabel 2. Perbandingan DRA dan alokasi perangkat manual
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.

Penskalaan otomatis DRA dan infrastruktur

Untuk menyesuaikan jumlah node secara otomatis dalam node pool mode Standard, Anda menggunakan autoscaler cluster. Anda dapat mengaktifkan penskalaan otomatis cluster di node pool yang dibuat secara manual, termasuk node pool yang memiliki driver DRA.

Untuk node pool yang menggunakan DRA, pemanfaatan perangkat memengaruhi cara autoscaler cluster menambahkan dan menghapus node dalam node pool. Untuk menghitung pemanfaatan perangkat di node pool, autoscaler cluster mempertimbangkan faktor-faktor berikut:

  • Semua perangkat dalam kumpulan resource harus bersifat lokal untuk node tertentu. Jika ResourceSlice memiliki kumpulan perangkat yang terhubung ke beberapa node, autoscaler cluster akan mengabaikan perangkat tersebut.
  • Semua perangkat dalam kumpulan node sama pentingnya dan identik.
  • Perangkat DRA memiliki prioritas yang lebih tinggi daripada CPU atau memori. Di pool node DRA, penskalaan otomatis cluster mengabaikan penggunaan CPU dan memori.

Faktor-faktor ini mungkin berarti Anda melihat perilaku penurunan skala yang berbeda di node pool DRA dibandingkan di node pool lainnya.

Perangkat GKE yang didukung untuk DRA

Tabel berikut menjelaskan perangkat yang dapat Anda alokasikan ke workload dengan DRA di GKE:

Tabel 3. Perangkat yang didukung untuk DRA di GKE
Perangkat yang didukung untuk DRA
GPU Jenis GPU apa pun yang tersedia di lokasi Anda. Untuk mengetahui informasi selengkapnya, lihat Lokasi GPU.
Antarmuka jaringan Beberapa jenis antarmuka jaringan, seperti antarmuka yang kompatibel dengan RDMA, dengan menginstal driver DRANET terkelola. Untuk mengetahui informasi selengkapnya, lihat Mengalokasikan resource jaringan menggunakan DRANET yang dikelola GKE.

Batasan

Batasan berikut berlaku saat Anda menggunakan DRA:

  • Mode operasi: DRA hanya tersedia di cluster mode Standar.

  • Jenis akselerator: selama Pratinjau, DRA di GKE hanya mendukung GPU.

  • GPU:

    • Anda tidak dapat menggunakan GPU berbagi waktu, GPU multi-instance, atau Multi-Process Service (MPS).
    • Untuk node yang menggunakan driver GPU DRA, Anda tidak dapat menggunakan paket metrik NVIDIA Data Center GPU Manager (DCGM) terkelola untuk mengirim metrik DCGM ke Cloud Monitoring.
    • Driver GPU untuk DRA dimiliki oleh NVIDIA, bukan oleh GKE. Untuk mengetahui informasi selengkapnya, lihat dokumentasi NVIDIA.
  • Antarmuka jaringan (Pratinjau): lihat Batasan di "Mengalokasikan resource jaringan menggunakan DRANET yang dikelola GKE".

  • Penskalaan otomatis:

    • Untuk driver DRA pihak ketiga yang Anda instal, penskala otomatis cluster memerlukan node pool Anda untuk memiliki setidaknya satu node. Untuk mencegah penskalaan kumpulan node yang menggunakan driver pihak ketiga ke nol node, tetapkan jumlah minimum node ke minimal 1.
    • Cluster autoscaler mungkin tidak berfungsi dengan benar dengan driver DRA pihak ketiga. Jika Anda menggunakan driver pihak ketiga, pastikan bahwa driver hanya memublikasikan informasi untuk perangkat yang bersifat lokal ke node tertentu.
    • Untuk DaemonSet di node pool penskalaan otomatis yang menggunakan ResourceClaim statis untuk membagikan akses perangkat di antara Pod, penskalaan otomatis mendukung hingga 128 Pod DaemonSet. Untuk menghindari batasan ini, lakukan salah satu tindakan berikut:
      • Cegah node pool agar tidak menskalakan lebih dari 128 node dengan menetapkan jumlah maksimum node.
      • Gunakan kolom adminAccess (beta), di ResourceClaim, yang memungkinkan DaemonSet mengakses perangkat yang sedang digunakan.
    • Jika Pod Anda mereferensikan ResourceClaim dan memiliki PriorityClass yang menetapkan kebijakan preemption ke PreemptLowerPriority, latensi penskalaan otomatis mungkin meningkat. PreemptLowerPriority adalah kebijakan preempti default untuk PriorityClass, jadi pastikan PriorityClass Anda secara eksplisit menetapkan kolom preemptionPolicy ke Never. Untuk mengetahui informasi selengkapnya, lihat PriorityClass yang tidak mengantisipasi.

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:

Langkah berikutnya