Ce document explique comment configurer manuellement votre infrastructure Google Kubernetes Engine (GKE) pour prendre en charge l'allocation dynamique des ressources (DRA). Les étapes de configuration incluent la création de pools de nœuds qui utilisent des GPU et l'installation de pilotes DRA.
Ce document est destiné aux administrateurs de plate-forme qui souhaitent créer une infrastructure avec des appareils matériels spécialisés que les opérateurs d'applications peuvent revendiquer dans les charges de travail.
Limites
Les limites suivantes s'appliquent :
- Limites de la DRA dans GKE
- Limites spécifiques aux appareils, qui s'appliquent que vous utilisiez ou non la DRA : charges de travail GPU sur des clusters standards
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Disposez d'un cluster GKE Standard exécutant la version 1.35 ou ultérieure. Vous pouvez également créer un cluster régional.
Installez Helm. Si vous utilisez Cloud Shell, Helm est déjà installé.
Créer un pool de nœuds GKE avec des GPU
Cette section explique comment créer un pool de nœuds GPU et installer les pilotes DRA correspondants. Les étapes de cette section ne s'appliquent qu'aux pools de nœuds que vous créez manuellement. Pour créer un pool de nœuds GPU compatible avec la DRA, vous devez procéder comme suit :
- Désactiver l'installation automatique des pilotes GPU : spécifiez l'
gpu-driver-version=disabledoption dans l'--acceleratoroption. - Désactiver le plug-in d'appareil GPU : ajoutez le
gke-no-default-nvidia-gpu-device-plugin=truelibellé de nœud au pool de nœuds. - Exécuter le DaemonSet du pilote DRA : ajoutez le
nvidia.com/gpu.present=truelibellé de nœud au pool de nœuds. - Configurer l'autoscaling : pour utiliser l'autoscaler de cluster dans votre pool de nœuds,
ajoutez le libellé de nœud
cloud.google.com/gke-nvidia-gpu-dra-driver=trueau pool de nœuds. L'autoscaler de cluster utilise ce libellé de nœud pour identifier les nœuds qui exécutent le pilote DRA pour les GPU.
Pour créer et configurer des pools de nœuds GPU, procédez comme suit :
Créez un pool de nœuds GPU. Les exemples de commandes suivants créent des pools de nœuds avec différentes configurations :
Créez un pool de nœuds avec une instance
g2-standard-24comportant deux 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=trueRemplacez les éléments suivants :
NODEPOOL_NAME: nom de votre pool de nœudsCLUSTER_NAME: nom de votre clusterCONTROL_PLANE_LOCATION: région ou zone du plan de contrôle du cluster, par exempleus-central1ouus-central1-aNODE_LOCATION1,NODE_LOCATION2,...: liste de zones séparées par une virgule, dans la même région que le plan de contrôle, dans lesquelles créer des nœuds Choisissez des zones où les GPU sont disponibles.
Créez un pool de nœuds autoscalé avec des instances
a2-ultragpu-1gcomportant un GPU NVIDIA A100 (80 Go) dans chaque instance :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
Installer les pilotes DRA
Extrayez et mettez à jour le graphique Helm contenant le pilote NVIDIA DRA :
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstallez le pilote GPU NVIDIA DRA avec la version 25.8.0 ou ultérieure :
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'Pour les nœuds Ubuntu, spécifiez le chemin d'accès au répertoire
"/opt/nvidia"dans l'--set nvidiaDriverRootoption.
Vérifier que votre infrastructure est prête pour la DRA
Vérifiez que vos pods de pilote DRA sont en cours d'exécution :
kubectl get pods -n nvidia-dra-driver-gpuLe résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sVérifiez que ResourceSlice répertorie les appareils matériels que vous avez ajoutés :
kubectl get resourceslices -o yamlLe résultat ressemble à ce qui suit :
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: ""
Étape suivante
- Déployer vos charges de travail avec la DRA
- Allouer des ressources réseau avec la DRA (version bêta)