Préparer l'infrastructure GKE pour les charges de travail DRA

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 :

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=disabled dans l'indicateur --accelerator.
  • Désactivez le plug-in d'appareil GPU : ajoutez le libellé de nœud gke-no-default-nvidia-gpu-device-plugin=true au pool de nœuds.
  • Exécutez le DaemonSet du pilote DRA : ajoutez le libellé de nœud nvidia.com/gpu.present=true 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=true au 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 :

  1. 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-24 doté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=true
      

      Remplacez les éléments suivants :

      • NODEPOOL_NAME : nom de votre pool de nœuds.
      • CLUSTER_NAME : nom du cluster
      • CONTROL_PLANE_LOCATION : région ou zone du plan de contrôle du cluster, par exemple us-central1 ou us-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-1g doté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
      
  2. Installez manuellement les pilotes de GPU NVIDIA.

  3. Installez les pilotes DRA.

Installer les pilotes DRA

  1. Extrayez et mettez à jour le graphique Helm contenant le pilote NVIDIA DRA :

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Installez 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

  1. Vérifiez que les pods de votre pilote DRA sont en cours d'exécution :

    kubectl get pods -n nvidia-dra-driver-gpu
    

    Le résultat ressemble à ce qui suit :

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. Vérifiez que ResourceSlice liste les périphériques que vous avez ajoutés :

    kubectl get resourceslices -o yaml
    

    Le 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: ""
    

Étapes suivantes