Prepara l'infrastruttura GKE per i carichi di lavoro 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 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:

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

  1. 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-24 che 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=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 di 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 le zone in cui sono disponibili le GPU.
    • Crea un pool di nodi con scalabilità automatica con istanze a2-ultragpu-1g 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 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 nvidiaDriverRoot flag.

Verifica che l'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