eRDMA aygıtlarını Docker kapsayıcılarına eşleyin veya eRDMA Controller kullanarak bu aygıtları kendi yönettiğiniz bir Kubernetes kümesindeki pod'lara sunun.
Sınırlamalar
Docker'da eRDMA yalnızca aşağıdaki görüntüleri destekler.
Alibaba Cloud Linux 3, Ubuntu 22,04 ve Ubuntu 24,04 (ARM ve x86)
Alibaba Cloud Linux 2, CentOS 7, CentOS 8, Ubuntu 18,04, Ubuntu 20,04 ve Ubuntu 24,04 (yalnızca x86)
Anolis OS görüntüleri desteklenmez.
Çalışma mantığı
Docker --device seçeneğini kullanarak /dev/infiniband/rdma_cm ve /dev/infiniband/uverbsX karakter aygıtlarını kapsayıcıya eşleyin. Kullanıcı alanı programları daha sonra çekirdeği atlayarak eRDMA aygıtına doğrudan erişebilir.
/dev/infiniband/rdma_cm: Bağlantı oluşturma ve yok etme ile bağlantı olaylarını işleme dahil olmak üzere eRDMA bağlantı yönetimi için kullanılan karakter aygıtı.-
/dev/infiniband/uverbsX: Aygıtı açma, iletişim uç noktalarını yönetme ve bellek arabelleklerini kaydetme dahil olmak üzere kullanıcı alanı eRDMA işlemleri için kullanılan karakter aygıtı.Not/dev/infiniband/uverbsX:Xaygıt dizin numarasıdır. Aygıt adını bulmak içinls /dev/infiniband | grep uverbskomutunu çalıştırın.
Docker kapsayıcısında eRDMA'yı yapılandırın
1. Adım: Örnek için eRDMA'yı yapılandırın
Örnek türünün eRDMA'yı desteklediğini, bir Elastic RDMA Interface'in bağlı olduğunu, eRDMA sürücüsünün dağıtıldığını ve eRDMA aygıtının doğru çalıştığını doğrulayın.
Kurumsal düzeyde CPU örnekleri: Bkz. Kurumsal düzeydeki bir örnekte eRDMA'yı etkinleştirin.
GPU hızlandırmalı örnekler: Bkz. GPU hızlandırmalı bir örnekte eRDMA'yı etkinleştirin.
2. Adım: (İsteğe bağlı) Örnek üzerinde Docker'ı dağıtın
Örnek üzerinde Docker zaten yüklüyse bu adımı atlayın.
Örneğe bağlanın. Bkz. Workbench kullanarak bir Linux örneğinde oturum açın.
-
Docker'ın yüklü olup olmadığını kontrol edin.
sudo docker -vDocker yüklüyse bir sürüm numarası döndürülür:
[root@i:xxx ~]# sudo docker -v Docker version 26.1.3, build b72abbbYükülü değilse Örnek üzerinde Docker'ı dağıtın bölümüne ilerleyin.
[root@i-xxx /]# sudo docker -v sudo: docker: command not found -
Örnek üzerinde Docker'ı dağıtın.
Alibaba Cloud Linux veya CentOS: Bkz. Docker'ı yükleyin.
Ubuntu: Bkz. Ubuntu belgeleri.
3. Adım: (İsteğe bağlı) Docker için bir görüntü dağıtın
Docker ortamınızda zaten bir temel görüntü varsa bu adımı atlayın.
Aşağıdaki örnekte bir Alibaba Cloud Linux temel görüntüsü çekilmektedir. İnternet erişimi gereklidir.
-
Bir Alibaba Cloud Linux Docker görüntüsü çekin.
sudo docker pull alibaba-cloud-linux-<image_version>-registry.<region_ID>.cr.aliyuncs.com/alinux<image_version>/alinux<image_version>:<TAG><image_version>: Alibaba Cloud Linux sürümü, örneğin2veya3.<region_ID>: Görüntünün bulunduğu bölgenin kimliği, örneğincn-hangzhou.(İsteğe bağlı)
<TAG>: Docker görüntü etiketi. Atlanırsa varsayılan olarak en son sürüm kullanılır.
Örnek komutlar:
-
cn-hangzhoubölgesindeki Alibaba Cloud Linux 3 Docker görüntüsünün220901.1etiketini çekin.sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1 -
cn-hangzhoubölgesindeki en son Alibaba Cloud Linux 2 Docker görüntüsünü çekin.sudo docker pull alibaba-cloud-linux-2-registry.cn-hangzhou.cr.aliyuncs.com/alinux2/alinux2
-
Görüntü çekme işlemini doğrulayın.
sudo docker imagesÇıktı,
220901.1etiketli Alibaba Cloud Linux 3 görüntüsünün ve en son Alibaba Cloud Linux 2 görüntüsünün çekildiğini onaylar.
4. Adım: Kapsayıcıyı başlatın ve eRDMA aygıtını ekleyin
Docker --device seçeneğini kullanarak /dev/infiniband/rdma_cm ve /dev/infiniband/uverbsX karakter aygıtlarını kapsayıcıya eşleyin. Bkz. Çalışma mantığı.
ECS örneğine bağlanın. Bkz. Workbench kullanarak bir Linux örneğinde oturum açın.
-
Bir Docker kapsayıcısı başlatın ve eRDMA karakter aygıtlarını buna eşleyin.
sudo docker run --net=host --device=/dev/infiniband/uverbsX --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bashParametreler:
--net=host: Kapsayıcı ağ modunuhostolarak ayarlar. Kapsayıcıdaki uygulamalar ana bilgisayarın ağ arabirimlerini ve yapılandırmalarını paylaşır.-
--device=/dev/infiniband/uverbsXve--device=/dev/infiniband/rdma_cm: eRDMA kullanıcı modu karakter aygıtlarını kapsayıcıya sunar.Karakter aygıtı adını görüntüleyin (
uverbsXiçindeki X):ls /dev/infiniband | grep uverbs[root@ixxx ~]# ls /dev/infiniband | grep uverbs uverbs0 --ulimit memlock=-1:maxlockedmemorydeğeriniunlimitedolarak ayarlar; böylece root olmayan kullanıcılar eRDMA işlemleri için yeterli belleği kilitleyebilir.-
<IMAGE ID>: Docker görüntü kimliği. Görüntülemek içinsudo docker imageskomutunu çalıştırın.Hedef görüntü kimliğini görüntüleyin:
sudo docker imagesBu örnekte 3. Adım bölümündeki Alibaba Cloud Linux görüntüsü kullanılmaktadır. Örnek çıktı:
[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
5. Adım: Docker kapsayıcısı için eRDMA sürücü paketini dağıtın
eRDMA kullanıcı modu sürücü paketinin kapsayıcıda da dağıtılması gerekir. Aksi takdirde eRDMA aygıtları kapsayıcı içinden algılanamaz. Alibaba Cloud, kolay kurulum için yum ve apt kaynakları sağlar.
Örneğe bağlanın. Bkz. Workbench kullanarak bir Linux örneğinde oturum açın.
-
Hedef kapsayıcıya girin.
4. Adım bölümündeki komutu çalıştırdıysanız zaten kapsayıcının içindesiniz. Kapsayıcıda kullanıcı modu sürücü paketini yükleyin bölümüne ilerleyin.
-
Hedef kapsayıcı kimliğini görüntüleyin.
sudo docker psBu örnekte 4. Adım bölümündeki kapsayıcı kullanılmaktadır. Örnek çıktı:
Hedef kapsayıcı kimliği
b4ec2fbaedf7değeridir (4. Adımda başlatılan Alibaba Cloud Linux 3 kapsayıcısı).[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" -
Kapsayıcıya girin.
sudo docker exec -it <CONTAINER ID> /bin/bashCONTAINER ID ifadesini önceki adımdaki hedef kapsayıcı kimliğiyle değiştirin.
-
-
Kullanıcı modu sürücü paketini kapsayıcıya yükleyin.
ÖnemliAşağıdaki örneklerde http://mirrors.cloud.aliyuncs.com dahili bir kaynak adresidir. Kaynağa İnternet üzerinden erişmek için http://mirrors.cloud.aliyuncs.com ifadesini https://mirrors.aliyun.com ile değiştirin. İnternet erişimi trafik ücretlerine neden olabilir. Bkz. Genel bant genişliği faturalandırması.
CentOS 7/CentOS 8
-
/etc/yum.repos.ddizininde birerdma.repokaynak dosyası oluşturun.sudo vim /etc/yum.repos.d/erdma.repo -
Aşağıdaki içeriği
erdma.repodosyasına ekleyin ve dosyayı kaydedin.[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 -
yum kaynak önbelleğini güncelleyin.
sudo yum makecache -
Kullanıcı modu sürücü paketini yükleyin.
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Alibaba Cloud Linux
-
Depoyu ekleyin.
sudo yum-config-manager \ --add-repo \ http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repoNotyum-config-manageryüklü değilse yüklemek içinsudo yum install -y yum-utilskomutunu çalıştırın.yum-config-manageryum-utils paketinin bir parçasıdır. -
yum kaynak önbelleğini güncelleyin.
sudo yum makecache -
Kullanıcı modu sürücü paketini yükleyin.
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Ubuntu 18,04/20,04/22,04/24,04
-
PGP imzasını ekleyin.
-
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
-
-
apt kaynağını ekleyin.
-
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
-
-
apt kaynağını güncelleyin.
sudo apt update -
Kullanıcı modu sürücüsünü yükleyin.
sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 -y
-
-
eRDMA aygıtı bilgilerini kapsayıcı içinden görüntüleyin.
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: EtherneteRDMA aygıtı kapsayıcı içinden algılanır.
SMC-R veya NetACC kullanarak kapsayıcı içindeki TCP uygulamalarına eRDMA entegrasyonu sağlamak için bkz. Uygulama uyarlama genel bakışı.
Kendi yönettiğiniz bir Kubernetes kümesinde eRDMA pod'u dağıtmak için eRDMA Controller'ı kullanın
1. Adım: eRDMA Controller'ı yükleyin
-
Ana düğümde Helm'i yükleyin.
Helm, eRDMA Controller bileşenlerinin yüklenmesini ve kaldırılmasını yönetir. Yüklemeden sonra doğrulamak için
helm versionkomutunu çalıştırın.curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.s -
Ana düğümde eRDMA Controller kaynak kodunu indirin.
git clone https://github.com/AliyunContainerService/alibabacloud-erdma-controller.git -
Yapılandırma dosyası
deployment/helm/values.yamlkonumundadır. Bu dosyayı değiştirerek bir çalışma modu seçin ve parametreleri yapılandırın. İki mod desteklenir:Normal Mod: eRDMA Controller, Elastic RDMA Interface'leri (ERI'ler) otomatik olarak yönetir ve eRDMA kaynaklarını dinamik olarak tahsis eder.
Yerel Mod: eRDMA ortamı Kubernetes düğümlerinde zaten hazırlanmıştır ve eRDMA aygıtları pod'lara sunulur. Dinamik kaynak yönetimi söz konusu değildir.
Yapılandırma öğeleri:
-
localERIDiscovery: Denetleyici çalışma modu.true: Yerel Mod.false: Normal Mod (varsayılan).
-
credentials: Normal Modda denetleyici, ECS örneklerini ve ENI'leri sorgulamak ve yapılandırmak için Alibaba Cloud API'lerine erişir. Önce bir RAM rolü oluşturun ve gerekli izinleri verin.AccessKey kimlik doğrulaması desteklenir.
typedeğeriniaccess_keyolarak ayarlayın ve AccessKey kimliğini ile gizli anahtarını girin.credentials: type: "access_key" accessKeyID: "{access key}" accessKeySecret: "{access key secret}"Yerel Modda gerekli değildir.
-
preferDriver: Düğüm için eRDMA sürücü türü.default: Varsayılan sürücü modu.compat: RoCE uyumlu sürücü modu.ofed: OFED tabanlı sürücü modu, GPU hızlandırmalı örnek türleri için uygundur.
-
allocateAllDevices: Normal Modda aygıt tahsis ilkesi.true: Düğümdeki tüm eRDMA aygıtlarını pod'a tahsis edin.false: NUMA topolojisine göre bir eRDMA aygıtı tahsis edin.
-
exposedLocalERIs: Yerel Modda pod'lara sunulacak düğümdeki eRDMA aygıtları. Yapılandırma formatı için örneğe bakın.exposedLocalERIs: - i-XXX erdma_0/erdma_1 # specify instance ID and erdma devices(erdma_0/erdma_1) to expose - i-* erdma_0 # specify erdma devices(erdma_0) to expose for all unspecified nodes - i-* erdma_* # expose all existing erdma devices for all unspecified nodes -
Görüntü yapılandırması: Varsayılan
erdma-agentgörüntüsü (registry.aliyuncs.com/erdma/agent) Yerel Modu desteklemez. Bir agent görüntüsü oluşturun ve bunu özel bir görüntü deposuna gönderin.Görüntüyü oluşturun ve gönderin. Örnek Alibaba Cloud Container Registry (ACR) kullanır. Önceden bir ad alanı ve bir görüntü deposu oluşturun.
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>
-
erdma-controllerbileşeninihelmkullanarak yükleyin.helm install -f deploy/helm/values.yaml --namespace kube-system alibaba-erdma-controller deploy/helm/ -
Yükleme işlemini doğrulayın.
-
Normal Modda hem
erdma-agenthem deerdma-controllerpod'larının oluşturulduğunu doğrulayın:kubectl get pods -n kube-system | grep erdmaDüğümdeki eRDMA aygıtı kaynaklarını sorgulayın:
kubectl get erdmadevices Yerel Modda yalnızca
erdma-agentpod'u oluşturulur.erdma-controllerpod'u veerdmadeviceskaynakları kullanılamaz.
-
2. Adım: eRDMA ağ hızlandırmayı destekleyen bir pod oluşturun
-
Kapsayıcı belirtiminin
resources.limitsbölümündealiyun/erdma: 1bildirimini yapın.<ERDMA_POD_IMAGE>ifadesini kapsayıcı görüntü adresinizle değiştirin: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: 1SMC-R ile şeffaf hızlandırmayı etkinleştirmek için
network.alibabacloud.com/erdma-smcr: "true"açıklamasını ekleyin. Çekirdek sürümü 5.10.134-17 veya üzeri olan Alibaba Cloud Linux 3 gereklidir. -
Dağıtımı yapılandırma dosyasına göre dağıtın. Dağıtım, belirtilen sayıda pod kopyasını başlatır.
kubectl apply -f example.yaml
İlgili bilgiler
ACK kümesinde eRDMA'yı yapılandırmak için bkz. ACK kümelerinde konteyner ağlarını hızlandırmak için eRDMA kullanın.
