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


En esta página, se explica cómo configurar tu infraestructura de Google Kubernetes Engine (GKE) para admitir la asignación dinámica de recursos (DRA). En esta página, crearás clústeres que pueden implementar cargas de trabajo de GPU o TPU, y, luego, instalarás de forma manual los controladores que necesitas para habilitar DRA.

Esta página está destinada a los administradores de plataformas que desean reducir la complejidad y la sobrecarga de la configuración de la infraestructura con dispositivos de hardware especializados.

Acerca del DRA

La DRA es una función integrada de Kubernetes que te permite solicitar, asignar y compartir hardware de forma flexible en tu clúster entre Pods y contenedores. Para obtener más información, consulta Acerca de la asignación dinámica de recursos.

Limitaciones

  • No se admite el aprovisionamiento automático de nodos.
  • Los clústeres de Autopilot no admiten DRA.
  • La instalación automática del controlador de GPU no es compatible con DRA.
  • No puedes usar las siguientes funciones de uso compartido de GPU:
    • GPU de tiempo compartido
    • GPU de varias instancias
    • Servicio de varios procesos (MPS)

Requisitos

Para usar DRA, tu versión de GKE debe ser la 1.32.1-gke.1489001 o una posterior.

También debes conocer los siguientes requisitos y limitaciones, según el tipo de hardware que quieras usar:

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 quieres usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.
  • Si no usas Cloud Shell, instala la CLI de Helm:

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
    

Crea un clúster de GKE Standard

Crea un clúster en modo estándar que habilite las APIs beta de Kubernetes para DRA:

   gcloud container clusters create CLUSTER_NAME \
       --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
       --cluster-version=GKE_VERSION

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es un nombre para tu clúster.
  • GKE_VERSION: Es la versión de GKE que se usará para el clúster y los nodos. Debe ser 1.32.1-gke.1489001 o una versión posterior.

Crea un grupo de nodos de GKE con GPUs o TPUs

En GKE, puedes usar DRA con GPU y TPU. La configuración del grupo de nodos, como el tipo de máquina, el tipo y la cantidad de aceleradores, el sistema operativo del nodo y las ubicaciones de los nodos, depende de tus requisitos.

GPU

Para usar DRA para GPUs, debes hacer lo siguiente cuando crees el grupo de nodos:

  • Inhabilita la instalación automática del controlador de GPU con gpu-driver-version=disabled.
  • Inhabilita el complemento de dispositivo GPU agregando la etiqueta de nodo gke-no-default-nvidia-gpu-device-plugin=true.
  • Agrega la etiqueta de nodo nvidia.com/gpu.present=true para permitir que el DaemonSet del controlador de DRA se ejecute en los nodos.

Para crear un grupo de nodos de GPU para DRA, sigue estos pasos:

  1. Crea un grupo de nodos con el hardware requerido. En el siguiente ejemplo, se crea un grupo de nodos que tiene instancias g2-standard-24 en Container-Optimized OS con dos GPU L4.

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --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.
  2. Instala de forma manual los controladores en tus nodos de Container-Optimized OS o Ubuntu. Para obtener instrucciones detalladas, consulta Instala controladores de GPU de NVIDIA de forma manual.

TPU

Para usar DRA en las TPU, debes inhabilitar el complemento del dispositivo de TPU agregando la etiqueta del nodo gke-no-default-tpu-device-plugin=true.

Crea un grupo de nodos que use TPUs. En el siguiente ejemplo, se crea un grupo de nodos de TPU Trillium:

gcloud container node-pools create NODEPOOL_NAME \
    --cluster CLUSTER_NAME --num-nodes 1 \
    --node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
    --machine-type=ct6e-standard-8t

Reemplaza lo siguiente:

  • NODEPOOL_NAME: Es el nombre de tu grupo de nodos.
  • CLUSTER_NAME: El nombre de tu clúster.

Instala los controladores de DRA

GPU

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

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Instala el controlador de DRA de NVIDIA con la versión 25.3.0-rc.4:

    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.0-rc.4" --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
    

    Para los nodos de Ubuntu, usa la ruta de acceso al directorio nvidiaDriverRoot="/opt/nvidia".

TPU

Puedes instalar controladores de DRA para TPU con el gráfico de Helm proporcionado. Para acceder a los gráficos de Helm, completa los siguientes pasos:

  1. Clona el repositorio ai-on-gke para acceder a los gráficos de Helm que contienen los controladores de DRA para GPUs y TPUs:

    git clone https://github.com/ai-on-gke/common-infra.git
    
  2. Navega al directorio que contiene los gráficos:

    cd common-infra/common/charts
    
  3. Instala el controlador de DRA de TPU:

    ./tpu-dra-driver/install-tpu-dra-driver.sh
    

Verifica que tu infraestructura esté lista para la DRA

Verifica que el Pod del controlador de DRA esté en ejecución.

GPU

kubectl get pods -n nvidia-dra-driver-gpu
NAME                                         READY   STATUS    RESTARTS   AGE
nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s

TPU

kubectl get pods -n tpu-dra-driver
NAME                                         READY   STATUS    RESTARTS   AGE
tpu-dra-driver-kubeletplugin-h6m57           1/1     Running   0          30s

Confirma que ResourceSlice muestre los dispositivos de hardware que agregaste:

kubectl get resourceslices -o yaml

Si usaste el ejemplo de la sección anterior, el ResourceSlice se parecerá al siguiente, según el tipo de hardware que hayas usado:

GPU

En el siguiente ejemplo, se crea una máquina g2-standard-24 con dos GPUs L4.

apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
  kind: ResourceSlice
  metadata:
    # lines omitted for clarity
  spec:
    devices:
    - basic:
        attributes:
          architecture:
            string: Ada Lovelace
          brand:
            string: Nvidia
          cudaComputeCapability:
            version: 8.9.0
          cudaDriverVersion:
            version: 12.9.0
          driverVersion:
            version: 575.57.8
          index:
            int: 0
          minor:
            int: 0
          productName:
            string: NVIDIA L4
          type:
            string: gpu
          uuid:
            string: GPU-4d403095-4294-6ddd-66fd-cfe5778ef56e
        capacity:
          memory:
            value: 23034Mi
      name: gpu-0
    - basic:
        attributes:
          architecture:
            string: Ada Lovelace
          brand:
            string: Nvidia
          cudaComputeCapability:
            version: 8.9.0
          cudaDriverVersion:
            version: 12.9.0
          driverVersion:
            version: 575.57.8
          index:
            int: 1
          minor:
            int: 1
          productName:
            string: NVIDIA L4
          type:
            string: gpu
          uuid:
            string: GPU-cc326645-f91d-d013-1c2f-486827c58e50
        capacity:
          memory:
            value: 23034Mi
      name: gpu-1
    driver: gpu.nvidia.com
    nodeName: gke-cluster-gpu-pool-9b10ff37-mf70
    pool:
      generation: 1
      name: gke-cluster-gpu-pool-9b10ff37-mf70
      resourceSliceCount: 1
kind: List
metadata:
  resourceVersion: ""

TPU

apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
  kind: ResourceSlice
  metadata:
    # lines omitted for clarity
  spec:
    devices:
    - basic:
        attributes:
          index:
            int: 0
          tpuGen:
            string: v6e
          uuid:
            string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
      name: "0"
    - basic:
        attributes:
          index:
            int: 1
          tpuGen:
            string: v6e
          uuid:
            string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
      name: "1"
    - basic:
        attributes:
          index:
            int: 2
          tpuGen:
            string: v6e
          uuid:
            string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
      name: "2"
    - basic:
        attributes:
          index:
            int: 3
          tpuGen:
            string: v6e
          uuid:
            string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
      name: "3"
    driver: tpu.google.com
    nodeName: gke-tpu-b4d4b61b-fwbg
    pool:
      generation: 1
      name: gke-tpu-b4d4b61b-fwbg
      resourceSliceCount: 1
kind: List
metadata:
  resourceVersion: ""

¿Qué sigue?