Kubernetes与HPC:(1)RDMA网络

什么是RDMA

在计算机运算领域,远程直接内存访问(英语:remote direct memory access,RDMA)是一种直接存储器访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。这允许高通量、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。

RDMA实现

常见网络环境

介绍RDMA网络实现之前,先介绍一下常见的几种网络环境:以太网(ethernet)、IB网(Infiniband)、光纤通道(Fibre Channel)。

  • Infiniband

InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连。[1]

  • Ethernet

以太网(英语:Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是当前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。

  • Fibre Channel

网状通道(Fibre Channel,简称FC)是一种高速网络互联技术(通常的运行速率有2Gbps、4Gbps、8Gbps和16Gbps),主要用于连接计算机存储设备。

以太网设计的初衷是为了实现不同系统的互联,是一种network,优先考虑交融性与分布式;IB主要解决的问题是在一个系统内部把多个设备整合起来,像一台设备一样工作,优先考虑的是高速与低延迟。

RDMA的三种实现

目前,大致有三类RDMA网络,分别是Infiniband、RoCE、iWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术,支持相应的verbs接口。


RDMA

从图中不难发现,RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以了,价格也相对便宜很多。

RDMA这种技术以前只能运行在IB网络下,为了将这种技术用在以太网环境下,就逐步发展出了RoCE/iWarp两种协议。

  • RoCE目前主要是由Mellonax主导,和TCP协议无关,性能更好。
  • iWarp主要由Chelsio主导,下层会依赖TCP协议,性能和可扩性行都差一些,优点是考虑了对广域网的支持。

目前来看RoCE比iWarp前景更好,实际使用也更广泛。

RDMA vs DPDK

DPDK是Intel主导,提供了基于用户态的数据链路层的功能,可以在上面构建出基于用户态的网络栈。

  • 核心共同点:二者均为kernel bypass技术,消除内核态到用户态的内存拷贝。
  • 核心差异点:DPDK将协议栈上移到用户态,RDMA将协议栈下沉到网卡硬件。

更多细致的差异对比,可以参考此文

发展出DPDK/RDMA以及多种实现,根本原因在于网络硬件发展很快,而占据主导的TCP协议当初是为了低速网络环境设计的。

Kubernetes with RDMA Network

三种主要容器网络模式

  1. Virtual bridge
  2. Multiplexing
  3. Hardware switching


    img

RDMA设备与k8s集成

要在Kubernetes中使用rdma设备,首先是通过device plugin插件机制,让k8s能够识别和使用rdma设备。其次,rdma网卡基本上都支持SR-IOV技术,利用基于该技术的Kubernetes CNI插件,可以构建出完整的容器网络。

当前支持RDMA的网卡主要是intel与mellanox两个厂家,各自均提供有对应k8s device plugin与SR-IOV网络cni插件。

  • intel

https://github.com/intel/sriov-network-device-plugin

https://github.com/intel/sriov-cni

  • mellanox

https://github.com/Mellanox/k8s-rdma-sriov-dev-plugin

https://github.com/Mellanox/sriov-cni

pod多网络

在HPC场景下,pod之间除了高性能网络之外,也可以有额外的网络,由此引入pod多网卡诉求,intel提供了一种解决方案multus(https://github.com/intel/multus-cni),该插件主要通过代理其它cni插件以实现,遵循k8s多网卡规范(https://github.com/K8sNetworkPlumbingWG/multi-net-spec)。

利用multus插件,结合常规cni插件与SR-IOV cni插件,即可实现下图所示的pod网络


在这里插入图片描述

参考资料

A Hacker’s Guide to Kubernetes Networking

你可能感兴趣的:(Kubernetes与HPC:(1)RDMA网络)