Mengalokasikan resource jaringan menggunakan DRANET yang dikelola GKE

DRANET Google Kubernetes Engine (GKE) adalah fitur GKE terkelola yang dibangun berdasarkan project DRANET open source, yang mengimplementasikan Kubernetes DRA API untuk resource jaringan. DRANET memungkinkan Anda meminta dan mengalokasikan resource jaringan berperforma tinggi untuk Pod, termasuk antarmuka jaringan yang mendukung Remote Direct Memory Access (RDMA). Pendekatan ini menyediakan API yang portabel dan selaras dengan upstream untuk pengelolaan resource jaringan.

Dokumen ini memberikan ringkasan konseptual tentang GKE DRANET dan menunjukkan cara mengalokasikan resource jaringan ke workload di cluster GKE Anda.

Dokumen ini ditujukan untuk arsitek Cloud dan spesialis Jaringan yang mendesain jaringan untuk organisasi mereka. Untuk ringkasan semua dokumentasi GKE, lihat Menjelajahi dokumentasi GKE. Untuk mempelajari peran dan tugas umum yang dirujuk dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE umum.

Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:

Cara kerja DRANET yang dikelola GKE

DRANET yang dikelola GKE diimplementasikan melalui networking-dra-driver DaemonSet. DaemonSet ini berjalan di node dengan GPU atau TPU yang mengaktifkan GKE DRANET. Agen ini berfungsi sebagai agen tingkat node untuk membuat antarmuka jaringan dapat ditemukan dan dialokasikan ke Pod melalui Kubernetes Dynamic Resource Allocation (DRA) API.

Di GKE versi 1.34.1-gke.1829001 dan yang lebih baru, GKE secara otomatis menginstal resource DeviceClass untuk jaringan. Kelas ini menentukan jenis perangkat jaringan yang dapat Anda minta. Misalnya, GKE membuat class mrdma.google.com untuk perangkat yang kompatibel dengan RDMA dan class netdev.google.com untuk perangkat jaringan lainnya.

Untuk menggunakan GKE DRANET, Anda harus mengaktifkan driver GKE DRANET terlebih dahulu di node pool dengan GPU atau TPU.

Untuk meminta perangkat jaringan untuk workload, tentukan ResourceClaimTemplate. Template ini menentukan DeviceClass dan mode alokasi, seperti meminta semua perangkat yang tersedia di node. Dalam spesifikasi Pod, referensikan template ini di kolom resourceClaims untuk memberikan akses Pod Anda ke antarmuka jaringan yang diminta di node.

Kapan harus menggunakan DRANET terkelola GKE

GKE DRANET menyediakan cara standar untuk mengelola resource jaringan yang mengetahui topologi dan dependensi. Standardisasi ini menjadikannya solusi yang cocok untuk workload AI dan ML yang memerlukan jaringan berperforma tinggi.

Kasus penggunaan umum untuk meminta antarmuka jaringan untuk Pod meliputi:

  • Meminta semua antarmuka yang kompatibel dengan RDMA yang tersedia.
  • Meminta sejumlah antarmuka yang kompatibel dengan RDMA.
  • Meminta semua antarmuka non-RDMA yang tersedia.
  • Meminta sejumlah antarmuka non-RDMA tertentu.

Pertimbangan utama saat menggunakan DRANET terkelola GKE untuk jaringan

Pertimbangkan poin-poin berikut saat menggunakan GKE DRANET untuk jaringan:

  • Antarmuka jaringan khusus

    Saat Anda menggunakan GKE DRANET untuk mengklaim antarmuka jaringan untuk Pod, antarmuka tersebut dikhususkan untuk Pod tersebut. Pod lain di node yang sama tidak dapat membagikannya. Hal ini memastikan bahwa Pod memiliki akses eksklusif ke bandwidth dan resource penuh dari antarmuka tersebut, yang merupakan manfaat utama untuk beban kerja yang sensitif terhadap performa.

  • Menggunakan driver DRANET yang dikelola GKE secara terpisah

    Anda dapat mengaktifkan driver DRA GKE untuk mengelola resource jaringan tanpa mengaktifkan driver DRANET GKE lainnya. Untuk melakukannya, tambahkan label cloud.google.com/gke-networking-dra-driver=true ke node pool dengan GPU dan TPU.

  • Menggunakan driver DRA GKE lainnya

    Untuk mencapai throughput yang lebih tinggi dalam workload AI/ML yang berat, gabungkan API DRA untuk akselerator (seperti GPU dan TPU) dengan jaringan terkelola DRANET GKE. Pendekatan gabungan ini meningkatkan keselarasan resource dan pengetahuan topologi. Untuk panduan tentang penggunaan DRA untuk resource lain, lihat Menyiapkan infrastruktur GKE untuk workload DRA.

  • Menghindari konfigurasi yang bertentangan

    Driver GKE DRANET mengelola antarmuka RDMA dan gVNIC yang tidak memiliki rentang alamat IP sekunder yang dikonfigurasi. Jangan gunakan driver GKE DRANET dan GKE multi-network API dengan resource Jaringan jenis Device di cluster yang sama. Penggunaan driver dan API secara bersamaan tidak didukung karena kedua API mencoba mengelola set NIC yang sama, yang dapat menyebabkan penyiapan yang salah dan perilaku yang tidak dapat diprediksi.

Persyaratan

Untuk menggunakan DRANET terkelola GKE, lingkungan Anda harus memenuhi persyaratan berikut:

  • GKE versi 1.34.1-gke.1829001 atau yang lebih baru.
  • GKE Dataplane V2 diaktifkan di cluster.
  • (Pratinjau) GKE DRANET tersedia di mesin A4X Max.

Batasan

GKE DRANET memiliki batasan berikut:

  • Anda tidak dapat menggunakan GKE DRANET untuk mengalokasikan kartu antarmuka jaringan (NIC) default atau NIC virtual (seperti veth).
  • Penskalaan otomatis cluster dan Autopilot tidak didukung.
  • Anda tidak dapat menggunakan GKE DRANET dengan antarmuka tempat Anda telah mengonfigurasi secondaryPodRange.

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.

Peran yang diperlukan

Guna mendapatkan izin yang diperlukan untuk membuat kumpulan node dan mengalokasikan resource jaringan, minta administrator untuk memberi Anda peran IAM Kubernetes Engine Admin (roles/container.admin) di project Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat cluster

Buat cluster GKE Standard yang menggunakan GKE Dataplane V2:

gcloud container clusters create CLUSTER_NAME \
    --enable-dataplane-v2 \
    --region=CONTROL_PLANE_LOCATION \
    --project=PROJECT_ID \
    --cluster-version=CLUSTER_VERSION

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • CONTROL_PLANE_LOCATION: region atau zona untuk bidang kontrol cluster, seperti us-central1 atau us-central1-a.
  • PROJECT_ID: Google Cloud Project ID Anda.
  • CLUSTER_VERSION: versi GKE untuk cluster Anda. Versi ini harus 1.34.1-gke.1829001 atau yang lebih baru.

Menggunakan antarmuka RDMA dari node pool GPU

Bagian berikut menjelaskan cara mengonfigurasi node pool dan workload GPU untuk menggunakan antarmuka jaringan RDMA dengan GKE DRANET.

Mengaktifkan driver DRANET terkelola GKE di node pool GPU

Untuk mengaktifkan driver GKE DRANET di node pool GPU yang mendukung RDMA, tambahkan label cloud.google.com/gke-networking-dra-driver=true saat Anda membuat node pool.

gcloud beta container node-pools create NODE_POOL_NAME \
  --region=REGION \
  --cluster=CLUSTER_NAME \
  --node-locations=NODE_LOCATIONS \
  --accelerator type=ACCELERATOR_TYPE,count=ACCELERATOR_COUNT,gpu-driver-version=DRIVER_VERSION \
  --machine-type=MACHINE_TYPE \
  --num-nodes=NUM_NODES \
  --reservation-affinity=specific \
  --reservation=projects/RESERVATION_PROJECT/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK \
  --accelerator-network-profile=auto \
  --node-labels=cloud.google.com/gke-networking-dra-driver=true

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru.
  • REGION: Google Cloud region untuk cluster Anda.
  • CLUSTER_NAME: nama cluster Anda.
  • ACCELERATOR_TYPE: jenis akselerator GPU:

    Contoh:

    • VM A4: masukkan nvidia-b200.
    • VM Ultra A3: masukkan nvidia-h200-141gb.
  • ACCELERATOR_COUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

  • DRIVER_VERSION: versi driver GPU yang akan digunakan. Misalnya default atau latest.

  • MACHINE_TYPE: jenis mesin untuk node pool, misalnya, a3-ultragpu-8g.

  • NUM_NODES: jumlah node untuk node pool. Untuk mulai fleksibel, nilai ini harus ditetapkan ke 0.

  • RESERVATION_PROJECT: project ID pemesanan.

  • RESERVATION_NAME: nama pemesanan Anda. Untuk menemukan nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

  • RESERVATION_BLOCK: nama blok tertentu dalam reservasi. Untuk menemukan nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

Perintah ini menggunakan profil jaringan akselerator untuk mengonfigurasi jaringan dan subnet VPC secara otomatis untuk VM akselerator Anda. Atau, Anda dapat menentukan jaringan VPC dan subnet secara eksplisit.

Men-deploy resource RDMA workload

Untuk mengalokasikan resource RDMA untuk Pod, tentukan ResourceClaimTemplate.

  1. Buat ResourceClaimTemplate untuk menentukan cara mengalokasikan perangkat RDMA. Manifes berikut meminta semua perangkat mrdma yang tersedia di node. Simpan manifes sebagai all-mrdma-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: all-mrdma
    spec:
      spec:
        devices:
          requests:
          - name: req-mrdma
            exactly:
              deviceClassName: mrdma.google.com
              allocationMode: All
    
  2. Terapkan manifes:

    kubectl apply -f all-mrdma-template.yaml
    
  3. Deploy workload Anda dan lihat ResourceClaimTemplate. Manifes berikut men-deploy Pod yang mereferensikan template all-mrdma, yang memberikan akses Pod ke antarmuka RDMA di node. Simpan manifes sebagai agnhost-rdma-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: agnhost-rdma
      namespace: default
      labels:
        app: agnhost
    spec:
      containers:
      - name: agnhost
        image: registry.k8s.io/e2e-test-images/agnhost:2.39
        args: ["netexec", "--http-port", "80"]
        ports:
        - name: agnhost-port
          containerPort: 80
        resources:
          claims:
          - name: rdma
          limits:
            nvidia.com/gpu: 1
      resourceClaims:
      - name: rdma
        resourceClaimTemplateName: all-mrdma
    
  4. Terapkan manifes:

    kubectl apply -f agnhost-rdma-pod.yaml
    
  5. Pastikan antarmuka jaringan yang dialokasikan tambahan terlihat di dalam Pod.

    kubectl exec agnhost-rdma -- ls /sys/class/net
    

    Contoh output berikut menunjukkan antarmuka eth0 dan lo default, serta antarmuka RDMA yang dialokasikan, seperti gpu0rdma0. Jumlah dan nama antarmuka jaringan (NIC) bervariasi berdasarkan jenis mesin node GKE.

    eth0
    gpu0rdma0
    gpu1rdma0
    gpu2rdma0
    gpu3rdma0
    lo
    

Menggunakan antarmuka jaringan non-RDMA di kumpulan node TPU

Bagian berikut menjelaskan cara mengonfigurasi node pool dan workload TPU untuk menggunakan antarmuka jaringan non-RDMA dengan GKE DRANET.

Memverifikasi DeviceClass jaringan

Pastikan resource DeviceClass untuk jaringan ada di cluster Anda.

kubectl get deviceclass netdev.google.com

Outputnya mirip dengan hal berikut ini:

NAME                AGE
netdev.google.com   2d22h

Mengaktifkan driver DRANET terkelola GKE di node pool slice TPU

Untuk mengaktifkan driver GKE DRANET saat membuat node pool slice TPU, tambahkan label cloud.google.com/gke-networking-dra-driver=true.

gcloud beta container node-pools create NODE_POOL_NAME \
    --location=LOCATION \
    --cluster=CLUSTER_NAME \
    --node-locations=NODE_LOCATIONS \
    --machine-type=MACHINE_TYPE \
    --tpu-topology=TPU_TOPOLOGY \
    --num-nodes=NUM_NODES \
    --accelerator-network-profile=auto \
    --node-labels=cloud.google.com/gke-networking-dra-driver=true

Ganti kode berikut:

  • NODE_POOL_NAME: Nama node pool baru.
  • LOCATION: Google Cloud Region atau zona untuk cluster Anda.
  • CLUSTER_NAME: Nama cluster Anda.
  • NODE_LOCATIONS: Google Cloud Zona untuk node di node pool.
  • MACHINE_TYPE: Jenis mesin yang akan digunakan untuk node. Untuk mengetahui informasi selengkapnya tentang jenis mesin yang kompatibel dengan TPU, lihat Memilih versi TPU.
  • TPU_TOPOLOGY: Topologi TPU, misalnya, 2x4x4. Format topologi bergantung pada versi TPU. Untuk mempelajari lebih lanjut topologi TPU, lihat Memilih topologi.
  • NUM_NODES: Jumlah node di node pool.

Untuk mengetahui informasi selengkapnya, lihat Membuat node pool slice TPU host tunggal.

Men-deploy workload yang mengklaim semua perangkat jaringan

Untuk mengalokasikan perangkat jaringan non-RDMA untuk Pod, tentukan ResourceClaimTemplate.

  1. Buat ResourceClaimTemplate yang mereferensikan netdev.google.com DeviceClass. Manifes berikut meminta semua perangkat jaringan non-RDMA yang tersedia di node.

    Simpan manifes sebagai all-netdev-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: all-netdev
    spec:
      spec:
        devices:
          requests:
          - name: req-netdev
            exactly:
              deviceClassName: netdev.google.com
              allocationMode: All
    
  2. Terapkan manifes:

    kubectl apply -f all-netdev-template.yaml
    
  3. Deploy workload Anda dan lihat ResourceClaimTemplate. Manifes berikut men-deploy Pod yang menggunakan template all-netdev untuk memberi Pod akses ke semua perangkat jaringan non-RDMA di node. Simpan manifes sebagai netdev-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: agnhost-netdev
      namespace: default
      labels:
        app: agnhost
    spec:
      containers:
      - name: agnhost
        image: registry.k8s.io/e2e-test-images/agnhost:2.39
        args: ["netexec", "--http-port", "80"]
        ports:
        - name: agnhost-port
          containerPort: 80
        resources:
          claims:
          - name: netdev
          limits:
            google.com/tpu: 4
      nodeSelector:
        cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR
        cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
      resourceClaims:
      - name: netdev
        resourceClaimTemplateName: all-netdev
    

    Ganti kode berikut:

    • TPU_ACCELERATOR: Jenis akselerator TPU, misalnya, tpu-v5p-slice.
    • TPU_TOPOLOGY: Topologi TPU, misalnya, 2x4x4.
  4. Terapkan manifes:

    kubectl apply -f netdev-pod.yaml
    
  5. Pastikan antarmuka jaringan yang dialokasikan tambahan terlihat di dalam Pod.

    kubectl exec agnhost-netdev -- ls /sys/class/net
    

    Contoh output berikut menunjukkan antarmuka eth0 dan lo default, beserta perangkat jaringan yang dialokasikan, yang memiliki nama seperti eth1 dan eth2. Jumlah NIC dan namanya akan bervariasi berdasarkan jenis mesin node GKE.

    eth0
    eth1
    eth2
    lo
    

Meminta sejumlah perangkat jaringan tertentu

Contoh sebelumnya menunjukkan cara meminta semua perangkat jaringan yang tersedia dari jenis tertentu dengan menyetel allocationMode ke All. Jika Anda perlu meminta sejumlah perangkat tertentu, Anda dapat menyetel allocationMode ke ExactCount di ResourceClaimTemplate.

Contoh berikut meminta dua perangkat jaringan RDMA:

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: two-mrdma
spec:
  spec:
    devices:
      requests:
      - name: req-mrdma
        exactly:
          deviceClassName: mrdma.google.com
          allocationMode: ExactCount
          count: 2

Langkah berikutnya