Menyiapkan infrastruktur GKE untuk workload DRA

Dokumen ini menjelaskan cara menyiapkan infrastruktur Google Kubernetes Engine (GKE) secara manual untuk mendukung alokasi resource dinamis (DRA). Langkah-langkah penyiapan mencakup pembuatan node pool yang menggunakan GPU dan penginstalan driver DRA.

Dokumen ini ditujukan untuk administrator platform yang ingin membuat infrastruktur dengan perangkat hardware khusus yang dapat diklaim oleh operator aplikasi dalam workload.

Batasan

Batasan berikut berlaku:

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung perintah yang dijalankan dalam dokumen ini.
  • Memiliki cluster GKE Standar yang menjalankan versi 1.35 atau yang lebih baru. Anda juga dapat membuat cluster regional.

  • Instal Helm. Jika Anda menggunakan Cloud Shell, Helm sudah terinstal.

Membuat node pool GKE dengan GPU

Bagian ini menunjukkan cara membuat node pool GPU dan menginstal driver DRA yang sesuai. Langkah-langkah di bagian ini hanya berlaku untuk node pool yang Anda buat secara manual. Untuk membuat node pool GPU yang mendukung DRA, Anda harus melakukan hal berikut:

  • Menonaktifkan penginstalan driver GPU otomatis: tentukan opsi gpu-driver-version=disabled dalam flag --accelerator.
  • Menonaktifkan plugin perangkat GPU: tambahkan label node gke-no-default-nvidia-gpu-device-plugin=true ke node pool.
  • Menjalankan DaemonSet driver DRA: tambahkan nvidia.com/gpu.present=true label node ke node pool.
  • Mengonfigurasi penskalaan otomatis: untuk menggunakan penskala otomatis cluster di node pool, tambahkan label node cloud.google.com/gke-nvidia-gpu-dra-driver=true ke node pool. Penskala otomatis cluster menggunakan label node ini untuk mengidentifikasi node yang menjalankan driver DRA untuk GPU.

Untuk membuat dan mengonfigurasi node pool GPU, ikuti langkah-langkah berikut:

  1. Buat node pool GPU. Contoh perintah berikut membuat node pool dengan konfigurasi yang berbeda:

    • Buat node pool dengan instance g2-standard-24 yang memiliki dua GPU 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=true
      

      Ganti kode berikut:

      • NODEPOOL_NAME: nama untuk node pool Anda.
      • CLUSTER_NAME: nama cluster Anda.
      • CONTROL_PLANE_LOCATION: region atau zona dari bidang kontrol cluster, seperti us-central1 atau us-central1-a.
      • NODE_LOCATION1,NODE_LOCATION2,...: daftar zona yang dipisahkan koma, di region yang sama dengan bidang kontrol, untuk membuat node. Pilih zona yang memiliki ketersediaan GPU.
    • Buat node pool yang diskalakan otomatis dengan instance a2-ultragpu-1g yang memiliki satu GPU NVIDIA A100 (80 GB) di setiap instance:

      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. Instal driver GPU NVIDIA secara manual.

  3. Instal driver DRA.

Menginstal driver DRA

  1. Tarik dan update diagram Helm yang berisi driver DRA NVIDIA:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Instal driver GPU DRA NVIDIA dengan versi 25.8.0 atau yang lebih baru:

    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'
    

    Untuk node Ubuntu, tentukan jalur direktori "/opt/nvidia" dalam flag --set nvidiaDriverRoot.

Memastikan infrastruktur Anda siap untuk DRA

  1. Pastikan Pod driver DRA Anda berjalan:

    kubectl get pods -n nvidia-dra-driver-gpu
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. Konfirmasi bahwa ResourceSlice mencantumkan perangkat hardware yang Anda tambahkan:

    kubectl get resourceslices -o yaml
    

    Outputnya mirip dengan hal berikut ini:

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

Langkah berikutnya