由于计算机网络课程需要,看了一些k8s网络机制,随翻译了一篇论文,说实话有点空洞。
作者:
Youngki Park School of Electronic Engineering Soongsil University Seoul,
Korea Hyunsik Yang School of Electronic Engineering Soongsil University Seoul,
Korea Younghan Kim School of Electronic Engineering Soongsil University Seoul,
摘要
轻量级云的重要性日益凸显
,微服务架构的基础设施越来越重要。 这有
导致许多研究人员提出基于容器的虚拟化
计算服务。 具体来说,对于网络,容器
网络接口技术被提议,用于连接
基于虚拟机的异构网络服务
云和容器。 为了提高云系统的网络性能,我们需要来比对CNI插件的详细设计和网络性能。 本文围绕各种CNI
技术,我们使用 OpenStack 设计了网络架构
云平台和Kubernetes容器管理
环境,随后对各种设计进行性能分析。 实验的结论对云计算系统的部署有非常有价值的指导作用。
关键词
OpenStack, Kubernetes, Container Networking Interface, CNI, Kuryr
介绍
基本上,云系统使用虚拟机来虚拟化物理资源来
提供独立的计算资源和来宾系统,来实现虚拟化网络和数据处理的灵活操作[1]。 但是,来宾操作系统正常运行需要包含
所有内核模块和用户硬件库
,所以对主机的CPU、内存、I/O
并且资源要求很高。 另一方面,
基于容器的技术只共享主机的内核
模块,它只需要用户的库和工具模块,
以及在用户空间中运行程序所需要的操作系统资源,例如来宾操作系统[2]。
根据这些优点,集装箱技术有一直在积极研究如何提供轻量服务。因此,Kubernetes管理和部署集成到OpenStack等云系统中,容器网络接口(CNI)技术建议与集装箱网络联动。基于在此基础上,Kuryr-CNI插件被开发用于链接NeutronOpenStack的网络和容器的网络。Kuryr-CNI通过OpenVswitch覆盖网络提供服务OVS, OpenStack的基本网络。然而,它不考虑数据处理性能,因为
基于这些优势,我们一直在研究容器技术如何提供轻量化服务。因此,将管理和部署容器的Kubernetes集成到OpenStack等云系统中,并提出了容器网络接口CNI (container Networking Interface)技术与容器网络对接。在此基础上,开发了Kuryr-CNI Plugin,将OpenStack的Neutron网络与容器网络连接起来。kurur - cni通过OpenStack的基础网络OVS (OpenVswitch)覆盖网络提供服务。但是,由于提供服务的网络结构或实例的增加,往往忽略了数据处理性能。本文设计了适用于云系统和容器系统集成的环境下,一种基于CNI的网络结构。我们采用Kubernetes的Flannel网络结构、OpenStack Kuryr网络的overlay网络结构和native-VALN网络结构来验证性能。
因此,本文根据数据包处理技术对基于容器的云的网络结构进行分类,并对其性能进行分析。我们对云环境下的网络架构进行了分类,并验证了每种架构的性能。对于性能评估,我们使用Kubernetes作为编排器在OpenStack环境中实现它。
相关的工作
介绍构建云环境容器系统的相关技术。首先,我们介绍容器、轻量级虚拟技术,并研究用于容器分发和管理的容器编排引擎(COE)技术。介绍了容器环境的开源网络架构。
A.容器和容器编排
云系统中的虚拟机是通过硬件虚拟化运行独立操作系统的虚拟机。它需要操作系统内核、二进制文件和执行服务应用程序所需的相关库。另一方面,与vm相比,container对硬件的依赖性更小,因为它与主机共享运行应用程序所需的内核模块,并且只需要程序二进制文件和库[3]。此外,由于服务的多样性和容器数量的增加,开发了[4]的容器编排引擎(COE),这是一个用于容器创建、删除和分发等自动化管理的平台。比较有代表性的开源软件有Kubernetes、Docker swarm、Apache mesos等。COE的主要功能包括对容器的调度、对容器和COE系统的高可用性支持、容器系统和容器的健康检查、分布式架构以及对在集群中创建的客户机连接的负载平衡。
云环境下容器支持的网络架构
Docker Swarm也可以提供实验环境,但是本文的实验环境和网络结构是基于目前业界使用最活跃的Kubernetes,并与云环境[5]集成而设计的。
B. Kubernetes的开放网络技术
在本文中,我们使用Kubernetes(也称为k8s)作为编排进行实验。Kubernetes使用插件提供了许多网络特性。在分析中,我们使用了Kuryr和kubernetes[6],它集成了云网络功能和Flannel,是最常用的网络解决方案。Flannel网络是Kubernetes环境下使用的覆盖网络,使用VxLAN或UDP进行报文传输。在不支持VxLAN的情况下,可以使用UDP进行调试,但一般不使用。Kuryr是一个OpenStack项目,它可以利用所有的neutron功能及其插件和服务。使用Kuryr, COE可以使用 neutron 特性。OpenStack neutron 管理所有网络例如:端口创建、负载均衡处理等,k8s节点根据 neutron 分配的信息在k8s-pod上创建端口后分配ip。此外,它还提供了基于虚拟交换机的VxLAN、VLAN、Flat等多种网络特性。
容器网络架构设计
在本节中,我们设计了云环境下各种容器网络结构,并对其进行了实现和评估。云环境构建为开源OpenStack环境,用于容器处理的COE使用Kubernetes配置。
基于云架构的容器
如图1所示,我们配置了一个容器网络环境。实验架构由一个控制节点和三个计算节点组成。控制节点由OpenStack网络管理功能和COE控制器组成。而执行容器的计算节点(也称为Minion)由一个代理组成,用于与容器执行引擎(Docker engine)和控制服务器通信。
Test-beds 的云系统架构
基于容器的网络架构设计
如图2所示,控制器deamon安装在master节点,POD部署在Minion。 我们在所有具有 OpenStack 网络环境、集群网络、Kuryr 和 Flannel 网络插件的节点上设置了 Open Virtual Switch (OVS),它是一个虚拟软件交换机[7][8]。
Test-beds 的云系统架构
节点间通信的数据平面和控制平面使用VxLAN隧道、VLAN和Flannel进行配置。 容器的网络实验环境配置如图3所示,为了衡量性能,我们配置了A到C经B的数据路径。
使用 OVS 的容器网络映射到位于 Pod 命名空间中的虚拟接口和在主机节点创建的 Tap 接口。 Pod 传输数据时,根据OVS 中管理的tag-id 确定VxLAN 和VLAN。 Pod传输数据时,根据OVS管理的tag-id确定VxLAN和VLAN。 在 Flannel 网络的情况下,Pod 的命名空间接口和主机的 Tap 接口之间的结构是相同的,但 Tab 接口与 Docker 的桥接网络互通。 Docker 网桥与 flannel 网桥网络互通,并将数据发送到 flannel udp 或 vxlan 处理守护进程。
Overlay网络数据吞吐量对比
图 4 显示使用 ovs 的覆盖网络的吞吐量高于 Flannel。 在flannel网络的情况下,从OS User Space的POD传输到内核的tap接口的数据,通过flannel桥重新传输给User Space的flannel守护进程,将数据发送到主机的接口 .
覆盖网络和 Kuryr 本地 vlan 数据吞吐量
比较
由于在数据包传输中频繁调用操作系统和用户内核空间,网络开销增加。 如图5所示,在使用Native vlan(OVS-VLAN或MVAVLAN)时,没有MTU变化和VxLAN隧道带来的开销,性能得到提升。 但是,应考虑主机节点的网络限制、有限的 VLAN ID、硬件支持等。
结论
本文根据数据包加速技术对基于容器的云的网络架构进行了分类,并对其性能进行了分析。 为了分析性能,我们在 OpenStack 环境中以 kubernetes 作为协调器实现了它。 此外,基于Kuryr-OVS和flannel网络设计了网络架构,并使用了支持offload的overlay网络和VLAN。 在 Flannel 的情况下,我们确认网络开销高于 OVS native-vlan 和 vxlan,因为它频繁调用 User 和 Kernel。
因此,云环境中容器的网络架构应根据系统配置和硬件支持来考虑。 在未来的研究中,我们将在系统架构中研究和验证容器的高速网络架构(VPP、DPDK、SRIOV等)。
引用
[1] Kumar, Rakesh, et al. “Open source solution for cloud computing platform using OpenStack.” International Journal of Computer Science and Mobile Computing, vol. 3(5), pp. 89-98, May. 2014.
[2] Bernstein, David. “Containers and cloud: From lxc to docker to kubernetes.” IEEE Cloud Computing, vol. 1(3), pp. 81-89, Sept. 2014.
[3] Zheng Li, Maria Kihl, Qinghua Lu, Jens A. Andersson, “Performance Overhead Comparison between Hypervisor and Container Based Virtualization.”, 2017 IEEE 31st International Conference on Advanced Information Networking and Applications (AINA), pp. 955-962, 2017.
[4] Khan, Asif. “Key Characteristics of a Container Orchestration Platform to Enable a Modern Application.” IEEE Cloud Computing, vlo. 5(4), pp. 42-48, Oct 2017.
[5] Burns, Brendan, et al. “Borg, omega, and kubernetes.” Commun. ACM, vol. 59(5), pp. 50-57, Apr. 2016.
[6] Kuryr-kubernetes – Openstack, https://docs.openstack.org/kuryrkubernetes/latest, accessed May 2018.
[7] flannel – CoreOS, https://coreos.com/flannel/docs/latest, accessed May. 2018.
[8] Kuryr - OpeenStack, https://wiki.openstack.org/wiki/Kuryr, accessed May. 2018.