すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Docker コンテナと Kubernetes Pod での eRDMA の設定

最終更新日:May 16, 2026

eRDMA デバイスを Docker コンテナにマッピングするか、eRDMA Controller を使用してセルフマネージド Kubernetes クラスターの Pod に公開することができます。

制限事項

Docker での eRDMA は、次のイメージのみをサポートしています。

  • Alibaba Cloud Linux 3、Ubuntu 22.04、および Ubuntu 24.04 (ARM および x86)

  • Alibaba Cloud Linux 2、CentOS 7、CentOS 8、Ubuntu 18.04、Ubuntu 20.04、および Ubuntu 24.04 (x86 のみ)

説明

Anolis OS イメージはサポートされていません。

仕組み

Docker の --device オプションを使用して、/dev/infiniband/rdma_cm および /dev/infiniband/uverbsX キャラクタデバイスをコンテナにマップします。これにより、ユーザーモードプログラムはカーネルをバイパスして eRDMA デバイスに直接アクセスできます。

  • /dev/infiniband/rdma_cm:eRDMA 接続管理用のキャラクタデバイスで、接続の作成と破棄、および接続イベントの処理を行います。

  • /dev/infiniband/uverbsX:ユーザースペース eRDMA 操作用のキャラクタデバイスで、デバイスのオープン、通信エンドポイントの管理、メモリバッファの登録などが含まれます。

    説明

    /dev/infiniband/uverbsX: X はデバイスインデックス番号です。ls /dev/infiniband | grep uverbs を実行してデバイス名を確認します。

Docker コンテナでの eRDMA の設定

ステップ 1:インスタンスでの eRDMA の設定

インスタンスタイプが eRDMA をサポートしていること、Elastic RDMA Interface がアタッチされていること、eRDMA ドライバーがデプロイされていること、および eRDMA デバイスが正しく動作していることを確認してください。

ステップ 2:(オプション)インスタンスへの Docker のデプロイ

インスタンスに Docker がすでにインストールされている場合は、このステップをスキップしてください。

  1. インスタンスに接続します。詳細については、「Workbench を使用して Linux インスタンスにログオンする」をご参照ください。

  2. Docker がインストールされているかどうかを確認します。

    sudo docker -v

    Docker がインストールされている場合、バージョン番号が返されます。

    image

    インストールされていない場合は、インスタンスに Docker をデプロイするに進んでください。

    image

  3. インスタンスに Docker をデプロイします。

ステップ 3:(オプション)Docker イメージのデプロイ

Docker 環境にベースイメージがすでにある場合は、このステップをスキップしてください。

次の例では、Alibaba Cloud Linux ベースイメージをプルします。インターネットアクセスが必要です。

  1. Docker をインストールする.

  2. Alibaba Cloud Linux Docker イメージをダウンロードするには、次のコマンドを実行します。

    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 のバージョン。例: 2 または 3。

    • <region_ID>: Docker イメージのリージョン ID。例: cn-hangzhou

    • <TAG>: オプション。 Docker イメージのタグ。このパラメーターを指定すると、指定された Docker イメージバージョンがダウンロードされます。指定しない場合は、最新の Docker イメージバージョンがダウンロードされます。

    イメージのリージョンとバージョン情報を表示する

    1. コンテナレジストリ - アーティファクトセンター に移動します。

    2. Alibaba Cloud Linux 2 Docker イメージに関する情報を表示するには、[alinux2/alinux2] をクリックします。 Alibaba Cloud Linux 3 Docker イメージに関する情報を表示するには、[alinux3/alinux3] をクリックします。

      たとえば、次の図は、Alibaba Cloud Linux 3 Docker イメージに関する情報を示しています。セクション ① は Docker イメージのリージョンを示し、セクション ② は Docker イメージのバージョン情報を示しています。

      image.png

    コマンド例:

    • 中国 (杭州) リージョンで Alibaba Cloud Linux 3 Docker イメージのバージョン 220901.1 をダウンロードします。

      sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1
    • 中国 (杭州) リージョンで Alibaba Cloud Linux 2 Docker イメージの最新バージョンをダウンロードします。

      sudo docker pull alibaba-cloud-linux-2-registry.cn-hangzhou.cr.aliyuncs.com/alinux2/alinux2
  3. イメージがダウンロードされているかどうかを確認するには、次のコマンドを実行します。

    sudo docker images

    次の出力は、Alibaba Cloud Linux 3 Docker イメージのバージョン 220901.1 と Alibaba Cloud Linux 2 Docker イメージの最新バージョンがダウンロードされていることを示しています。

    image.png

ステップ 4:コンテナの起動と eRDMA デバイスのアタッチ

Docker の --device オプションを使用して、/dev/infiniband/rdma_cm および /dev/infiniband/uverbsX キャラクターデバイスをコンテナにマップします。詳細については、「仕組み」をご参照ください。

  1. ECS インスタンスに接続します。詳細については、「Workbench を使用して Linux インスタンスにログオンする」をご参照ください。

  2. Docker コンテナを起動し、eRDMA キャラクターデバイスをマッピングします。

    sudo docker run --net=host --device=/dev/infiniband/uverbsX --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bash

    パラメータ:

    • --net=host: コンテナのネットワークモードを host に設定します。コンテナ内のアプリケーションは、ホストのネットワークインターフェースと設定を共有します。

    • --device=/dev/infiniband/uverbsX--device=/dev/infiniband/rdma_cm: eRDMA ユーザーモードキャラクターデバイスをコンテナに公開します。

      キャラクターデバイス名 (uverbsX の X) を表示する:

      ls /dev/infiniband | grep uverbs

      image

    • --ulimit memlock=-1 は、maxlockedmemoryunlimited に設定し、非 root ユーザーが eRDMA 操作に十分なメモリをロックできるようにします。

    • <IMAGE ID>: Docker イメージ ID です。sudo docker images を実行して表示します。

      ターゲットイメージ ID の確認:

      sudo docker images

      この例では、ステップ 3 の Alibaba Cloud Linux イメージを使用します。出力例:

      image

    コマンドの例

    sudo docker run --net=host --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i e8d9a60b6967 /bin/bash

ステップ 5:Docker コンテナへの eRDMA ドライバーパッケージのデプロイ

eRDMA ユーザーモードドライバーパッケージもコンテナにデプロイする必要があります。これがなければ、コンテナ内から eRDMA デバイスを検出できません。Alibaba Cloud は、簡単にインストールできる yum および apt ソースを提供しています。

  1. インスタンスに接続します。詳細については、「Workbench を使用して Linux インスタンスにログオンする」をご参照ください。

  2. ターゲットコンテナに入ります。

    ステップ 4 でコマンドを実行した場合、すでにコンテナ内にいます。コンテナにユーザーモードのドライバーパッケージをインストールする手順に進んでください。

    1. ターゲットコンテナ ID を確認します。

      sudo docker ps

      この例では、手順 4 のコンテナーを使用します。出力例:

      image

    2. コンテナに入ります。

      sudo docker exec -it <CONTAINER ID> /bin/bash

      CONTAINER ID を前のステップのターゲットコンテナ ID に置き換えてください。

  3. コンテナ内でユーザーモードドライバーパッケージをインストールします。

    重要

    次の例では、http://mirrors.cloud.aliyuncs.com は内部のソースアドレスです。インターネット経由でソースにアクセスするには、http://mirrors.cloud.aliyuncs.comhttps://mirrors.aliyun.com に置き換えます。インターネットアクセスではトラフィック料金が発生する場合があります。詳細については、「パブリック帯域幅の課金」をご参照ください。

    CentOS 7/CentOS 8

    1. /etc/yum.repos.derdma.repo ソースファイルを作成します。

      sudo vim /etc/yum.repos.d/erdma.repo
    2. erdma.repo に以下の内容を追加し、ファイルを保存します。

      [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
    3. yum ソースキャッシュを更新します。

      sudo yum makecache
    4. ユーザーモードドライバーパッケージをインストールします。

      sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y

    Alibaba Cloud Linux

    1. リポジトリを追加します。

      sudo yum-config-manager \
       --add-repo \
       http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repo
      説明

      yum-config-manager がインストールされていない場合は、sudo yum install -y yum-utils を実行してインストールします。yum-config-manager は yum-utils パッケージの一部です。

    2. yum ソースキャッシュを更新します。

      sudo yum makecache
    3. ユーザーモードドライバーパッケージをインストールします。

      sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y

    Ubuntu 18.04/20.04/22.04/24.04

    1. 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
    2. 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.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
    3. apt ソースを更新します。

      sudo apt update
    4. ユーザーモードドライバーをインストールします。

      sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 -y
  4. コンテナ内から eRDMA デバイス情報を確認します。

    ibv_devinfo

    image

    eRDMA デバイスがコンテナ内から検出されます。

SMC-R または NetACC を使用してコンテナ内の TCP アプリケーションに eRDMA を統合するには、「アプリケーションの適応の概要」をご参照ください。

eRDMA Controller を使用したセルフマネージド Kubernetes クラスターへの eRDMA Pod のデプロイ

ステップ 1:eRDMA Controller のインストール

  1. マスターノードに Helm をインストールします。

    Helm は eRDMA Controller コンポーネントのインストールとアンインストールを管理します。インストール後、helm version を実行して確認します。
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
  2. マスターノードで eRDMA Controller のソースコードをダウンロードします。

    git clone https://github.com/AliyunContainerService/alibabacloud-erdma-controller.git
  3. インストール設定ファイルは deployment/helm/values.yaml です。動作モードを選択してパラメーターを設定するには、このファイルを変更します。2 つのモードがサポートされています。

    • Regular Mode:eRDMA Controller は Elastic RDMA Interface (ERI) を自動的に管理し、eRDMA リソースを動的に割り当てます。

    • Local Mode:eRDMA 環境が Kubernetes ノードですでに準備されており、eRDMA デバイスが Pod に公開されます。動的なリソース管理は行われません。

    設定項目:

    • localERIDiscovery: コントローラーの動作モードです。

      • true: ローカルモード。

      • false: 通常モード (デフォルト)。

    • credentials: 通常モードでは、コントローラーは Alibaba Cloud API にアクセスして ECS インスタンスと ENI を照会および設定します。まず RAM ロールを作成し、必要な権限を付与してください。

      AccessKey 認証がサポートされています。typeaccess_key に設定し、AccessKey ID とシークレットを入力します。

      credentials:
        type: "access_key"
        accessKeyID: "{access key}"
        accessKeySecret: "{access key secret}"

      Local Mode では不要です。

    • preferDriver: ノードの eRDMA ドライバータイプです。

      • default: デフォルトのドライバーモード。

      • compat: RoCE 互換のドライバーモード。

      • ofed:OFED ベースのドライバーモードで、GPU アクセラレーション対応のインスタンスタイプに適しています。

    • allocateAllDevices: 通常モードにおけるデバイス割り当てポリシーです。

      • true: ノード上のすべての eRDMA デバイスをポッドに割り当てます。

      • false: NUMA トポロジに基づいて eRDMA デバイスを 1 つ割り当てます。

    • exposedLocalERIs: ローカルモードでポッドに公開するノード上の eRDMA デバイス。設定形式については、例をご参照ください。

      exposedLocalERIs:
        - i-XXX erdma_0/erdma_1 # インスタンス ID と公開する eRDMA デバイス (erdma_0/erdma_1) を指定します
        - i-* erdma_0           # すべての未指定ノードに対して公開する eRDMA デバイス (erdma_0) を指定します
        - i-* erdma_*           # すべての未指定ノードに対して既存のすべての eRDMA デバイスを公開します
    • イメージ設定: デフォルトの erdma-agent イメージ (registry.aliyuncs.com/erdma/agent) は、ローカルモードをサポートしていません。エージェントイメージをビルドし、カスタムイメージリポジトリにプッシュしてください。

      イメージのビルドとプッシュ。この例では Alibaba Cloud Container Registry (ACR) を使用します。事前にネームスペースとイメージリポジトリを作成してください。

      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>
  4. erdma-controller コンポーネントを helm でインストールします。

    helm install -f deploy/helm/values.yaml --namespace kube-system alibaba-erdma-controller deploy/helm/
  5. インストールを確認します。

    • 通常モードでは、erdma-agenterdma-controller の両方のポッドが作成されていることを確認します:

      kubectl get pods -n kube-system | grep erdma

      ノード上の eRDMA デバイスリソースをクエリします。

      kubectl get erdmadevices
    • ローカルモードでは、erdma-agent ポッドのみが作成されます。erdma-controller ポッドと erdmadevices リソースは利用できません。

ステップ 2:eRDMA ネットワークアクセラレーションをサポートする Pod の作成

  1. コンテナの spec の resources.limitsaliyun/erdma: 1 を宣言します。<ERDMA_POD_IMAGE> をお使いのコンテナイメージアドレスに置き換えます:

    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: 1
    SMC-R で透過的アクセラレーションを有効にするには、network.alibabacloud.com/erdma-smcr: "true" アノテーションを追加します。カーネル 5.10.134-17 以降の Alibaba Cloud Linux 3 が必要です。
  2. 設定ファイルに基づいて Deployment をデプロイします。Deployment は指定された数の Pod レプリカを起動します。

    kubectl apply -f example.yaml

関連ドキュメント

ACK クラスターで eRDMA を設定するには、「ACK クラスターで eRDMA を使用してコンテナネットワークを高速化する」をご参照ください。