En este documento, se explica cómo configurar de forma manual 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:
- Limitaciones de DRA en GKE
- Limitaciones específicas del dispositivo, que se aplican independientemente de si usas DRA: cargas de trabajo de GPU en clústeres estándar
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 updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.
Ten un clúster estándar de GKE que ejecute la versión 1.35 o posterior. También puedes crear un clúster regional.
Instalar Helm. Si usas Cloud Shell, Helm ya está instalado.
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 cómo 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:
- Inhabilitar la instalación automática del controlador de GPU: especifica la
gpu-driver-version=disabledopción en la--acceleratormarca. - Inhabilitar el complemento del dispositivo de GPU: agrega la
gke-no-default-nvidia-gpu-device-plugin=trueetiqueta de nodo al grupo de nodos. - Ejecutar el DaemonSet del controlador de DRA: agrega la
nvidia.com/gpu.present=trueetiqueta de nodo al grupo de nodos. - Configurar 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=trueal 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:
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
g2-standard-24que 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=trueReemplaza lo siguiente:
NODEPOOL_NAME: Un nombre para tu grupo de nodos.CLUSTER_NAME: El nombre de tu clúster.CONTROL_PLANE_LOCATION: La región o zona de l plano de control del clúster, comous-central1ous-central1-a.NODE_LOCATION1,NODE_LOCATION2,...: Una lista separada por comas de zonas, en la misma región que el plano de control, para crear nodos. Elige zonas que tengan disponibilidad de GPU.
Crea un grupo de nodos con ajuste de escala automático con instancias
a2-ultragpu-1gque 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
Instala los controladores de DRA
Extrae y actualiza el gráfico de Helm que contiene el controlador de DRA de NVIDIA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstala el controlador de GPU de DRA de NVIDIA 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'Para los nodos de Ubuntu, especifica la ruta de acceso del directorio
"/opt/nvidia"en la--set nvidiaDriverRootmarca.
Verifica que tu infraestructura esté lista para DRA
Verifica que tus Pods del controlador de DRA se estén ejecutando:
kubectl get pods -n nvidia-dra-driver-gpuEl resultado es similar a este:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sConfirma que ResourceSlice enumera los dispositivos de hardware que agregaste:
kubectl get resourceslices -o yamlEl resultado es similar a este:
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: ""