Ce document explique comment configurer manuellement votre infrastructure Google Kubernetes Engine (GKE) pour prendre en charge l'allocation dynamique des ressources (DRA). La procédure de configuration inclut la création de pools de nœuds utilisant des GPU et l'installation de pilotes DRA.
Ce document s'adresse aux administrateurs de plate-forme qui souhaitent créer une infrastructure avec des périphériques 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 DRA dans GKE
- Limites spécifiques aux appareils, qui s'appliquent que vous utilisiez ou non DRA : Charges de travail GPU sur les clusters Standard
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.
Disposer 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 DRA, vous devez procéder comme suit :
- Désactivez l'installation automatique du pilote de GPU : spécifiez l'option
gpu-driver-version=disableddans l'indicateur--accelerator. - Désactivez le plug-in d'appareil GPU : ajoutez le libellé de nœud
gke-no-default-nvidia-gpu-device-plugin=trueau pool de nœuds. - Exécutez le DaemonSet du pilote DRA : ajoutez le libellé de nœud
nvidia.com/gpu.present=trueau 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-24dotée de 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œuds.CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: région ou zone du plan de contrôle du cluster, par exempleus-central1ouus-central1-a.NODE_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 avec autoscaling et des instances
a2-ultragpu-1gdotées d'un GPU NVIDIA A100 (80 Go) chacune :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 de 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'indicateur--set nvidiaDriverRoot.
Vérifier que votre infrastructure est prête pour DRA
Vérifiez que les pods de votre 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 liste les périphériques 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: ""