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:
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.
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
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
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:
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
Navega al directorio que contiene los gráficos:
cd common-infra/common/charts
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: ""