DRA 워크로드용 GKE 인프라 준비

이 문서에서는 동적 리소스 할당 (DRA)을 지원하도록 Google Kubernetes Engine (GKE) 인프라를 수동으로 설정하는 방법을 설명합니다. 설정 단계에는 GPU를 사용하는 노드 풀 만들기 및 DRA 드라이버 설치가 포함됩니다.

이 문서는 애플리케이션 운영자가 워크로드에서 클레임할 수 있는 전문 하드웨어 기기로 인프라를 만들려는 플랫폼 관리자 를 대상으로 합니다.

제한사항

다음과 같은 제한사항이 적용됩니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • 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 노드 풀을 만들고 구성하려면 다음 단계를 따르세요.

  1. GPU 노드 풀을 만듭니다. 다음 예시 명령어는 구성이 다른 노드 풀을 만듭니다.

    • L4 GPU가 2개 있는 g2-standard-24 인스턴스로 노드 풀을 만듭니다.

      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를 사용할 수 있는 영역을 선택합니다 .
    • 각 인스턴스에 NVIDIA A100 (80GB) GPU가 하나씩 있는 a2-ultragpu-1g 인스턴스로 자동 확장 노드 풀을 만듭니다.

      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 노드의 경우 "/opt/nvidia" 디렉터리 경로를 --set nvidiaDriverRoot 플래그에서 지정합니다.

인프라가 DRA를 지원하는지 확인

  1. DRA 드라이버 포드가 실행 중인지 확인합니다.

    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: ""
    

다음 단계