全部產品
Search
文件中心

Container Service for Kubernetes:在ACK叢集中使用eRDMA加速容器網路

更新時間:Aug 14, 2026

彈性RDMA(Elastic Remote Direct Memory Access,簡稱eRDMA)是阿里雲提供的低延遲、大吞吐、高彈性的高效能RDMA網路服務。eRDMA基於第四代神龍系統架構和雲上VPC網路,100%相容RDMA生態,提供超大規模網路部署的ECS普惠RDMA服務。本文介紹如何在ACK叢集中配置和使用eRDMA,包括CPU節點和GPU節點情境。

適用範圍

  • 叢集版本:

    • CPU節點:1.20及以上。

    • GPU節點:1.26及以上。

  • 執行個體規格:eRDMA僅支援部分執行個體規格,請參見在企業級執行個體上啟用eRDMA查看支援的執行個體規格列表。

步驟一:配置Terway白名單

如果叢集網路外掛程式為Terway,請為彈性網卡(ENI)配置白名單,避免Terway組件修改eRDMA的網卡。

步驟二:添加支援eRDMA的節點至ACK叢集

建立節點

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 參見建立和管理節點池,通過節點池建立節點。建立節點的規格需要支援eRDMA(請參見適用範圍),同時應選擇以下鏡像或基於以下鏡像的自訂鏡像:

    1. CPU節點:

      1. Alibaba Cloud Linux 3(所有版本)

      2. Alibaba Cloud Linux 4(所有版本)

      3. Ubuntu 24.04

    2. GPU節點:請在雲市場鏡像中選擇已經預先安裝eRDMA驅動的鏡像,例如:

      1. Alibaba Cloud Linux 3 64位(預裝eRDMA軟體棧)

添加已有節點

如果您已有支援eRDMA的ECS執行個體,可以將其手動添加到ACK叢集中。

重要

GPU節點必須安裝eRDMA驅動才可添加到叢集,有兩種方式進行安裝:

  • 通過OS鏡像預先安裝(推薦):節點已使用阿里雲提供的預裝eRDMA軟體棧的OS鏡像,例如雲市場鏡像中的Alibaba Cloud Linux 3 64位(預裝eRDMA軟體棧)

  • 手動安裝:參見在GPU執行個體上啟用eRDMA在執行個體上手動安裝eRDMA軟體棧。在節點加入叢集後,請確認eRDMA驅動和網卡配置正常。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 參見添加已有節點,將已有節點添加到節點池。已有節點的規格需要支援eRDMA(請參見適用範圍)。

步驟三:安裝ACK eRDMA Controller組件

說明

當節點存在多張網卡時,ACK eRDMA Controller 為附加的eRDMA網卡配置路由時,採用比同網段網卡路由更低的優先順序,預設採用200的路由優先順序,如果您在安裝ACK eRDMA Controller後需要手動設定網卡,注意避免路由衝突。

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理

  2. 組件管理頁面,單擊安裝組件,參照下方配置安裝ACK eRDMA Controller組件。

    配置項

    說明

    preferDriver

    選擇節點上使用的eRDMA驅動類型。

    • default:預設驅動模式。

    • compat:相容RoCE驅動模式,適用於OOB建鏈情境。

    • ofedOFED驅動模式,適用於GPU機型。

    關於驅動類型的詳細說明,請參見啟用eRDMA

    是否為Pod分配節點全部eRDMA裝置

    • 勾選:為Pod分配節點上所有的eRDMA裝置。

    • 不勾選:Pod根據NUMA拓撲分配一個eRDMA裝置。節點需要開啟CPU Static Policy才能保證Pod和裝置的固定NUMA分配。關於如何配置CPU Policy,請參見建立和管理節點池

  3. 安裝完成後,在左側導覽列,單擊工作負載 > 容器組,選擇ack-erdma-controller命名空間,查看Pod運行狀態,確認組件運行正常。

步驟四:使用eRDMA加速容器網路

安裝ACK eRDMA Controller組件後,在容器資源中通過aliyun/erdma配置項申請資源,即可開啟eRDMA加速。

apiVersion: apps/v1
kind: Deployment
metadata:
  ...
spec:
  ...
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:
            aliyun/erdma: 1 # 啟動eRDMA
        ports:
        - containerPort: 80

分配後,您可以在Pod中查看分配到的RDMA裝置。

/# ls /dev/infiniband/
rdma_cm  uverbs0
preferDriver 配置為 ofed(適用於 GPU 機型)時,Pod 的 /dev/infiniband/ 目錄下可能不包含 rdma_cm 裝置,僅顯示 uverbs0 等裝置。這是正常現象,因為 GPU 情境下 NCCL 等通訊架構不依賴 rdma_cm,不影響 eRDMA 加速功能的使用。

情境樣本:GPU機型使用eRDMA加速NCCL通訊

  1. 參考步驟二:添加支援eRDMA的節點至ACK叢集,在節點池中添加GPU節點,OS鏡像選擇Alibaba Cloud Linux 3 64位(預裝eRDMA軟體棧)

  2. 參考步驟三:安裝ACK eRDMA Controller組件,配置preferDrivercompat,用於NCCL類型的通訊。

  3. 在應用程式容器鏡像構建時安裝eRDMA相關包。

    展開查看構建鏡像安裝erdma相關包

    # Debian或者Ubuntu: 注意sources.list中的OS名和版本與實際使用的版本設定為一致。
    wget -qO - https://mirrors.aliyun.com/erdma/GPGKEY | apt-key add - \
      && echo "deb [ arch=amd64 ] https://mirrors.aliyun.com/erdma/apt/{OS|ubuntu} {Version|focal}/erdma main" \
      | tee /etc/apt/sources.list.d/erdma.list \
      && apt update \
      && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
    
    # Alibaba Cloud Linux或者RHEL:按照OS找到對應的repo目錄,配置到yum.repos.d目錄中。
    cat > /etc/yum.repos.d/erdma.repo <<EOF
    [erdma]
    name = ERDMA Repository
    baseurl = http://mirrors.aliyun.com/erdma/yum/redhat/7/erdma/x86_64/
    gpgcheck = 0
    enabled = 1
    EOF
    yum install --disablerepo=*  --enablerepo erdma -y libibverbs ibverbs-providers ibverbs-utils librdmacm
  4. 在叢集中運行使用eRDMA的GPU應用,以nccl-test為例。

    展開查看使用eRDMA的GPU應用樣本模板

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nccltest
    spec:
      selector:
        matchLabels:
          app: nccltest
      serviceName: "nccltest"
      replicas: 2
      template:
        metadata:
          labels:
            app: nccltest
        spec:
          hostNetwork: true 
          dnsPolicy: ClusterFirstWithHostNet
          containers:
          - env:
            - name: NCCL_SOCKET_IFNAME
              value: "eth0"
            - name: NCCL_DEBUG
              value: "INFO"
            - name: NCCL_IB_GID_INDEX
              value: "1"
            image: <nccl-test-image-with-erdma>
            imagePullPolicy: Always
            name: nccltest
            securityContext:
              capabilities:
                add:
                - SYS_RESOURCE
                - IPC_LOCK
            resources:
              limits:
                nvidia.com/gpu: "8"
                aliyun/erdma: "1"
              requests:
                nvidia.com/gpu: "8"
                aliyun/erdma: "1"
  5. 驗證NCCL使用了eRDMA加速。

    您可以在應用日誌中查看NCCL使用的通訊類型和使用的網卡數量。

    image

    預期輸出表明,已使用erdma_0erdma_1的eRDMA裝置進行了加速。