Petakan perangkat eRDMA ke dalam kontainer Docker atau gunakan eRDMA Controller untuk mengeksposnya ke pod dalam kluster Kubernetes yang dikelola sendiri.
Batasan
eRDMA di Docker hanya mendukung citra berikut.
Alibaba Cloud Linux 3, Ubuntu 22.04, dan Ubuntu 24.04 (ARM dan x86)
Alibaba Cloud Linux 2, CentOS 7, CentOS 8, Ubuntu 18.04, Ubuntu 20.04, dan Ubuntu 24.04 (hanya x86)
Citra Anolis OS tidak didukung.
Cara kerja
Gunakan opsi Docker --device untuk memetakan perangkat karakter /dev/infiniband/rdma_cm dan /dev/infiniband/uverbsX ke dalam kontainer. Program mode pengguna kemudian dapat melewati kernel dan mengakses perangkat eRDMA secara langsung.
/dev/infiniband/rdma_cm: Perangkat karakter untuk manajemen koneksi eRDMA, termasuk membuat dan menghapus koneksi serta menangani event koneksi./dev/infiniband/uverbsX: Perangkat karakter untuk operasi eRDMA di ruang pengguna, termasuk membuka perangkat, mengelola titik akhir komunikasi, dan mendaftarkan buffer memori.Catatan/dev/infiniband/uverbsX:Xadalah nomor indeks perangkat. Jalankanls /dev/infiniband | grep uverbsuntuk menemukan nama perangkat.
Konfigurasikan eRDMA di kontainer Docker
Langkah 1: Konfigurasikan eRDMA untuk instans
Verifikasi bahwa tipe instans mendukung eRDMA, antarmuka Elastic RDMA telah disambungkan, driver eRDMA telah diterapkan, dan perangkat eRDMA berfungsi dengan benar.
Instansi CPU tingkat perusahaan: Lihat Aktifkan eRDMA pada instans tingkat perusahaan.
Instans yang dipercepat GPU: Lihat Aktifkan eRDMA pada instans yang dipercepat GPU.
Langkah 2: (Opsional) Terapkan Docker pada instans
Lewati langkah ini jika Docker sudah terinstal pada instans.
Sambungkan ke instans. Lihat Masuk ke instans Linux menggunakan Workbench.
Periksa apakah Docker sudah terinstal.
sudo docker -vJika Docker sudah terinstal, nomor versi akan dikembalikan:
[root@i:xxx ~]# sudo docker -v Docker version 26.1.3, build b72abbbJika belum terinstal, lanjutkan ke Terapkan Docker pada instans.
[root@i-xxx /]# sudo docker -v sudo: docker: command not foundTerapkan Docker pada instans.
Alibaba Cloud Linux atau CentOS: Lihat Instal Docker.
Ubuntu: Lihat dokumentasi Ubuntu.
Langkah 3: (Opsional) Terapkan citra untuk Docker
Lewati langkah ini jika lingkungan Docker Anda sudah memiliki citra dasar.
Contoh berikut menarik citra dasar Alibaba Cloud Linux. Akses Internet diperlukan.
-
Tarik 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, seperti2atau3. -
<region_ID>: ID wilayah citra, seperticn-hangzhou. -
(Opsional)
<TAG>: Tag citra Docker. Secara default menggunakan versi terbaru jika dihilangkan.
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.1 -
Tarik citra Docker Alibaba Cloud Linux 2 versi 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 mengonfirmasi bahwa citra Alibaba Cloud Linux 3 dengan tag
220901.1dan citra Alibaba Cloud Linux 2 versi terbaru telah ditarik.
Langkah 4: Jalankan kontainer dan sambungkan perangkat eRDMA
Gunakan opsi Docker --device untuk memetakan perangkat karakter /dev/infiniband/rdma_cm dan /dev/infiniband/uverbsX ke dalam kontainer. Lihat Cara kerja.
Sambungkan ke instance ECS. Lihat Masuk ke instans Linux menggunakan Workbench.
Jalankan kontainer Docker dan petakan perangkat karakter eRDMA ke dalamnya.
sudo docker run --net=host --device=/dev/infiniband/uverbsX --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bashParameter:
--net=host: Mengatur mode jaringan kontainer kehost. Aplikasi dalam kontainer berbagi antarmuka dan konfigurasi jaringan host.--device=/dev/infiniband/uverbsXdan--device=/dev/infiniband/rdma_cm: Mengekspos perangkat karakter eRDMA mode pengguna ke kontainer.Lihat nama perangkat karakter (X dalam
uverbsX):ls /dev/infiniband | grep uverbs[root@ixxx ~]# ls /dev/infiniband | grep uverbs uverbs0--ulimit memlock=-1: Mengaturmaxlockedmemorymenjadiunlimited, sehingga pengguna non-root dapat mengunci memori yang cukup untuk operasi eRDMA.<IMAGE ID>: ID citra Docker. Jalankansudo docker imagesuntuk melihatnya.Lihat ID citra target:
sudo docker imagesContoh ini menggunakan citra Alibaba Cloud Linux dari Langkah 3. Contoh output:
[root@i-xxx ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 latest e8d9a60b6967 8 days ago 205MB
Langkah 5: Terapkan paket driver eRDMA untuk kontainer Docker
Paket driver mode pengguna eRDMA juga harus diterapkan di dalam kontainer. Tanpa paket tersebut, perangkat eRDMA tidak dapat terdeteksi dari dalam kontainer. Alibaba Cloud menyediakan sumber yum dan apt untuk instalasi yang mudah.
Sambungkan ke instans. Lihat Masuk ke instans Linux menggunakan Workbench.
Masuk ke kontainer target.
Jika Anda menjalankan perintah di Langkah 4, Anda sudah berada di dalam kontainer. Lanjutkan ke instal paket driver mode pengguna di dalam kontainer.
Lihat ID kontainer target.
sudo docker psContoh ini menggunakan kontainer dari Langkah 4. Contoh output:
ID kontainer target adalah
b4ec2fbaedf7(kontainer Alibaba Cloud Linux 3 yang dijalankan di Langkah 4).[root@i _[ ~]# docker ps CONTAINER ID IMAGE COMMAND c9fc089a3c5d e8d9a60b6967 "/bin/bash" b4ec2fbaedf7 alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 "/bin/bash"Masuk ke kontainer.
sudo docker exec -it <CONTAINER ID> /bin/bashGanti CONTAINER ID dengan ID kontainer target dari langkah sebelumnya.
Instal paket driver mode pengguna di dalam kontainer.
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. Akses Internet dapat menimbulkan biaya trafik. Lihat Penagihan bandwidth publik.
CentOS 7/CentOS 8
Buat file sumber
erdma.repodi/etc/yum.repos.d.sudo vim /etc/yum.repos.d/erdma.repoTambahkan konten berikut ke
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/GPGKEYPerbarui cache sumber yum.
sudo yum makecacheInstal paket driver mode pengguna.
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Alibaba Cloud Linux
Tambahkan repositori.
sudo yum-config-manager \ --add-repo \ http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repoCatatanJika
yum-config-managerbelum terinstal, jalankansudo yum install -y yum-utilsuntuk menginstalnya.yum-config-managermerupakan bagian dari paket yum-utils.Perbarui cache sumber yum.
sudo yum makecacheInstal paket driver mode pengguna.
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Ubuntu 18.04/20.04/22.04/24.04
Tambahkan 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
Tambahkan 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
Perbarui sumber apt.
sudo apt updateInstal driver mode pengguna.
sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 -y
Lihat informasi perangkat eRDMA dari dalam kontainer.
ibv_devinfo[root@ixxxx /]# ibv_devinfo hca_id: erdma_0 transport: iWARP (1) fw_ver: 0.2.0 node_guid: 0216:3eff:fe1d:fdc2 sys_image_guid: 0216:3eff:fe1d:fdc2 vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: EthernetPerangkat eRDMA terdeteksi dari dalam kontainer.
Untuk mengintegrasikan eRDMA ke dalam aplikasi TCP di dalam kontainer dengan SMC-R atau NetACC, lihat Ikhtisar adaptasi aplikasi.
Gunakan eRDMA Controller untuk menerapkan pod eRDMA pada kluster Kubernetes yang dikelola sendiri
Langkah 1: Instal eRDMA Controller
Instal Helm pada node master.
Helm mengelola instalasi dan penghapusan komponen eRDMA Controller. Setelah instalasi, jalankan
helm versionuntuk verifikasi.curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sUnduh kode sumber eRDMA Controller pada node master.
git clone https://github.com/AliyunContainerService/alibabacloud-erdma-controller.gitFile konfigurasi instalasi adalah
deployment/helm/values.yaml. Ubah file ini untuk memilih mode kerja dan mengonfigurasi parameter. Dua mode didukung:Mode Reguler: eRDMA Controller secara otomatis mengelola antarmuka Elastic RDMA (ERI) dan mengalokasikan sumber daya eRDMA secara dinamis.
Mode Lokal: Lingkungan eRDMA sudah dipersiapkan pada node Kubernetes dan perangkat eRDMA diekspos ke pod. Tidak ada manajemen sumber daya dinamis yang terlibat.
Item konfigurasi:
localERIDiscovery: Mode kerja controller.true: Mode Lokal.false: Mode Reguler (default).
credentials: Dalam Mode Reguler, controller mengakses API Alibaba Cloud untuk mengkueri dan mengonfigurasi instans ECS dan ENI. Buat peran RAM dan berikan izin yang diperlukan terlebih dahulu.Otentikasi AccessKey didukung. Atur
typekeaccess_keydan masukkan ID AccessKey serta secret-nya.credentials: type: "access_key" accessKeyID: "{access key}" accessKeySecret: "{access key secret}"Tidak diperlukan dalam Mode Lokal.
preferDriver: Jenis driver eRDMA untuk node.default: Mode driver default.compat: Mode driver kompatibel RoCE.ofed: Mode driver berbasis OFED, cocok untuk tipe instans yang dipercepat GPU.
allocateAllDevices: Kebijakan alokasi perangkat dalam Mode Reguler.true: Mengalokasikan semua perangkat eRDMA pada node ke pod.false: Mengalokasikan satu perangkat eRDMA berdasarkan topologi NUMA.
exposedLocalERIs: Perangkat eRDMA pada node yang akan diekspos ke pod dalam Mode Lokal. Lihat contoh untuk format konfigurasi.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 Mode Lokal. Bangun citra agent dan dorong ke repositori citra kustom.Bangun dan dorong citra. Contoh ini menggunakan Container Registry Alibaba Cloud (ACR). Buat 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>
Instal komponen
erdma-controllerdenganhelm.helm install -f deploy/helm/values.yaml --namespace kube-system alibaba-erdma-controller deploy/helm/Verifikasi instalasi.
Dalam Mode Reguler, verifikasi bahwa pod
erdma-agentdanerdma-controllerkeduanya dibuat:kubectl get pods -n kube-system | grep erdmaKueri sumber daya perangkat eRDMA pada node:
kubectl get erdmadevicesDalam Mode Lokal, hanya pod
erdma-agentyang dibuat. Poderdma-controllerdan sumber dayaerdmadevicestidak tersedia.
Langkah 2: Buat pod yang mendukung akselerasi jaringan eRDMA
Deklarasikan
aliyun/erdma: 1diresources.limitsspesifikasi kontainer. Ganti<ERDMA_POD_IMAGE>dengan alamat citra kontainer Anda: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". Memerlukan Alibaba Cloud Linux 3 dengan kernel 5.10.134-17 atau lebih baru.Terapkan deployment berdasarkan file konfigurasi. Deployment akan menjalankan jumlah replika pod yang ditentukan.
kubectl apply -f example.yaml
Referensi
Untuk mengonfigurasi eRDMA di kluster ACK, lihat Gunakan eRDMA untuk mempercepat jaringan kontainer di kluster ACK.
