非全研究生计算机网络-k8s网络插件(CNI)性能分析

简介: 非全研究生计算机网络-k8s网络插件(CNI)性能分析

由于计算机网络课程需要,看了一些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系统的高可用性支持、容器系统和容器的健康检查、分布式架构以及对在集群中创建的客户机连接的负载平衡。

46.png

云环境下容器支持的网络架构

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)和控制服务器通信。

47.png

Test-beds 的云系统架构


基于容器的网络架构设计

如图2所示,控制器deamon安装在master节点,POD部署在Minion。 我们在所有具有 OpenStack 网络环境、集群网络、Kuryr 和 Flannel 网络插件的节点上设置了 Open Virtual Switch (OVS),它是一个虚拟软件交换机[7][8]。

48.png

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 处理守护进程。

49.png


Overlay网络数据吞吐量对比


图 4 显示使用 ovs 的覆盖网络的吞吐量高于 Flannel。 在flannel网络的情况下,从OS User Space的POD传输到内核的tap接口的数据,通过flannel桥重新传输给User Space的flannel守护进程,将数据发送到主机的接口 .

50.png

覆盖网络和 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.


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
Kubernetes 数据安全/隐私保护 容器
K8s中Flannel网络插件安装提示forbidden无权限的解决方法
总的来说,解决“forbidden无权限”的问题,需要从权限和配置两个方面来考虑。只有当用户或者服务账户有足够的权限,且Flannel的配置文件设置正确,才能成功地安装Flannel。希望这个解答能够帮助你解决问题。
417 13
|
11月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
432 12
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
456 3
Kubernetes网络插件体系及flannel基础
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
1104 7
|
缓存 监控 网络协议
计算机网络的常用的网络通信命令(Windows)
本文介绍了网络技术中常用的命令,如ping用于检测网络连通性,ipconfig查看TCP/IP配置,netstat监控网络状态,arp显示和修改ARP缓存,at安排任务执行,tracert追踪路由,以及nbtstat获取NetBIOS信息。
372 1
|
安全 区块链 数据库
|
网络协议 网络架构
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
561 0
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
695 0
|
4月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
442 1
|
4月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
306 89