Prepara la infraestructura de GKE para las cargas de trabajo de DRA

En este documento, se explica cómo configurar manualmente tu infraestructura de Google Kubernetes Engine (GKE) para admitir la asignación dinámica de recursos (DRA). Los pasos de configuración incluyen la creación de grupos de nodos que usan GPUs y la instalación de controladores de DRA.

Este documento está dirigido a los administradores de plataformas que desean crear infraestructura con dispositivos de hardware especializados que los operadores de aplicaciones pueden reclamar en las cargas de trabajo.

Limitaciones

Se aplica la siguiente limitación:

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.

Crea un grupo de nodos de GKE con GPUs

En esta sección, se muestra cómo crear un grupo de nodos de GPU y, luego, instalar los controladores de DRA correspondientes. Los pasos de esta sección solo se aplican a los grupos de nodos que creas de forma manual. Para crear un grupo de nodos de GPU que admita DRA, debes hacer lo siguiente:

  • Inhabilita la instalación automática del controlador de GPU: Especifica la opción gpu-driver-version=disabled en la marca --accelerator.
  • Inhabilita el complemento para dispositivos GPU: Agrega la etiqueta de nodo gke-no-default-nvidia-gpu-device-plugin=true al grupo de nodos.
  • Ejecuta el DaemonSet del controlador de DRA: Agrega la etiqueta de nodo nvidia.com/gpu.present=true al grupo de nodos.
  • Configura el ajuste de escala automático: Para usar el escalador automático del clúster en tu grupo de nodos, agrega la etiqueta de nodo cloud.google.com/gke-nvidia-gpu-dra-driver=true al grupo de nodos. El escalador automático del clúster usa esta etiqueta de nodo para identificar los nodos que ejecutan el controlador de DRA para GPUs.

Para crear y configurar grupos de nodos de GPU, sigue estos pasos:

  1. Crea un grupo de nodos de GPU. Los siguientes comandos de ejemplo crean grupos de nodos con diferentes configuraciones:

    • Crea un grupo de nodos con una instancia de g2-standard-24 que tenga dos GPUs 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
      

      Reemplaza lo siguiente:

      • NODEPOOL_NAME: Es el nombre de tu grupo de nodos.
      • CLUSTER_NAME: El nombre de tu clúster.
      • CONTROL_PLANE_LOCATION: Es la región o zona del plano de control del clúster, como us-central1 o us-central1-a.
      • NODE_LOCATION1,NODE_LOCATION2,...: Es una lista de zonas separadas por comas, en la misma región que el plano de control, en las que se crearán los nodos. Elige zonas que tengan disponibilidad de GPU.
    • Crea un grupo de nodos con ajuste de escala automático con instancias a2-ultragpu-1g que tengan una GPU NVIDIA A100 (80 GB) en cada instancia:

      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. Instala de forma manual los controladores de GPU de NVIDIA.

  3. Instala los controladores de DRA.

Instala los controladores de DRA

  1. Extrae y actualiza el gráfico de Helm que contiene el controlador NVIDIA DRA:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Instala el controlador de GPU de NVIDIA DRA con la versión 25.8.0 o posterior:

    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'
    

    En el caso de los nodos de Ubuntu, especifica la ruta de acceso del directorio "/opt/nvidia" en la marca --set nvidiaDriverRoot.

Verifica que tu infraestructura esté lista para la DRA

  1. Verifica que tus Pods de controladores de DRA se estén ejecutando:

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

    El resultado es similar a lo siguiente:

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. Confirma que ResourceSlice enumera los dispositivos de hardware que agregaste:

    kubectl get resourceslices -o yaml
    

    El resultado es similar a lo siguiente:

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

¿Qué sigue?