本文档介绍了如何手动设置 Google Kubernetes Engine (GKE) 基础设施以支持 动态资源分配 (DRA)。 设置步骤包括创建使用 GPU 的节点池,以及安装 DRA 驱动程序。
本文档适用于 希望使用专用硬件设备创建基础设施的 平台管理员, 应用运维人员可以在工作负载中声明这些设备。
限制
存在以下限制:
- GKE 中 DRA 的限制
- 设备专用限制,无论您是否使用 DRA: 标准集群上的 GPU 工作负载
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如需使用 Google Cloud CLI 执行此任务,
请安装并
初始化
gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新 版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
创建具有 GPU 的 GKE 节点池
本部分介绍了如何创建 GPU 节点池并安装相应的 DRA 驱动程序。本部分中的步骤仅适用于您手动创建的节点池。如需创建支持 DRA 的 GPU 节点池,您必须执行以下操作:
- 停用自动 GPU 驱动程序安装:在
--accelerator标志中指定gpu-driver-version=disabled选项。 - 停用 GPU 设备插件:将
gke-no-default-nvidia-gpu-device-plugin=true节点标签添加到节点 池。 - 运行 DRA 驱动程序 DaemonSet:将
nvidia.com/gpu.present=true节点标签添加到节点池。 - 配置自动扩缩:如需在节点池中使用集群自动扩缩器,
请将
cloud.google.com/gke-nvidia-gpu-dra-driver=true节点标签添加到 节点池。集群自动扩缩器使用此节点标签来识别运行 GPU 的 DRA 驱动程序的节点。
如需创建和配置 GPU 节点池,请按以下步骤操作:
创建 GPU 节点池。以下示例命令会创建具有不同配置的节点池:
创建一个具有
g2-standard-24实例的节点池,该实例具有两个 L4 GPU: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=true替换以下内容:
NODEPOOL_NAME:节点池的名称。CLUSTER_NAME:您的集群的名称。CONTROL_PLANE_LOCATION:集群控制平面所在的区域或可用区,例如us-central1或us-central1-a。NODE_LOCATION1,NODE_LOCATION2,...:一个逗号分隔列表,其中包含与控制平面位于同一区域的可用区,用于在其中创建节点。选择具有 GPU 可用性的可用区。
创建一个具有
a2-ultragpu-1g实例的自动扩缩节点池,每个实例中有一个 NVIDIA A100 (80 GB) GPU: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
安装 DRA 驱动程序
拉取并更新包含 NVIDIA DRA 驱动程序的 Helm 图表:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update安装版本为 25.8.0 或更高版本的 NVIDIA DRA GPU 驱动程序:
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'对于 Ubuntu 节点,请在
--set nvidiaDriverRoot标志中指定"/opt/nvidia"目录路径。
验证您的基础架构是否已为 DRA 做好准备
验证您的 DRA 驱动程序 Pod 是否正在运行:
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确认 ResourceSlice 列出了您添加的硬件设备:
kubectl get resourceslices -o yaml输出类似于以下内容:
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: ""