En este documento, se explica cómo configurar 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 GPU o TPU, y la instalación de controladores de DRA en tu clúster. Este documento está dirigido 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.
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)
- En el caso de las TPU, debes habilitar las versiones
v1beta1yv1beta2de los tipos de API de DRA. Esta limitación no se aplica a las GPUs, que pueden usar versiones de la API dev1.
Requisitos
Para usar DRA, tu clúster de GKE debe ejecutar la versión 1.34 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 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.34 o posterior También puedes crear un clúster regional.
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.shPara usar la DRA en las TPU, habilita las versiones
v1beta1yv1beta2de los tipos de API de la DRA:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices,resource.k8s.io/v1beta2/deviceclasses,resource.k8s.io/v1beta2/resourceclaims,resource.k8s.io/v1beta2/resourceclaimtemplates,resource.k8s.io/v1beta2/resourceslices"
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. Para crear un grupo de nodos que admita la DRA, selecciona una de las siguientes opciones:
GPU
Para usar DRA para GPUs, debes hacer lo siguiente cuando crees el grupo de nodos:
- Inhabilita la instalación automática de controladores de GPU especificando la opción
gpu-driver-version=disableden la marca--acceleratorcuando configures las GPU para un grupo de nodos. - Inhabilita el complemento de dispositivo GPU agregando la etiqueta de nodo
gke-no-default-nvidia-gpu-device-plugin=true. - Permite que el DaemonSet del controlador de DRA se ejecute en los nodos agregando la etiqueta de nodo
nvidia.com/gpu.present=true.
Para crear un grupo de nodos de GPU para DRA, sigue estos pasos:
Crea un grupo de nodos con el hardware requerido. En el siguiente ejemplo, se crea un grupo de nodos que tiene una instancia de
g2-standard-24en Container-Optimized OS con dos GPUs L4.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --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.
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. En el siguiente ejemplo, se crea un grupo de nodos de TPU Trillium con compatibilidad con DRA:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--location=CONTROL_PLANE_LOCATION \
--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.CONTROL_PLANE_LOCATION: Es la región o zona del plano de control del clúster, comous-central1ous-central1-a.
Instala los controladores de DRA
GPU
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 updateInstala el controlador DRA de NVIDIA con la versión
25.3.2:helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.3.2" --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
Clona el repositorio
ai-on-gkepara acceder a los gráficos de Helm que contienen los controladores de DRA para GPU y TPU:git clone https://github.com/ai-on-gke/common-infra.gitNavega al directorio que contiene los gráficos:
cd common-infra/common/chartsInstala el controlador de DRA de TPU:
./tpu-dra-driver/install-tpu-dra-driver.sh
Verifica que tu infraestructura esté lista para la DRA
Para verificar que tus Pods de controladores de DRA se estén ejecutando, selecciona una de las siguientes opciones:
GPU
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 46sTPU
kubectl get pods -n tpu-dra-driverEl resultado es similar a lo siguiente:
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30sConfirma que
ResourceSlicemuestre los dispositivos de hardware que agregaste:kubectl get resourceslices -o yamlSi usaste el ejemplo de la sección anterior, el resultado será similar al siguiente, según si configuraste GPUs o TPUs:
GPU
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: ""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: ""