Questo documento spiega come configurare manualmente l'infrastruttura Google Kubernetes Engine (GKE) per supportare l'allocazione dinamica delle risorse (DRA). I passaggi di configurazione includono la creazione di pool di nodi che utilizzano GPU e l'installazione dei driver DRA.
Questo documento è destinato agli amministratori della piattaforma che vogliono creare un'infrastruttura con dispositivi hardware specializzati che gli operatori delle applicazioni possono richiedere nei workload.
Limitazioni
Si applicano le seguenti limitazioni:
- Limitazioni di DRA in GKE
- Limitazioni specifiche del dispositivo, che si applicano indipendentemente dall'utilizzo di DRA: Workload GPU nei cluster Standard
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API 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 comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Avere un cluster GKE Standard che esegue la versione 1.35 o successive. Puoi anche creare un cluster a livello di regione.
Installa Helm. Se utilizzi Cloud Shell, Helm è già installato.
Crea un pool di nodi GKE con GPU
Questa sezione mostra come creare un pool di nodi GPU e installare i driver DRA corrispondenti. I passaggi descritti in questa sezione si applicano solo ai pool di nodi creati manualmente. Per creare un pool di nodi GPU che supporti DRA, devi:
- Disattiva l'installazione automatica dei driver GPU: specifica l'opzione
gpu-driver-version=disablednel flag--accelerator. - Disattiva il plug-in del dispositivo GPU: aggiungi l'etichetta del nodo
gke-no-default-nvidia-gpu-device-plugin=trueal pool di nodi. - Esegui il DaemonSet del driver DRA: aggiungi l'etichetta del nodo
nvidia.com/gpu.present=trueal pool di nodi. - Configura la scalabilità automatica: per utilizzare il gestore della scalabilità automatica del cluster nel tuo pool di nodi, aggiungi l'etichetta nodo
cloud.google.com/gke-nvidia-gpu-dra-driver=trueal pool di nodi. Lo strumento di scalabilità automatica del cluster utilizza questa etichetta del nodo per identificare i nodi che eseguono il driver DRA per le GPU.
Per creare e configurare i pool di nodi GPU:
Crea un pool di nodi GPU. I seguenti comandi di esempio creano pool di nodi con configurazioni diverse:
Crea un pool di nodi con un'istanza
g2-standard-24con due GPU L4:gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --machine-type="g2-standard-24" \ --accelerator="type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=trueSostituisci quanto segue:
NODEPOOL_NAME: un nome per il pool di nodi.CLUSTER_NAME: il nome del tuo cluster.CONTROL_PLANE_LOCATION: la regione o la zona del control plane del cluster, ad esempious-central1ous-central1-a.NODE_LOCATION1,NODE_LOCATION2,...: un elenco separato da virgole di zone, nella stessa regione del control plane, in cui creare i nodi. Scegli zone con disponibilità di GPU.
Crea un pool di nodi con scalabilità automatica con
a2-ultragpu-1gistanze che hanno una GPU NVIDIA A100 (80 GB) in ogni istanza:gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --enable-autoscaling \ --max-nodes=5 \ --machine-type="a2-ultragpu-1g" \ --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
Installa i driver DRA
Estrai e aggiorna il grafico Helm che contiene il driver NVIDIA DRA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstalla il driver GPU NVIDIA DRA con la versione 25.8.0 o successiva:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Per i nodi Ubuntu, specifica il percorso della directory
"/opt/nvidia"nel flag--set nvidiaDriverRoot.
Verifica che la tua infrastruttura sia pronta per DRA
Verifica che i pod del driver DRA siano in esecuzione:
kubectl get pods -n nvidia-dra-driver-gpuL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sVerifica che ResourceSlice elenchi i dispositivi hardware che hai aggiunto:
kubectl get resourceslices -o yamlL'output è simile al seguente:
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""