Este documento explica como configurar manualmente sua infraestrutura do Google Kubernetes Engine (GKE) para oferecer suporte à alocação dinâmica de recursos (DRA). As etapas de configuração incluem a criação de pools de nós que usam GPUs e a instalação de drivers de DRA.
Este documento é destinado a administradores de plataformas que querem criar infraestrutura com dispositivos de hardware especializados que os operadores de aplicativos podem reivindicar em cargas de trabalho.
Limitações
Considere as seguintes limitações:
- Limitações da DRA no GKE
- Limitações específicas do dispositivo, que se aplicam independentemente de você usar DRA: cargas de trabalho de GPU em clusters padrão
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Tenha um cluster GKE Standard que execute a versão 1.35 ou mais recente. Também é possível criar um cluster regional.
Instale o Helm. Se você usa o Cloud Shell, o Helm já está instalado.
Criar um pool de nós do GKE com GPUs
Esta seção mostra como criar um pool de nós de GPU e instalar os drivers de DRA correspondentes. As etapas desta seção se aplicam apenas a pools de nós criados manualmente. Para criar um pool de nós de GPU que ofereça suporte à DRA, faça o seguinte:
- Desative a instalação automática do driver de GPU: especifique a
gpu-driver-version=disabledopção na flag--accelerator. - Desative o plug-in do dispositivo de GPU: adicione o
gke-no-default-nvidia-gpu-device-plugin=trueidentificador de nó ao pool de nós. - Execute o DaemonSet do driver de DRA: adicione o
nvidia.com/gpu.present=trueidentificador de nó ao pool de nós. - Configure o escalonamento automático: para usar o escalonador automático de cluster no pool de nós,
adicione o identificador de nó
cloud.google.com/gke-nvidia-gpu-dra-driver=trueao pool de nós. O escalonador automático de cluster usa esse identificador de nó para identificar os nós que executam o driver de DRA para GPUs.
Para criar e configurar pools de nós de GPU, siga estas etapas:
Crie um pool de nós de GPU. Os comandos de exemplo a seguir criam pools de nós com configurações diferentes:
Crie um pool de nós com uma instância
g2-standard-24que tenha duas 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=trueSubstitua:
NODEPOOL_NAME: um nome para o pool de nós.CLUSTER_NAME: o nome do cluster.CONTROL_PLANE_LOCATION: a região ou zona de o plano de controle do cluster, comous-central1ouus-central1-a.NODE_LOCATION1,NODE_LOCATION2,...: uma lista separada por vírgulas de zonas, na mesma região do plano de controle, para criar nós. Escolha zonas que tenham disponibilidade de GPU.
Crie um pool de nós com escalonamento automático com instâncias
a2-ultragpu-1gque tenham uma GPU NVIDIA A100 (80 GB) em cada instância: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
Instalar drivers de DRA
Extraia e atualize o gráfico do Helm que contém o driver de DRA da NVIDIA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstale o driver de GPU DRA da NVIDIA com a versão 25.8.0 ou mais recente:
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 nós do Ubuntu, especifique o caminho do diretório
"/opt/nvidia"na--set nvidiaDriverRootflag.
Verificar se a infraestrutura está pronta para a DRA
Verifique se os pods do driver de DRA estão em execução:
kubectl get pods -n nvidia-dra-driver-gpuO resultado será assim:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sConfirme se o ResourceSlice lista os dispositivos de hardware que você adicionou:
kubectl get resourceslices -o yamlO resultado será assim:
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: ""