全部产品
Search
文档中心

Elastic Compute Service:Aktifkan eRDMA di kontainer Docker

更新时间:Jan 28, 2026

eRDMA (Elastic Remote Direct Memory Access) adalah teknologi komunikasi jaringan berkinerja tinggi. Penggunaan eRDMA dalam kontainer Docker memungkinkan aplikasi melewati kernel sistem operasi dan langsung mengakses perangkat eRDMA fisik pada host, sehingga mempercepat transmisi data dan meningkatkan efisiensi komunikasi. Fitur ini cocok untuk skenario yang memerlukan transmisi data skala besar dan komunikasi jaringan berkinerja tinggi dalam kontainer. Topik ini menjelaskan cara mengonfigurasi eRDMA di kontainer Docker serta menggunakan komponen eRDMA Controller untuk mengonfigurasi eRDMA secara cepat pada pod di kluster Kubernetes yang dikelola sendiri.

Batasan

Fitur eRDMA hanya didukung pada citra Docker berikut:

  • Sumber citra untuk Alibaba Cloud Linux 3, Ubuntu 22.04, dan Ubuntu 24.04 (didukung pada instans ARM maupun x86)

  • Sumber citra untuk Alibaba Cloud Linux 2, CentOS 7, CentOS 8, Ubuntu 18.04, Ubuntu 20.04, dan Ubuntu 24.04 (hanya didukung pada instans x86)

Catatan

Sumber citra untuk Anolis OS tidak didukung.

Cara kerja

Untuk menggunakan fitur eRDMA di lingkungan kontainer, Anda dapat menggunakan opsi --device Docker guna memetakan perangkat karakter /dev/infiniband/rdma_cm dan /dev/infiniband/uverbsX ke dalam kontainer. Hal ini memungkinkan program mode pengguna di dalam kontainer melewati kernel sistem operasi dan langsung mengakses perangkat eRDMA untuk mengirim serta menerima data.

  • /dev/infiniband/rdma_cm: Perangkat karakter untuk manajemen koneksi eRDMA. Program mode pengguna dapat melakukan operasi pada perangkat karakter ini untuk membuat, menghapus, dan mengelola koneksi dengan perangkat eRDMA, termasuk pembuatan dan penghapusan koneksi serta pengiriman dan penerimaan event koneksi.

  • /dev/infiniband/uverbsX: Perangkat karakter untuk operasi eRDMA di ruang pengguna. Program mode pengguna dapat melakukan operasi pada perangkat karakter ini untuk berkomunikasi dengan perangkat eRDMA, termasuk pembukaan perangkat, pembuatan dan penghapusan titik akhir komunikasi eRDMA, serta pendaftaran dan pencabutan pendaftaran buffer memori.

    Catatan

    Pada /dev/infiniband/uverbsX, X adalah nomor indeks perangkat yang dapat berbeda tergantung sistem dan konfigurasi. Anda dapat menjalankan perintah ls /dev/infiniband | grep uverbs untuk melihat nama perangkat karakter tersebut.

Konfigurasi eRDMA di kontainer Docker

Langkah 1: Konfigurasi eRDMA untuk instans

Pastikan tipe instans tempat Docker berada mendukung eRDMA, antarmuka Elastic RDMA telah disambungkan, driver eRDMA telah diterapkan, dan perangkat eRDMA berfungsi dengan baik.

Langkah 2: (Opsional) Terapkan Docker pada instans

Jika Docker belum diterapkan pada instans Anda, instal terlebih dahulu.

Ikuti langkah-langkah berikut:

  1. Lakukan koneksi jarak jauh ke instans.

    Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.

  2. Jalankan perintah berikut untuk memeriksa apakah lingkungan Docker telah diterapkan pada instans.

    sudo docker -v

    Jika Docker telah diterapkan dengan benar, nomor versi tertentu akan dikembalikan, seperti yang ditunjukkan pada gambar berikut:

    image

    Jika Docker belum diterapkan atau terjadi error, hasil berikut mungkin muncul. Dalam hal ini, lihat Terapkan Docker pada instans.

    image

  3. Terapkan Docker pada instans.

Langkah 3: (Opsional) Terapkan citra untuk Docker

Jika lingkungan Docker Anda belum memiliki citra apa pun, terapkan satu sesuai kebutuhan.

Topik ini menggunakan citra dasar Alibaba Cloud Linux sebagai contoh untuk menunjukkan cara mengunduh citra Alibaba Cloud Linux di Docker. Operasi ini memerlukan akses Internet.

Ikuti langkah-langkah berikut:

  1. Instal dan gunakan Docker dan Docker Compose.

  2. Jalankan perintah berikut untuk menarik (pull) citra Docker Alibaba Cloud Linux.

    sudo docker pull alibaba-cloud-linux-<image_version>-registry.<region_ID>.cr.aliyuncs.com/alinux<image_version>/alinux<image_version>:<TAG>
    • <image_version>: Versi Alibaba Cloud Linux, misalnya 2 atau 3.

    • <region_ID>: ID wilayah citra, misalnya cn-hangzhou.

    • (Opsional) <TAG>: Tag citra Docker. Jika ditentukan, Docker akan menarik versi yang sesuai. Jika diabaikan, Docker akan menarik versi terbaru.

    Cari informasi wilayah dan tag citra

    1. Buka Container Registry - Artifact Center.

    2. Klik alinux2/alinux2 atau alinux3/alinux3 untuk melihat informasi tag citra Docker untuk Alibaba Cloud Linux 2 dan Alibaba Cloud Linux 3.

      Misalnya, gambar berikut menunjukkan detail citra Docker Alibaba Cloud Linux 3. ① menunjukkan wilayah citra, dan ② menunjukkan tag citra.

      image.png

    Contoh perintah:

    • Tarik tag 220901.1 dari citra Docker Alibaba Cloud Linux 3 di wilayah cn-hangzhou.

      sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1
    • Tarik citra Docker Alibaba Cloud Linux 2 terbaru di wilayah cn-hangzhou.

      sudo docker pull alibaba-cloud-linux-2-registry.cn-hangzhou.cr.aliyuncs.com/alinux2/alinux2
  3. Verifikasi penarikan citra.

    sudo docker images

    Output contoh berikut menunjukkan bahwa tag 220901.1 dari citra Docker Alibaba Cloud Linux 3 dan citra Docker Alibaba Cloud Linux 2 terbaru telah berhasil ditarik.

    image.png

Langkah 4: Jalankan kontainer dan sambungkan perangkat eRDMA

Anda dapat menggunakan opsi --device Docker untuk memetakan perangkat karakter /dev/infiniband/rdma_cm dan /dev/infiniband/uverbsX ke dalam kontainer. Hal ini memungkinkan program mode pengguna di dalam kontainer melewati kernel sistem operasi dan langsung mengakses perangkat eRDMA untuk mengirim serta menerima data. Untuk informasi selengkapnya, lihat Cara kerja.

Ikuti langkah-langkah berikut:

  1. Lakukan koneksi jarak jauh ke instans ECS.

    Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.

  2. Jalankan perintah berikut untuk menjalankan instans kontainer Docker dan memetakan perangkat karakter eRDMA ke dalam kontainer.

    sudo docker run --net=host --device=/dev/infiniband/uverbsX --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bash

    Parameter dijelaskan sebagai berikut:

    • --net=host: Menetapkan mode komunikasi kontainer ke host. Aplikasi di dalam kontainer dapat langsung menggunakan antarmuka jaringan dan konfigurasi jaringan host, sehingga memiliki kemampuan komunikasi jaringan yang setara dengan host.

    • --device=/dev/infiniband/uverbsX dan --device=/dev/infiniband/rdma_cm: Mengekspos perangkat karakter eRDMA mode pengguna ke dalam kontainer.

      Jalankan perintah berikut untuk melihat nama perangkat karakter (X pada uverbsX ):

      ls /dev/infiniband | grep uverbs

      image

    • --ulimit memlock=-1: Menetapkan maxlockedmemory ke unlimited. Artinya, tidak ada batasan jumlah memori yang dapat dikunci oleh pengguna non-root. Hal ini memastikan aplikasi eRDMA dapat mengunci jumlah memori yang dibutuhkan saat dijalankan oleh pengguna non-root, sehingga dapat menggunakan fitur eRDMA secara efektif.

    • <IMAGE ID>: Ganti dengan ID citra Docker Anda. Anda dapat menjalankan perintah sudo docker images untuk melihat ID citra tersebut.

      Jalankan perintah berikut untuk melihat ID citra target:

      sudo docker images

      Dalam contoh ini, digunakan citra Alibaba Cloud Linux yang diterapkan pada Langkah 3. Output perintah adalah sebagai berikut:

      image

    Contoh perintah

    sudo docker run --net=host --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i e8d9a60b6967 /bin/bash

Langkah 5: Terapkan paket driver eRDMA untuk kontainer Docker

Untuk menggunakan eRDMA di dalam kontainer, Anda juga harus menerapkan paket driver mode pengguna eRDMA. Jika tidak, informasi perangkat eRDMA tidak dapat terdeteksi dari dalam kontainer. Alibaba Cloud menyediakan sumber yum dan apt untuk membantu Anda menerapkan paket yang diperlukan dengan mudah.

Ikuti langkah-langkah berikut:

  1. Lakukan koneksi jarak jauh ke instans.

    Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.

  2. Masuk ke kontainer target.

    Jika Anda menjalankan perintah pada Langkah 4 seperti pada contoh, Anda sudah berada di dalam kontainer Docker. Anda dapat langsung melanjutkan ke menginstal paket driver mode pengguna di dalam kontainer.

    1. Jalankan perintah berikut untuk melihat ID kontainer target.

      sudo docker ps

      Contoh ini menggunakan kontainer yang dijalankan pada Langkah 4. Output perintah adalah sebagai berikut:

      image

    2. Jalankan perintah berikut untuk masuk ke kontainer.

      sudo docker exec -it <CONTAINER ID> /bin/bash

      Ganti CONTAINER ID dengan ID kontainer target yang Anda peroleh pada langkah sebelumnya.

  3. Setelah masuk ke kontainer, instal paket driver mode pengguna.

    Penting

    Pada contoh berikut, http://mirrors.cloud.aliyuncs.com adalah alamat sumber internal. Untuk mengakses sumber melalui Internet, ganti http://mirrors.cloud.aliyuncs.com dengan https://mirrors.aliyun.com. Penggunaan Internet menghasilkan lalu lintas internet, yang dapat menimbulkan biaya tambahan. Untuk informasi selengkapnya tentang aturan penagihan lalu lintas internet, lihat Penagihan bandwidth publik.

    CentOS 7/CentOS 8

    1. Jalankan perintah berikut di dalam kontainer untuk membuat file sumber erdma.repo di folder /etc/yum.repos.d.

      sudo vim /etc/yum.repos.d/erdma.repo
    2. Tambahkan konten berikut ke file erdma.repo dan simpan file tersebut.

      [erdma]
      name = ERDMA Repository
      baseurl = http://mirrors.cloud.aliyuncs.com/erdma/yum/redhat/$releasever/erdma/$basearch/
      gpgcheck = 1
      enabled = 1
      gpgkey = http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY
    3. Jalankan perintah berikut untuk memperbarui cache sumber yum.

      sudo yum makecache
    4. Jalankan perintah berikut untuk menginstal paket driver mode pengguna.

      sudo yum install  libibverbs rdma-core librdmacm libibverbs-utils -y 

    Alibaba Cloud Linux

    1. Jalankan perintah berikut di dalam kontainer untuk menambahkan repositori.

      sudo yum-config-manager \
       --add-repo \
       http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repo
      Catatan

      Jika perintah yum-config-manager belum diinstal di kontainer Anda, jalankan sudo yum install -y yum-utils untuk menginstal paket yum-utils. yum-config-manager merupakan bagian dari paket yum-utils dan digunakan untuk mengelola konfigurasi yum.

    2. Jalankan perintah berikut untuk memperbarui cache sumber yum.

      sudo yum makecache
    3. Jalankan perintah berikut untuk menginstal paket driver mode pengguna.

      sudo yum install  libibverbs rdma-core librdmacm libibverbs-utils -y

    Ubuntu 18.04/20.04/22.04/24.04

    1. Jalankan perintah berikut di dalam kontainer untuk menambahkan signature PGP.

      • Ubuntu 18.04/Ubuntu 20.04

        wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo apt-key add -
      • Ubuntu 22.04/24.04

        wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg
    2. Jalankan perintah berikut untuk menambahkan sumber apt.

      • Ubuntu 18.04

        echo "deb [ arch=amd64 ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu bionic/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
      • Ubuntu 20.04

        echo "deb [ arch=amd64 ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu focal/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
      • Ubuntu 22.04

        echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu jammy/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
      • Ubuntu 24.04

        echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu noble/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
    3. Jalankan perintah berikut untuk memperbarui sumber apt.

      sudo apt update
    4. Jalankan perintah berikut untuk menginstal driver mode pengguna.

      sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 -y 
  4. Jalankan perintah berikut untuk melihat informasi perangkat eRDMA dari dalam kontainer.

    ibv_devinfo

    image

    Output menunjukkan bahwa perangkat eRDMA dapat terdeteksi dari dalam kontainer.

Setelah Anda mengonfigurasi eRDMA di kontainer Docker, Anda dapat mengintegrasikan eRDMA ke dalam aplikasi TCP di dalam kontainer menggunakan SMC-R atau NetACC untuk mencapai akselerasi aplikasi. Untuk informasi selengkapnya, lihat Ikhtisar adaptasi aplikasi.

Gunakan eRDMA Controller untuk menerapkan pod eRDMA pada kluster Kubernetes yang dikelola sendiri

Langkah 1: Instal eRDMA Controller

  1. Jalankan perintah berikut pada node master untuk menginstal Helm.

    Tool ini digunakan untuk mengelola instalasi dan uninstall komponen eRDMA Controller. Setelah instalasi, jalankan helm version untuk memverifikasi bahwa Helm telah diinstal.
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
  2. Jalankan perintah berikut pada node master untuk mengunduh kode sumber eRDMA Controller.

    git clone https://github.com/AliyunContainerService/alibabacloud-erdma-controller.git
  3. File konfigurasi instalasi untuk eRDMA Controller adalah deployment/helm/values.yaml. Anda dapat memodifikasi file ini untuk memilih mode kerja dan mengonfigurasi parameter terkait. Dua mode kerja didukung:

    • Regular Mode: Mode ini cocok untuk skenario di mana eRDMA Controller harus mengelola antarmuka Elastic RDMA (ERI) secara otomatis dan mengalokasikan sumber daya eRDMA secara dinamis.

    • Local Mode: Mode ini cocok untuk skenario di mana lingkungan eRDMA telah dipersiapkan pada node Kubernetes dan perangkat eRDMA telah diekspos ke pod. Mode ini tidak melibatkan manajemen dinamis sumber daya eRDMA.

    Item konfigurasi:

    • localERIDiscovery: Menetapkan mode kerja controller.

      • true: Local Mode.

      • false: Regular Mode (default).

    • credentials: Dalam Regular Mode, controller harus mengakses API Alibaba Cloud untuk mengkueri dan mengonfigurasi instans ECS dan ENI. Oleh karena itu, Anda harus terlebih dahulu membuat role RAM dan memberikan izin yang diperlukan.

      Otentikasi AccessKey saat ini didukung. Tetapkan type ke access_key, lalu masukkan ID AccessKey dan secret.

      credentials:
        type: "access_key"
        accessKeyID: "{access key}"
        accessKeySecret: "{access key secret}"

      Anda tidak perlu mengonfigurasi item ini dalam Local Mode.

    • preferDriver: Menetapkan tipe driver eRDMA yang digunakan oleh node.

      • default: Mode driver default.

      • compat: Mode driver kompatibel RoCE.

      • ofed: Mode driver berbasis OFED, cocok untuk tipe instans yang dipercepat GPU.

    • allocateAllDevices: Menetapkan kebijakan alokasi perangkat dalam Regular Mode.

      • true: Mengalokasikan semua perangkat eRDMA pada node ke pod.

      • false: Mengalokasikan satu perangkat eRDMA ke pod berdasarkan topologi NUMA.

    • exposedLocalERIs: Menetapkan perangkat eRDMA pada node yang harus diekspos ke pod dalam Local Mode. Untuk format konfigurasi, lihat contoh.

      exposedLocalERIs:
        - i-XXX erdma_0/erdma_1 # tentukan ID instans dan perangkat erdma(erdma_0/erdma_1) yang akan diekspos
        - i-* erdma_0           # tentukan perangkat erdma(erdma_0) yang akan diekspos untuk semua node yang tidak ditentukan
        - i-* erdma_*           # ekspos semua perangkat erdma yang ada untuk semua node yang tidak ditentukan
    • Konfigurasi citra: Citra erdma-agent default (registry.aliyuncs.com/erdma/agent) tidak mendukung Local Mode. Untuk menggunakan Local Mode, Anda harus membangun citra agent sendiri dan mendorongnya ke repositori citra kustom.

      Jalankan perintah berikut untuk membangun dan mendorong citra. Contoh ini menggunakan Alibaba Cloud Container Registry (ACR). Anda harus membuat namespace dan repositori citra terlebih dahulu.

      docker build --tag <REGISTRY_NAME>-registry.<REGION_ID>.cr.aliyuncs.com/<NAMESPACE>/agent:<TAG> --target agent .
      
      docker push <REGISTRY_NAME>-registry.<REGION_ID>.cr.aliyuncs.com/<NAMESPACE>/agent:<TAG>
  4. Gunakan helm untuk menginstal komponen erdma-controller.

    helm install -f deploy/helm/values.yaml --namespace kube-system alibaba-erdma-controller deploy/helm/
  5. Verifikasi instalasi.

    • Setelah instalasi dalam Regular Mode selesai, verifikasi bahwa pod erdma-agent dan erdma-controller telah dibuat:

      kubectl get pods -n kube-system | grep erdma

      Kueri sumber daya perangkat eRDMA pada node:

      kubectl get erdmadevices
    • Dalam Local Mode, hanya pod erdma-agent yang dibuat. Pod erdma-controller tidak dibuat. Oleh karena itu, sumber daya erdmadevices tidak tersedia.

Langkah 2: Buat pod yang mendukung akselerasi jaringan eRDMA

  1. Untuk membuat pod yang mendukung akselerasi jaringan eRDMA, deklarasikan aliyun/erdma: 1 pada bagian resources.limits kontainer. Contoh konfigurasi berikut menunjukkan contoh konfigurasinya. Ganti <ERDMA_POD_IMAGE> dengan alamat citra kontainer yang Anda gunakan:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: erdma
      name: erdma
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: erdma
      template:
        metadata:
          labels:
            app: erdma
          annotations:
        spec:
          containers:
          - command:
            - sleep
            - "360000"
            image: <ERDMA_POD_IMAGE>
            name: erdma
            resources:
              limits:
                aliyun/erdma: 1
    Untuk mengaktifkan akselerasi transparan dengan SMC-R, tambahkan anotasi network.alibabacloud.com/erdma-smcr: "true". Fitur ini memerlukan sistem operasi Alibaba Cloud Linux 3 dengan versi kernel 5.10.134-17 atau lebih baru.
  2. Berdasarkan file konfigurasi di atas, jalankan perintah berikut untuk menerapkan deployment. Deployment ini akan menjalankan jumlah replika pod yang ditentukan.

    kubectl apply -f example.yaml

Referensi

Jika Anda ingin mengonfigurasi dan menggunakan eRDMA di kluster ACK, lihat Gunakan eRDMA untuk mempercepat jaringan kontainer di kluster ACK.