Mengalokasikan perangkat yang ada ke workload dengan DRA

Anda dapat secara fleksibel meminta perangkat untuk workload Google Kubernetes Engine (GKE) dengan menggunakan alokasi resource dinamis (DRA). Dokumen ini menunjukkan cara membuat ResourceClaimTemplate untuk meminta perangkat yang ada di kumpulan node dalam cluster Anda, lalu membuat workload untuk mengamati cara Kubernetes mengalokasikan perangkat secara fleksibel ke Pod Anda.

Dokumen ini ditujukan untuk Operator aplikasi dan Data engineer yang menjalankan workload seperti AI/ML atau komputasi berperforma tinggi (HPC).

Tentang meminta perangkat dengan DRA

Saat Anda menyiapkan infrastruktur GKE untuk DRA, driver DRA di node Anda akan membuat objek DeviceClass di cluster. DeviceClass menentukan kategori perangkat, seperti GPU, yang tersedia untuk diminta oleh workload. Administrator platform dapat secara opsional men-deploy DeviceClass tambahan yang membatasi perangkat yang dapat Anda minta dalam workload tertentu.

Untuk meminta perangkat dalam DeviceClass, Anda membuat salah satu objek berikut:

  • ResourceClaim: ResourceClaim memungkinkan Pod atau pengguna meminta resource hardware dengan memfilter parameter tertentu dalam DeviceClass.
  • ResourceClaimTemplate: ResourceClaimTemplate menentukan template yang dapat digunakan Pod untuk membuat ResourceClaim per-Pod baru secara otomatis.

Untuk mengetahui informasi selengkapnya tentang ResourceClaim dan ResourceClaimTemplate, lihat Kapan harus menggunakan ResourceClaim dan ResourceClaimTemplate.

Contoh dalam dokumen ini menggunakan ResourceClaimTemplate dasar untuk meminta konfigurasi perangkat yang ditentukan. Untuk mengetahui informasi selengkapnya tentang semua kolom yang dapat Anda tentukan, lihat Referensi API ResourceClaimTemplate.

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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Mengklaim perangkat dan men-deploy workload

Untuk meminta alokasi perangkat per-Pod, Anda membuat ResourceClaimTemplate yang memiliki konfigurasi perangkat yang diminta, seperti GPU dari jenis tertentu. Saat Anda men-deploy workload yang mereferensikan ResourceClaimTemplate, Kubernetes akan membuat ResourceClaim untuk setiap Pod dalam workload berdasarkan ResourceClaimTemplate. Kubernetes mengalokasikan resource yang diminta dan menjadwalkan Pod di node yang sesuai.

Untuk meminta GPU dalam workload dengan DRA, ikuti langkah-langkah berikut:

  1. Simpan manifes berikut sebagai gpu-claim-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: gpu-claim-template
    spec:
      spec:
        devices:
          requests:
          - name: single-gpu
            exactly:
              deviceClassName: gpu.nvidia.com
              allocationMode: ExactCount
              count: 1
    
  2. Buat ResourceClaimTemplate:

    kubectl create -f gpu-claim-template.yaml
    
  3. Untuk membuat workload yang mereferensikan ResourceClaimTemplate, simpan manifes berikut sebagai dra-gpu-example.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dra-gpu-example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dra-gpu-example
      template:
        metadata:
          labels:
            app: dra-gpu-example
        spec:
          containers:
          - name: ctr
            image: ubuntu:22.04
            command: ["bash", "-c"]
            args: ["echo $(nvidia-smi -L || echo Waiting...); sleep infinity"]
            resources:
              claims:
              - name: single-gpu
          resourceClaims:
          - name: single-gpu
            resourceClaimTemplateName: gpu-claim-template
          tolerations:
          - key: "nvidia.com/gpu"
            operator: "Exists"
            effect: "NoSchedule"
    
  4. Men-deploy workload:

    kubectl create -f dra-gpu-example.yaml
    

Memverifikasi alokasi hardware

Anda dapat memverifikasi bahwa workload Anda telah dialokasikan hardware dengan memeriksa ResourceClaim atau dengan melihat log untuk Pod Anda. Untuk memverifikasi alokasi, ikuti langkah-langkah berikut:

  1. Dapatkan ResourceClaim yang terkait dengan workload yang Anda deploy:

    kubectl get resourceclaims
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                               STATE                AGE
    dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh   allocated,reserved   9s
    
  2. Dapatkan detail selengkapnya tentang hardware yang ditetapkan ke Pod:

    kubectl describe resourceclaims RESOURCECLAIM
    

    Ganti RESOURCECLAIM dengan nama lengkap ResourceClaim yang Anda dapatkan dari output langkah sebelumnya.

    Outputnya mirip dengan hal berikut ini:

    Name:         dra-gpu-example-68f595d7dc-prv27-single-gpu-qgjq5
    Namespace:    default
    Labels:       <none>
    Annotations:  resource.kubernetes.io/pod-claim-name: single-gpu
    API Version:  resource.k8s.io/v1
    Kind:         ResourceClaim
    Metadata:
    # Multiple lines are omitted here.
    Spec:
      Devices:
        Requests:
          Exactly:
            Allocation Mode:    ExactCount
            Count:              1
            Device Class Name:  gpu.nvidia.com
          Name:                 single-gpu
    Status:
      Allocation:
        Devices:
          Results:
            Device:   gpu-0
            Driver:   gpu.nvidia.com
            Pool:     gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
            Request:  single-gpu
        Node Selector:
          Node Selector Terms:
            Match Fields:
              Key:       metadata.name
              Operator:  In
              Values:
                gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
      Reserved For:
        Name:      dra-gpu-example-68f595d7dc-prv27
        Resource:  pods
        UID:       e16c2813-08ef-411b-8d92-a72f27ebf5ef
    Events:        <none>
    
  3. Dapatkan log untuk workload yang Anda deploy:

    kubectl logs deployment/dra-gpu-example --all-pods=true
    

    Outputnya mirip dengan hal berikut ini:

    [pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)
    

    Output ini menunjukkan bahwa GKE mengalokasikan satu GPU ke container.

Langkah berikutnya