目录

RDMA-06-CNI选型

概述

对于一个 GPU + RDMA 的 Kubernetes 集群,需要考虑高性能的网络方案,传统的集群网络 Overlay 肯定是不会考虑作为主网络的,但是可以考虑作为管理网络平面,Underlay 在不同的原理的实现方案下依然会有一些性能的差异,同时会跟企业网络架构、拓扑、设备都有很大的关系。

Netplugin

Netplugin 是一种 CNI 插件,具有以下特点:

  1. 灵活性: Netplugin支持多种网络拓扑结构和网络配置选项,包括网桥、VLAN、VXLAN、GRE、IPSec等,可以灵活地满足不同场景的需求
  2. 多租户: Netplugin支持多租户,可以为不同的用户或组织提供独立的网络空间和网络隔离
  3. 高性能: Netplugin利用了Linux内核的高性能网络协议栈和硬件加速技术,可以提供高性能的网络传输和处理能力
  4. 可扩展性: Netplugin支持插件式架构,可以通过插件扩展其功能和特性,例如支持不同的IPAM和SDN方案
  5. 易于部署和管理: Netplugin使用简单的JSON格式配置文件,可以轻松地部署和管理网络。同时,Netplugin也提供了丰富的命令行工具和API,方便用户进行管理和监控
/rdma-06-cni%E9%80%89%E5%9E%8B/img.png

Kube-OVN

借助 OVS/OVN 在 SDN 领域成熟的能力,Kube-OVN 将网络虚拟化的丰富功能带入云原生领域。目前已支持子网管理,静态 IP 分配,分布式/集中式网关,Underlay/Overlay 混合网络,VPC 多租户网络,跨集群互联网络,QoS 管理,多网卡管理,ACL 网络控制,流量镜像,ARM 支持,Windows 支持等诸多功能。

在数据平面,通过一系列对流表和内核的精心优化,并借助 eBPF、DPDK、智能网卡卸载等新兴技术,Kube-OVN 可以在延迟和吞吐量等方面的指标达到近似或超出宿主机网络性能的水平。在控制平面,通过对 OVN 上游流表的裁剪,各种缓存技术的使用和调优,Kube-OVN 可以支持大规模上千节点和上万 Pod 的集群。

此外 Kube-OVN 还在不断优化 CPU 和内存等资源的使用量,以适应边缘等资源有限场景。

/rdma-06-cni%E9%80%89%E5%9E%8B/img_2.png

Macvlan

Macvlan CNI 是一种网络插件,可以让容器拥有与宿主机不同的 MAC 地址,从而实现容器与宿主机网络隔离。它允许容器直接与物理网络通信,而不需要通过 NAT 或端口映射等机制进行网络访问。Macvlan CNI 将容器视为物理网络上的设备,因此容器可以直接通过宿主机上的物理接口与外部网络通信。这种方式可以提供更高的网络性能和更好的网络隔离效果,适用于需要高性能网络和网络隔离的场景,如容器化的高性能应用、网络虚拟化等。

/rdma-06-cni%E9%80%89%E5%9E%8B/img_1.png

优点:

  1. 提供了与物理网络接口相同的网络性能和隔离效果,适用于需要高性能网络和网络隔离的场景
  2. 可以提供容器直接访问外部网络的能力,适用于需要与外部网络进行通信的场景
  3. 不需要进行NAT或端口映射等操作,避免了性能损失

缺点:

  1. Macvlan CNI不能直接实现容器间的通信,需要通过其他插件实现,如Overlay网络
  2. Macvlan CNI在配置上比较繁琐,需要考虑不同网络环境下的不同配置方式,使用时需要谨慎
  3. Macvlan CNI会使用物理网络资源,如果资源不足可能会对其他容器或主机造成影响。同时,Macvlan CNI使用的物理网卡必须支持Promiscuous模式,否则可能会造成网络隔离失效的问题

SRIOV

SR-IOV(Single Root Input/Output Virtualization)是一种虚拟化技术,用于将单个物理设备(如网卡)虚拟化成多个虚拟设备,并为每个虚拟设备提供独立的硬件资源。RDMA(Remote Direct Memory Access)是一种数据传输技术,它允许直接在内存之间传输数据,而无需涉及 CPU 的复制操作。

SR-IOV 和 RDMA 都是独立的技术,它们可以分别在不同的物理设备上实现。虽然 SR-IOV 可以提高网络性能,但它本身并不提供 RDMA 功能。因此,SR-IOV不一定具有RDMA功能,具体要看实现方式和物理设备的支持情况。一些物理设备(如InfiniBand适配器)可以同时支持 SR-IOV 和 RDMA,但这并不是必须的。

/rdma-06-cni%E9%80%89%E5%9E%8B/img_3.png

当使用 SR-IOV CNI 时,容器的网络流量通过 SR-IOV 虚拟设备路由到其他机器。具体而言,当容器发出网络流量时,该流量首先通过 SR-IOV 虚拟设备发送到宿主机上的 SR-IOV 物理设备。然后,SR-IOV 物理设备使用硬件虚拟化技术将流量路由到其他机器的网络中,例如通过物理网络交换机或路由器。

在路由流量时,需要考虑 SR-IOV 虚拟设备的 MAC 地址和 IP 地址。通常,SR-IOV CNI 会为容器分配一个唯一的 MAC 地址和 IP 地址,并在网络中进行路由。另外,SR-IOV 虚拟设备也可以支持 VLAN 标记,以便在网络中实现更细粒度的路由和隔离。

需要确认 RDMA 网卡开启了 RoCEv2 协议。

1
2
# 可以通过下面这个命令查找RoCEv2的关键字
rdma link show

安装和配置

  1. 配置SR-IOV设备和驱动程序。在物理服务器上,需要安装支持SR-IOV的网卡和驱动程序以及在服务器BIOS中启用SR-IOV支持,并配置SR-IOV虚拟网卡
  2. 配置SR-IOV CNI插件。需要在每个Kubernetes节点上安装SR-IOV CNI插件。插件将根据SR-IOV虚拟网卡的数量自动生成相应数量的网卡
  3. 配置Multus CNI插件。您需要在Kubernetes集群中安装Multus CNI插件,并将其配置为使用SR-IOV插件

总结

要在现有的技术和架构体系下,搭建一个高性能 GPU 的计算集群,需要考虑一下几点:

东西和南北流向

考虑数据的东西流向,也要考虑南北流向,要考虑从数据源获取数据的网络架构,如果计算节点都使用了 RDMA 网卡,数据节点是普通的以太网卡,瓶颈主要会在读写数据节点上,尽管如此,至少数据包在计算节点是有享受到 RDMA 的高性能网卡带来的性能提升的,在通过 SR-IOV 虚拟出多个 VF 的情况下,共享这部分带宽也是有很大的收益的。

Netplugin的问题

当前 Netplugin 的部署模式下 Service 不能直接使用,会导致很多社区已有的框架需要做额外的适配,如果是新建的计算集群,采用双网卡的话,集群的管理网络完全可以用 Overlay 网络模式,节省内网 IP。

双网卡

在 Kubernetes 中,可以通过 Multus 和 SR-IOV CNI 来配置 RDMA 网络接口,从而实现更高的网络性能和更低的延迟,默认网卡最好是换成 SRIOV 网卡,双网卡可以不影响现有的 Netplugin。另外关于使用了 SR-IOV CNI 之后,IP 如何做管理,这里可以参考内部 Netplugin 来改造,甚至是初始的集群规模不大的前提下,IP 可以先通过 host-local 或者 whereabouts 这样的 IPAM 方案来提供。

警告
本文最后更新于 2023年4月9日,文中内容可能已过时,请谨慎参考。