全部產品
Search
文件中心

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

更新時間:Dec 07, 2024

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

前提條件

已建立ACK叢集。請參見建立ACK託管叢集

步驟一:安裝ACK eRDMA Controller組件

您可以參見如下流程安裝ACK eRDMA Controller組件。

說明
  • 如果您的叢集網路外掛程式為Terway,還需要配置Terway的網卡白名單,避免Terway組件修改eRDMA的網卡。配置方式,請參見為彈性網卡(ENI)配置白名單

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

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

  2. 組件管理頁面,單擊網路頁簽,定位ACK eRDMA Controller組件,按照頁面提示配置組件並完成安裝

    配置項

    說明

    preferDriver 驅動類型

    選擇叢集節點上使用的eRDMA驅動類型。可選值:

    • default:預設驅動模式。

    • compat:相容RoCE驅動模式。

    • ofed:基於ofed的驅動模式,適用於GPU機型。

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

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

    可選值:

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

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

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

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

安裝ACK eRDMA Controller組件後,您可以在Pod使用下方配置來開啟eRDMA加速。

配置

配置方式

說明

開啟eRDMA

在Pod的容器資源中聲明aliyun/erdma的資源佔用。

spec:
  containers:
  - name: erdma-container
    resources:
      limits:
        aliyun/erdma: 1

通過在Pod資源中聲明aliyun/erdma的資源,為Pod分配eRDMA的裝置。

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

/# ls /dev/infiniband/
rdma_cm  uverbs0

開啟SMC-R透明加速

在開啟eRDMA的基礎上,在Pod的Annotation中聲明network.alibabacloud.com/erdma-smcr: "true",開啟Pod中TCP串連的透明加速能力。

metadata:
  annotations:
    network.alibabacloud.com/erdma-smcr: "true"

在啟用SMC-R的透明加速功能後,只有當TCP串連的兩端都配置了SMC-R時,才能使用eRDMA的加速。

您可以在Pod中安裝smc-tools工具,通過smcss命令檢查串連的加速狀態。

說明
  • 此功能僅支援Alibaba Cloud Linux3,且核心版本為5.10.134-17及以上。更多資訊,請參見Alibaba Cloud Linux 3鏡像發布記錄

  • 驅動類型選擇為ofedcompat時,不支援該選項。

  • 阿里雲ERI eRDMA裝置與SMC目前均不支援使用IPv6地址。如果應用程式層使用IPv6地址,會導致SMC回退到TCP協議棧。

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

  1. 參見步驟一:安裝ACK eRDMA Controller組件安裝組件時,配置preferDriverofed,用於NCCL類型的通訊。

  2. 在節點池中添加GPU節點。具體操作,請參見建立節點池

  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:
              privileged: true
            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裝置進行了加速。

情境樣本二:使用SMC-R透明加速應用網路

  1. 參見步驟一:安裝ACK eRDMA Controller組件安裝組件時,配置preferDriverdefault,用於普通類型的通訊加速。

  2. 參見下方範例程式碼,在叢集中建立SMC-R加速的應用。

    展開查看使用SMC-R加速的應用樣本模板

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: app-with-erdma
      name: app-with-erdma
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: app-with-erdma
      template:
        metadata:
          labels:
            app: app-with-erdma
          annotations:
            network.alibabacloud.com/erdma-smcr: "true"
        spec:
          containers:
          - image: <application image>
            imagePullPolicy: Always
            name: app-with-erdma
            resources:
              limits:
                aliyun/erdma: 1
  3. 查看Pod中網路連接的加速情況。

    您可以在容器中安裝smc-tools,通過smcss的命令查看加速效果。

    /# smcss
    State          UID   Inode   Local Address           Peer Address            Intf Mode 
    ACTIVE         00000 0059964 172.17.192.73:47772     172.17.192.10:80        0000 SMCR

    預期輸出表明,Mode中顯示SMCR,表明已對這條串連進行了eRDMA加速。