Prepara l'infrastruttura GKE per i workload DRA

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:

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.

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=disabled nel flag --accelerator.
  • Disattiva il plug-in del dispositivo GPU: aggiungi l'etichetta del nodo gke-no-default-nvidia-gpu-device-plugin=true al pool di nodi.
  • Esegui il DaemonSet del driver DRA: aggiungi l'etichetta del nodo nvidia.com/gpu.present=true al 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=true al 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:

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

      Sostituisci 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 esempio us-central1 o us-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-1g istanze 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
      
  2. Installa manualmente i driver GPU NVIDIA.

  3. Installa i driver DRA.

Installa i driver DRA

  1. Estrai e aggiorna il grafico Helm che contiene il driver NVIDIA DRA:

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

  1. Verifica che i pod del driver DRA siano in esecuzione:

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

    L'output è simile al seguente:

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. Verifica che ResourceSlice elenchi i dispositivi hardware che hai aggiunto:

    kubectl get resourceslices -o yaml
    

    L'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: ""
    

Passaggi successivi