Puoi richiedere in modo flessibile i dispositivi per i workload Google Kubernetes Engine (GKE) utilizzando l'allocazione dinamica delle risorse (DRA). Questo documento mostra come creare un ResourceClaimTemplate per richiedere i dispositivi esistenti nei pool di nodi del cluster e poi creare un workload per osservare in che modo Kubernetes alloca in modo flessibile i dispositivi ai tuoi pod.
Questa pagina è destinata agli operatori di applicazioni e ai data engineer che eseguono workload come AI/ML o computing ad alte prestazioni (HPC).
Informazioni sulla richiesta di dispositivi con DRA
Quando configuri l'infrastruttura GKE per DRA, i driver DRA sui nodi creano oggetti DeviceClass nel cluster. Una DeviceClass definisce una categoria di dispositivi, ad esempio le GPU, disponibili per le richieste per i workload. Un amministratore della piattaforma può, se vuole, eseguire il deployment di DeviceClass aggiuntive che limitano i dispositivi che puoi richiedere in workload specifici.
Per richiedere dispositivi all'interno di una DeviceClass, crea uno dei seguenti oggetti:
- ResourceClaim: un ResourceClaim consente a un pod o a un utente di richiedere risorse hardware filtrando determinati parametri all'interno di una DeviceClass.
- ResourceClaimTemplate: un ResourceClaimTemplate definisce un modello che i pod possono utilizzare per creare automaticamente nuovi ResourceClaim per pod.
Per ulteriori informazioni su ResourceClaim e ResourceClaimTemplate, consulta Quando utilizzare ResourceClaim e ResourceClaimTemplate.
Gli esempi in questo documento utilizzano un ResourceClaimTemplate di base per richiedere la configurazione del dispositivo specificata. Per ulteriori informazioni su tutti i campi che puoi specificare, consulta la documentazione di riferimento dell'API ResourceClaimTemplate.
Limitazioni
Si applicano le seguenti limitazioni:
- Limitazioni di DRA in GKE
- Limitazioni specifiche del dispositivo, che si applicano indipendentemente dal fatto che tu utilizzi DRA: workload GPU sui cluster standard
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati che i tuoi cluster GKE siano configurati per i workload DRA.
Richiedi dispositivi ed esegui il deployment dei workload
Per richiedere l'allocazione di dispositivi per pod, crea un ResourceClaimTemplate con la configurazione del dispositivo richiesta, ad esempio GPU di un tipo specifico. Quando esegui il deployment di un workload che fa riferimento a ResourceClaimTemplate, Kubernetes crea ResourceClaim per ogni pod nel workload in base a ResourceClaimTemplate. Kubernetes alloca le risorse richieste e pianifica i pod sui nodi corrispondenti.
Per richiedere le GPU in un workload con DRA:
Salva il seguente manifest come
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: 1Crea ResourceClaimTemplate:
kubectl create -f gpu-claim-template.yamlPer creare un workload che faccia riferimento a ResourceClaimTemplate, salva il seguente manifest come
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"Esegui il deployment del workload:
kubectl create -f dra-gpu-example.yaml
Verifica l'allocazione dell'hardware
Puoi verificare che ai tuoi workload sia stato allocato hardware controllando ResourceClaim o esaminando i log del pod. Per verificare l'allocazione:
Recupera ResourceClaim associato al workload di cui hai eseguito il deployment:
kubectl get resourceclaimsL'output è simile al seguente:
NAME STATE AGE dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh allocated,reserved 9sOttieni maggiori dettagli sull'hardware assegnato al pod:
kubectl describe resourceclaims RESOURCECLAIMSostituisci
RESOURCECLAIMcon il nome completo di ResourceClaim che hai ottenuto dall'output del passaggio precedente.L'output è simile al seguente:
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>Recupera i log del workload di cui hai eseguito il deployment:
kubectl logs deployment/dra-gpu-example --all-pods=trueL'output è simile al seguente:
[pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)Questo output indica che GKE ha allocato una GPU al container.