为 DRA 工作负载准备 GKE 基础架构

本文档介绍了如何手动设置 Google Kubernetes Engine (GKE) 基础设施以支持动态资源分配 (DRA)。设置步骤包括创建使用 GPU 的节点池和安装 DRA 驱动程序。

本文档适用于希望使用专用硬件设备创建基础设施,以便应用运维人员可以在工作负载中声明这些设备的平台管理员

限制

存在以下限制:

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行 gcloud components update 命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
  • 拥有运行 1.35 版或更高版本的 GKE Standard 集群。您还可以创建区域级集群

  • 安装 Helm。 如果您使用 Cloud Shell,则 Helm 已安装。

创建具有 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 节点池,请按以下步骤操作:

  1. 创建 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-central1us-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
      
  2. 手动安装 NVIDIA GPU 驱动程序

  3. 安装 DRA 驱动程序

安装 DRA 驱动程序

  1. 拉取并更新包含 NVIDIA DRA 驱动程序的 Helm 图表:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. 安装版本为 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 做好准备

  1. 验证 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
    
  2. 确认 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: ""
    

后续步骤