全部產品
Search
文件中心

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

更新時間:Nov 21, 2024

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

前提條件

已建立ACK叢集且叢集版本為1.22及以上。請參見建立ACK託管叢集手動升級叢集

步驟一配置RRSA授權

ACK通過ACK eRDMA Controller組件提供eRDMA裝置的管理和配置能力。通過ACK eRDMA Controller管理eRDMA裝置時,需要擁有相應的許可權配置。您可以基於服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)完成授權。

1、開啟叢集RRSA授權能力

  1. 為叢集開啟RRSA功能。

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

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

    3. 基本資料頁簽,在叢集資訊地區單擊RRSA OIDC右側的開啟,閱讀提醒內容後根據頁面提示完成開啟。

      當叢集狀態由更新中變為運行中時,表示該叢集的RRSA特性已變更完成,RRSA OIDC右側會顯示供應商的URL連結以及ARN資訊。

  2. 安裝ack-pod-identity-webhook組件。

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

    2. 單擊安全頁簽,定位ack-pod-identity-webhook組件,按照頁面提示完成組件的安裝。

2、配置RAM授權

  1. 建立可信實體類型為身份供應商的RAM角色,角色名稱為ack-erdma-controller-role

    1. 使用阿里雲帳號登入RAM控制台

    2. 在左側導覽列,選擇身份管理 > 角色,然後在角色頁面,單擊建立角色

    3. 建立角色面板,選擇可信實體類型為身份供應商,然後單擊下一步

    4. 配置角色頁面,配置如下角色資訊後,單擊完成

      下文介紹樣本配置,詳細配置項請參見建立RAM使用者

      配置項

      描述

      角色名稱

      ack-erdma-controller-role。

      備忘

      選填有關該角色的備忘資訊。

      身份供應商類型

      OIDC

      選擇身份供應商

      ack-rrsa-<cluster_id>。其中,<cluster_id>為您的叢集ID。

      限制條件

      • oidc:iss:保持預設。

      • oidc:aud:選擇sts.aliyuncs.com

      • oidc:sub:條件判定方式選擇StringEquals,此處需要填入system:serviceaccount:ack-erdma-controller:ack-erdma-controller

  2. 參見如下內容,建立eRDMA管理所需的自訂權限原則。具體操作,請參見建立自訂權限原則

    展開查看ACK eRDMA Controller權限原則內容

    {
      "Version": "1",
      "Statement": [
        {
          "Action": [
            "ecs:DescribeInstances",
            "ecs:DescribeInstanceTypes",
            "ecs:DescribeNetworkInterfaces",
            "ecs:ModifyNetworkInterfaceAttribute",
            "ecs:CreateNetworkInterface",
            "ecs:AttachNetworkInterface"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        }
      ]
    }
  3. 為ack-erdma-controller-role角色完成上述權限原則的授權。具體操作,請參見為RAM角色授權

步驟二:安裝ACK eRDMA Controller組件

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

說明

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

  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鏡像發布記錄

  • 阿里雲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加速。