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:
- Limitaciones de la 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 que se describen en este documento.
Tener un clúster de GKE Standard 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, 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=disableden la marca--accelerator. - Inhabilita el complemento para dispositivos GPU: Agrega la etiqueta de nodo
gke-no-default-nvidia-gpu-device-plugin=trueal grupo de nodos. - Ejecuta el DaemonSet del controlador de DRA: Agrega la etiqueta de nodo
nvidia.com/gpu.present=trueal 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=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 de
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: 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, comous-central1ous-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-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 NVIDIA DRA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstala 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
Verifica que tus Pods de controladores de DRA se estén ejecutando:
kubectl get pods -n nvidia-dra-driver-gpuEl resultado es similar a lo siguiente:
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 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: ""