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 node pool che utilizzano le 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 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.
Avere un cluster GKE Standard che esegue la versione 1.35 o successive. Puoi anche creare un cluster regionale.
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 node pool creati manualmente. Per creare un pool di nodi GPU che supporti DRA, devi:
- Disattivare l'installazione automatica dei driver GPU: specifica l'
gpu-driver-version=disabledopzione nel--acceleratorflag. - Disabilitare il plug-in del dispositivo GPU: aggiungi l'
gke-no-default-nvidia-gpu-device-plugin=trueetichetta del nodo al node pool. - Eseguire il DaemonSet del driver DRA: aggiungi l'
nvidia.com/gpu.present=trueetichetta del nodo al pool di nodi. - Configurare la scalabilità automatica: per utilizzare il gestore della scalabilità automatica dei cluster nel pool di nodi,
aggiungi l'etichetta del nodo
cloud.google.com/gke-nvidia-gpu-dra-driver=trueal pool di nodi. Il gestore della scalabilità automatica dei cluster utilizza questa etichetta del nodo per identificare i nodi che eseguono il driver DRA per le GPU.
Per creare e configurare i node pool GPU:
Crea un pool di nodi GPU. I seguenti comandi di esempio creano node pool con configurazioni diverse:
Crea un pool di nodi con un'istanza
g2-standard-24che ha 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 di 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 le zone in cui sono disponibili le GPU.
Crea un pool di nodi con scalabilità automatica con istanze
a2-ultragpu-1gche 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 successive:
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
"/opt/nvidia"percorso della directory nel--set nvidiaDriverRootflag.
Verifica che l'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: ""