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)
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.CatatanPada
/dev/infiniband/uverbsX,Xadalah nomor indeks perangkat yang dapat berbeda tergantung sistem dan konfigurasi. Anda dapat menjalankan perintahls /dev/infiniband | grep uverbsuntuk 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.
Untuk instans CPU tingkat perusahaan, lihat Aktifkan eRDMA pada instans tingkat perusahaan.
Untuk instans yang dipercepat GPU, lihat Aktifkan eRDMA pada instans yang dipercepat GPU.
Langkah 2: (Opsional) Terapkan Docker pada instans
Jika Docker belum diterapkan pada instans Anda, instal terlebih dahulu.
Ikuti langkah-langkah berikut:
Lakukan koneksi jarak jauh ke instans.
Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.
Jalankan perintah berikut untuk memeriksa apakah lingkungan Docker telah diterapkan pada instans.
sudo docker -vJika Docker telah diterapkan dengan benar, nomor versi tertentu akan dikembalikan, seperti yang ditunjukkan pada gambar berikut:

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

Terapkan Docker pada instans.
Untuk citra Alibaba Cloud Linux atau CentOS, lihat Instal dan gunakan Docker dan Docker Compose.
Untuk citra Ubuntu, lihat dokumentasi Ubuntu.
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:
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, misalnya2atau3.<region_ID>: ID wilayah citra, misalnyacn-hangzhou.(Opsional)
<TAG>: Tag citra Docker. Jika ditentukan, Docker akan menarik versi yang sesuai. Jika diabaikan, Docker akan menarik versi terbaru.
Contoh perintah:
Tarik tag
220901.1dari citra Docker Alibaba Cloud Linux 3 di wilayahcn-hangzhou.sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1Tarik 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
Verifikasi penarikan citra.
sudo docker imagesOutput contoh berikut menunjukkan bahwa tag
220901.1dari citra Docker Alibaba Cloud Linux 3 dan citra Docker Alibaba Cloud Linux 2 terbaru telah berhasil ditarik.
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:
Lakukan koneksi jarak jauh ke instans ECS.
Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.
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/bashParameter dijelaskan sebagai berikut:
--net=host: Menetapkan mode komunikasi kontainer kehost. 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/uverbsXdan--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
--ulimit memlock=-1: Menetapkanmaxlockedmemorykeunlimited. 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 perintahsudo docker imagesuntuk melihat ID citra tersebut.Jalankan perintah berikut untuk melihat ID citra target:
sudo docker imagesDalam contoh ini, digunakan citra Alibaba Cloud Linux yang diterapkan pada Langkah 3. Output perintah adalah sebagai berikut:

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:
Lakukan koneksi jarak jauh ke instans.
Untuk informasi selengkapnya, lihat Masuk ke instans Linux menggunakan Workbench.
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.
Jalankan perintah berikut untuk melihat ID kontainer target.
sudo docker psContoh ini menggunakan kontainer yang dijalankan pada Langkah 4. Output perintah adalah sebagai berikut:

Jalankan perintah berikut untuk masuk ke kontainer.
sudo docker exec -it <CONTAINER ID> /bin/bashGanti CONTAINER ID dengan ID kontainer target yang Anda peroleh pada langkah sebelumnya.
Setelah masuk ke kontainer, instal paket driver mode pengguna.
PentingPada 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
Jalankan perintah berikut di dalam kontainer untuk membuat file sumber
erdma.repodi folder/etc/yum.repos.d.sudo vim /etc/yum.repos.d/erdma.repoTambahkan konten berikut ke file
erdma.repodan 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/GPGKEYJalankan perintah berikut untuk memperbarui cache sumber yum.
sudo yum makecacheJalankan perintah berikut untuk menginstal paket driver mode pengguna.
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Alibaba Cloud Linux
Jalankan perintah berikut di dalam kontainer untuk menambahkan repositori.
sudo yum-config-manager \ --add-repo \ http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repoCatatanJika perintah
yum-config-managerbelum diinstal di kontainer Anda, jalankansudo yum install -y yum-utilsuntuk menginstal paket yum-utils.yum-config-managermerupakan bagian dari paket yum-utils dan digunakan untuk mengelola konfigurasi yum.Jalankan perintah berikut untuk memperbarui cache sumber yum.
sudo yum makecacheJalankan 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
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
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.listUbuntu 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.listUbuntu 22.04
echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu jammy/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.listUbuntu 24.04
echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu noble/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
Jalankan perintah berikut untuk memperbarui sumber apt.
sudo apt updateJalankan perintah berikut untuk menginstal driver mode pengguna.
sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 -y
Jalankan perintah berikut untuk melihat informasi perangkat eRDMA dari dalam kontainer.
ibv_devinfo
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
Jalankan perintah berikut pada node master untuk menginstal Helm.
Tool ini digunakan untuk mengelola instalasi dan uninstall komponen eRDMA Controller. Setelah instalasi, jalankan
helm versionuntuk 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.shJalankan perintah berikut pada node master untuk mengunduh kode sumber eRDMA Controller.
git clone https://github.com/AliyunContainerService/alibabacloud-erdma-controller.gitFile 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
typekeaccess_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 ditentukanKonfigurasi citra: Citra
erdma-agentdefault (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>
Gunakan
helmuntuk menginstal komponenerdma-controller.helm install -f deploy/helm/values.yaml --namespace kube-system alibaba-erdma-controller deploy/helm/Verifikasi instalasi.
Setelah instalasi dalam Regular Mode selesai, verifikasi bahwa pod
erdma-agentdanerdma-controllertelah dibuat:kubectl get pods -n kube-system | grep erdmaKueri sumber daya perangkat eRDMA pada node:
kubectl get erdmadevicesDalam Local Mode, hanya pod
erdma-agentyang dibuat. Poderdma-controllertidak dibuat. Oleh karena itu, sumber dayaerdmadevicestidak tersedia.
Langkah 2: Buat pod yang mendukung akselerasi jaringan eRDMA
Untuk membuat pod yang mendukung akselerasi jaringan eRDMA, deklarasikan
aliyun/erdma: 1pada bagianresources.limitskontainer. 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: 1Untuk 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.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.
