Anda dapat secara fleksibel meminta perangkat untuk workload Google Kubernetes Engine (GKE) dengan menggunakan alokasi resource dinamis (DRA). Dokumen ini menunjukkan cara membuat ResourceClaimTemplate untuk meminta perangkat yang ada di kumpulan node dalam cluster Anda, lalu membuat workload untuk mengamati cara Kubernetes mengalokasikan perangkat secara fleksibel ke Pod Anda.
Dokumen ini ditujukan untuk Operator aplikasi dan Data engineer yang menjalankan workload seperti AI/ML atau komputasi berperforma tinggi (HPC).
Tentang meminta perangkat dengan DRA
Saat Anda menyiapkan infrastruktur GKE untuk DRA, driver DRA di node Anda akan membuat objek DeviceClass di cluster. DeviceClass menentukan kategori perangkat, seperti GPU, yang tersedia untuk diminta oleh workload. Administrator platform dapat secara opsional men-deploy DeviceClass tambahan yang membatasi perangkat yang dapat Anda minta dalam workload tertentu.
Untuk meminta perangkat dalam DeviceClass, Anda membuat salah satu objek berikut:
- ResourceClaim: ResourceClaim memungkinkan Pod atau pengguna meminta resource hardware dengan memfilter parameter tertentu dalam DeviceClass.
- ResourceClaimTemplate: ResourceClaimTemplate menentukan template yang dapat digunakan Pod untuk membuat ResourceClaim per-Pod baru secara otomatis.
Untuk mengetahui informasi selengkapnya tentang ResourceClaim dan ResourceClaimTemplate, lihat Kapan harus menggunakan ResourceClaim dan ResourceClaimTemplate.
Contoh dalam dokumen ini menggunakan ResourceClaimTemplate dasar untuk meminta konfigurasi perangkat yang ditentukan. Untuk mengetahui informasi selengkapnya tentang semua kolom yang dapat Anda tentukan, lihat Referensi API ResourceClaimTemplate.
Batasan
Batasan berikut berlaku:
- Batasan DRA di GKE
- Batasan khusus perangkat, yang berlaku terlepas dari apakah Anda menggunakan DRA: Workload GPU di cluster Standard
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin 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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Mengklaim perangkat dan men-deploy workload
Untuk meminta alokasi perangkat per-Pod, Anda membuat ResourceClaimTemplate yang memiliki konfigurasi perangkat yang diminta, seperti GPU dari jenis tertentu. Saat Anda men-deploy workload yang mereferensikan ResourceClaimTemplate, Kubernetes akan membuat ResourceClaim untuk setiap Pod dalam workload berdasarkan ResourceClaimTemplate. Kubernetes mengalokasikan resource yang diminta dan menjadwalkan Pod di node yang sesuai.
Untuk meminta GPU dalam workload dengan DRA, ikuti langkah-langkah berikut:
Simpan manifes berikut sebagai
gpu-claim-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: gpu-claim-template spec: spec: devices: requests: - name: single-gpu exactly: deviceClassName: gpu.nvidia.com allocationMode: ExactCount count: 1Buat ResourceClaimTemplate:
kubectl create -f gpu-claim-template.yamlUntuk membuat workload yang mereferensikan ResourceClaimTemplate, simpan manifes berikut sebagai
dra-gpu-example.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: dra-gpu-example spec: replicas: 1 selector: matchLabels: app: dra-gpu-example template: metadata: labels: app: dra-gpu-example spec: containers: - name: ctr image: ubuntu:22.04 command: ["bash", "-c"] args: ["echo $(nvidia-smi -L || echo Waiting...); sleep infinity"] resources: claims: - name: single-gpu resourceClaims: - name: single-gpu resourceClaimTemplateName: gpu-claim-template tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"Men-deploy workload:
kubectl create -f dra-gpu-example.yaml
Memverifikasi alokasi hardware
Anda dapat memverifikasi bahwa workload Anda telah dialokasikan hardware dengan memeriksa ResourceClaim atau dengan melihat log untuk Pod Anda. Untuk memverifikasi alokasi, ikuti langkah-langkah berikut:
Dapatkan ResourceClaim yang terkait dengan workload yang Anda deploy:
kubectl get resourceclaimsOutputnya mirip dengan hal berikut ini:
NAME STATE AGE dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh allocated,reserved 9sDapatkan detail selengkapnya tentang hardware yang ditetapkan ke Pod:
kubectl describe resourceclaims RESOURCECLAIMGanti
RESOURCECLAIMdengan nama lengkap ResourceClaim yang Anda dapatkan dari output langkah sebelumnya.Outputnya mirip dengan hal berikut ini:
Name: dra-gpu-example-68f595d7dc-prv27-single-gpu-qgjq5 Namespace: default Labels: <none> Annotations: resource.kubernetes.io/pod-claim-name: single-gpu API Version: resource.k8s.io/v1 Kind: ResourceClaim Metadata: # Multiple lines are omitted here. Spec: Devices: Requests: Exactly: Allocation Mode: ExactCount Count: 1 Device Class Name: gpu.nvidia.com Name: single-gpu Status: Allocation: Devices: Results: Device: gpu-0 Driver: gpu.nvidia.com Pool: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Request: single-gpu Node Selector: Node Selector Terms: Match Fields: Key: metadata.name Operator: In Values: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Reserved For: Name: dra-gpu-example-68f595d7dc-prv27 Resource: pods UID: e16c2813-08ef-411b-8d92-a72f27ebf5ef Events: <none>Dapatkan log untuk workload yang Anda deploy:
kubectl logs deployment/dra-gpu-example --all-pods=trueOutputnya mirip dengan hal berikut ini:
[pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)Output ini menunjukkan bahwa GKE mengalokasikan satu GPU ke container.