rdma-agent 说明

最近更新时间:2025-07-21 17:51:31

我的收藏

简介

rdma-agent 是腾讯云容器服务 TKE 提供的网络组件,该组件会自动检测节点可用的 RDMA 设备,并注册到 Kubernetes 中。该组件支持 RDMA 网络虚拟化,能够将 RDMA 设备分配绑定到 Kubernetes Pod 当中,从而支持 Pod 使用 RDMA 设备的高性能数据传输能力。

网络架构

rdma-agent 支持通过 IPVLAN 实现 RDMA 网络虚拟化,其网络架构如下:

上图为 2 个节点 4 个 Kubernetes Pod 的图例,在图中:
每个节点有 1 个主网卡和 8 个 RDMA Bond 网卡。
每个 Pod 分配了 1 个名为 eth0 的普通网卡,可访问普通 VPC 网络。
每个 Pod 还分配了 8 个 IPVLAN 虚拟化出的 RDMA Bond 网卡,每个网卡与节点的其中一个 Bond 网卡对应,且有独立的 IP 地址,可访问 RDMA 互联网络。

部署在集群内的 Kubernetes 对象

Kubernetes 对象名称
类型
默认占用资源
所属 Namespaces
tke-rdma-agent-conf
ConfigMap
-
kube-system
tke-rdma-shared-agent
DaemonSet
0.01核CPU,100MB内存
kube-system

使用限制

支持 Kubernetes 1.20及以上版本的集群。
仅支持部署在相关有 RDMA 设备的实例上。

组件部署

前置检查

注意:
确保 RDMA netns 为 shared 模式,如果不是 shared,组件不能正常工作。
确保 RDMA 机器加入的 高性能计算集群(THCC)已经支持 /28 及以上的网段。
1. 执行以下命令,查看节点当前 rdma netns 是否为 shared:
/opt/mellanox/iproute2/sbin/rdma system show
输出应为:
netns shared
2. 如果输出为 exclusive,则需要执行以下命令修改为 shared:
rm /etc/modprobe.d/ib_core.conf
/opt/mellanox/iproute2/sbin/rdma system set netns shared
如果命令执行失败,则需要重启节点。
3. 确保 RDMA 机器加入的 THCC 集群已经支持 /28 及以上的网段,在节点上访问 meta-data 接口查询 RDMA 网卡支持的网段,确保其中 intMask 都为 /28 及以上,否则无法支持 IPVLAN 网络虚拟化能力(仅能支持 HostNetwork 的方式使用)。
curl http://169.254.0.23/meta-data/rdma-subnet | grep intMask


部署安装

1. 登录 容器服务控制台,在左侧导航栏中选择集群
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建
4. 新建组件管理页面中勾选 rdma-agent。如下图所示:

5. 参数配置请参见 组件参数配置说明
6. 单击完成即可创建组件。

部署节点设置 label

1. 容器服务控制台 的集群详情页中,选择节点管理 > 节点池,单击编辑修改节点池中节点的 label。如下图所示:

2. 在编辑参数设置中,新增或修改节点池中节点的 label,默认需添加 feature.node.kubernetes.io/tke-shared-rdma=true

3. 添加、修改完以后,也可勾选“对存量节点应用本次 Label/Annotation/Taint 更新”,从而应用到存量节点。
存量节点也可通过以下命令给节点添加 label,从而部署 rdma-agent 组件:
# <nodeName> 替换成存量节点的名称,通过 kubectl get node 可查询
kubectl label node <nodeName> feature.node.kubernetes.io/tke-shared-rdma=true

组件参数配置说明


参数配置项
描述
CpuRequest
组件在每个节点上运行时需要占用的 CPU,默认为 10m。
CpuLimit
组件在每个节点上运行时最大占用的 CPU,默认为 50m。
MemoryRequest
组件在每个节点上运行时需要占用的内存,默认为 100Mi。
MemoryLimit
组件在每个节点上运行时最大占用的内存,默认为 500Mi。
KubeletRootDir
组件运行所在节点的 kubelet 的根目录,默认为 /var/lib/kubelet,根目录修改时需同步修改组件的这个配置。
NodeSelector
组件所需运行节点的 label 键值对,默认配置是feature.node.kubernetes.io/tke-shared-rdma=true,若需自定义部署的节点 label,则需要修改这个配置。

使用方法