边缘计算中kubernetes网络能大一统吗?

曹培睿
边缘计算集群更靠近终端设备,能提供低延时、高带宽、高可靠、本地安全隐私保护等特性,且集群服务器以linux系统为主,但海量服务器的存在增加了运维难度。

边缘计算集群更靠近终端设备,能提供低延时、高带宽、高可靠、本地安全隐私保护等特性,且集群服务器以linux系统为主,但海量服务器的存在增加了运维难度。

谈边缘计算网络,就得先说说容器以及容器编排系统。对于单机来说,容器技术能有效地将单个操作系统的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。容器实际上是结合了namespace 和 cgroup 的一般内核进程,注意,容器就是个进程[1,2]。Docker 是一个开源的应用容器引擎,在工业界和学术界引起了极大关注。Docker 使用客户端-服务器(C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。其架构如下图所示[8]:

镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

后来,为了实现一个集群(多台服务器)中所有容器中的应用相互协调、共同工作,Apache Mesos、Google Kubernetes 以及 Docker Swarm 等容器编排工具应运而生。那么让集群中所有容器中的应用相互协调工作的基础是什么呢?这便是边缘计算网络要解决的问题。

Kubernetes在17年就已占据77%市场份额[3],而后也逐年上升。因此,主要来看看kubernetes。Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。其架构组件较多,不一一赘述,读者可自行查阅。这里着重提一下Pod。Pod是kubernetes中可以被创建、销毁、调度的最小单元,其中包含pause容器,以及一个或一组应用容器。如下图所示,一台主机节点可以创建多个Pod,每个Pod中能容纳多个容器,但都会在最初创建pause容器,其他容器与pause容器共享net、ipc、pid等资源。网络模型也是基于docker的网络模型创建和使用的。

Docker原生的跨主机网络模型有overlay,macvlan。macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan本质上是一种网卡虚拟化技术。macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络[4]。但macvlan大大增加了路由的复杂度,为了避免对主机路由的干扰,常常使用overlay网络模型[5]。

Kubernetes可以看做是一个大型的docker容器编排系统,他的CNI(Container NetworkInterface)也遵循docker的原生网络模型。目前kubernetes CNI有非常多的选择,如:Flannel、Calico、Canal、Weave、Kube-router[7]和Antrea。

Flannel: 最成熟、最简单的选择

Calico: 性能好、灵活性最强,目前的企业级主流

Canal: 将Flannel提供的网络层与Calico的网络策略功能集成在一起。

Weave: 独有的功能,是对整个网络的简单加密,会增加网络开销

Kube-router: kube-router采用lvs实现svc网络,采用bgp实现pod网络。

Antrea支持多种网络模型(Overlayand non-overlay modes),可以使用VXLAN、Geneve、GRE或STT作为封装协议[6]。

2019年计算机网络方向顶级会议NSDI中一篇paper(Slim)吸引了笔者注意。它的motivation是原始overlay网络每个包在跨主机间通信的过程中,会遍历两次系统内核网络栈(如Figure 2),而Slim的做法是利用SlimRouter和SlimSocket来改造通信过程,让每个包在跨主机通信时仅仅遍历一次网络栈(如Figure 4)。从而提升吞吐,降低CPU占用。

笔者亲测了借助Slim在跨主机docker里的服务间通信,能让TCP的bandwidth提升到主机间通信的极限,并且可以在Antrea这种CNI中直接使用。猜想一下,overlay模式下的其他CNI可能也可以借助Slim的思想或方法使TCP的bandwidth提升到主机间通信的极限。

以小见大,延伸到整个kubernetes网络世界,笔者认为,虽然因历史原因,已经有很多CNI共存于市场,但如果某种CNI能在不同网络模型下都将性能提升到极致,并且更加方便用户直接使用的同时留出接口,提供二次开发的可能,那么有可能如同kubernetes一样良性循环,有望实现大一统。

作者:曹培睿,上海交通大学。

参考文献:

[1]https://www.cnblogs.com/shuiguizi/p/10922049.html

[2]https://coolshell.cn/articles/17010.html

[3]https://www.kubernetes.org.cn/3241.html

[4]https://blog.csdn.net/wfs1994/article/details/80659232

[5] Zhuo D, Zhang K, Zhu Y, et al. Slim: OSKernel Support for a Low-Overhead Container Overlay Network[C]. networkedsystems design and implementation, 2019: 331-344.

[6]https://github.com/vmware-tanzu/antrea

[7]https://www.jianshu.com/p/d9330360fc8c

[8]https://www.runoob.com/docker/docker-architecture.html

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论