一种构建容器网络的方法、系统、存储介质、电子设备与流程

文档序号:33629247发布日期:2023-03-28 22:17阅读:43来源:国知局
一种构建容器网络的方法、系统、存储介质、电子设备与流程

1.本发明属于kubernetes云平台技术领域,具体涉及一种构建容器网络的方法、系统、存储介质、电子设备。


背景技术:

2.容器管理平台kubernetes通过容器网络接口(cni)将容器网络方案实现与kubernetes解耦,可支持对接不同容器网络方案,以满足不同场景需求。目前容器网络方案可划分为overlay和underlay两类。overlay网络方案基于现有网络环境构建一层覆盖网络,常使用veth、bridge和tun等虚拟设备及ipip、vxlan等封包技术。与之相对,underlay容器网络方案则基于现有网络环境构建同网络平面的容器网络,常使用macvlan/ipvlan、sriov、弹性网卡等技术。overlay容器网络由于多了一层抽象,存在不同层度的网络性能损耗。
3.云服务提供商的iaas层大多以虚拟私有网络(virtual private cloud,vpc)方式提供网络隔离和网络管理能力。vpc可进一步划分子网,或以虚拟交换机vswitch形式划分。同个子网内虚拟机之间满足二层连通,同个vpc内虚拟机之间满足三层连通。vpc网络资源管理能力以api形式提供,如为虚拟机动态添加网卡、为网卡动态绑定子网ip等。部分公有云服务提供商,提供基于vpc的underlay容器网络插件,通过动态创建网卡并为容器提供ipvlan虚拟网卡等方式实现容器网络,如aws的amazon-vpc-cni-k8s插件,阿里云的terway插件等。
4.kubernetes pod是最小调度单元,一个pod里面装载一个或多个容器,这些容器共用一个网络栈。pod创建时,kubelet服务会创建该pod的网络命名空间等资源,并通过cni接口调用容器网络插件,后者会在该网络命名空间内配置网络栈,实现容器互通等目标。
5.部分公有云服务提供商,提供基于vpc的underlay容器网络插件,通过动态创建网卡并为容器提供ipvlan虚拟网卡等方式构建容器网络,为容器提供和虚拟机所处虚拟网络相当的网络能力,以满足客户对容器网络高性能及vpc级连通性的需求。目前,这类基于vpc的underlay容器网络插件均和云平台深度绑定,无法跨云平台使用,难扩展,且部分公有云/私有云提供商并未实现类似网络插件。
6.以阿里云容器平台ack提供的高性能网络插件terway为例,阿里云vpc以虚拟交换机vswitch方式管理二层网络,terway插件使用vpc和vswitch能力为kubernetes节点动态创建弹性网卡eni及分配辅助子网ip,通过eni独占或分配ipvlan虚拟网卡方式配置容器网络栈。该插件管理弹性网卡eni及辅助子网ip等逻辑均和阿里云api强相关,且深度依赖阿里云ecs metadata及vswitch等概念,最终使得该插件与阿里云强绑定,无法在其它云平台运行。由于terway插件主要模块不同程度包含对阿里云的依赖,插件开发者难以基于该插件开发适用于其它平台的网络插件。
7.若用户依赖这类深度绑定云平台的网络插件,当用户计划将服务迁移到其它云平台时,网络插件的差异会成为一个制约项。此外,在私有云场景,考虑到私有云iaas在api层
面的多样性,目前并不存在一种该类网络插件可快速对接各类云平台为kubernetes容器平台提供高性能容器网络。


技术实现要素:

8.针对现有技术中存在的上述问题,本发明提供一种构建容器网络的方法、系统、存储介质、电子设备,本发明中网络插件通过iaas提供者资源管理协议与具体云平台解耦,仅少量开发对应iaas提供者模块,便可快速实现使用云平台vpc网络能力的underlay高性能网络插件,快速对接不同云平台。
9.本发明采用以下技术方案:本发明实施例第一方面提供一种构建容器网络的系统,包括kubernetes集群、cni插件、资源管理系统、云平台,资源管理系统包括依次连接的资源管理模块、资源代理模块、iaas提供者模块,kubernetes集群对接cni插件,资源管理模块还与cni插件连接,iaas提供者模块对接云平台;资源代理模块,用于初始化及配置iaas提供者模块;iaas提供者模块,用于通过内置的iaas提供者资源管理协议对接云平台,以从云平台中获取相应的网络资源,iaas提供者资源管理协议包括多类资源管理协议和能力自描述协议,各类资源管理协议仅提供与云平台无关的资源通用描述信息,能力自描述协议表明iaas提供者模块可提供的网络资源管理能力;资源管理模块,用于对外提供资源管理api,以供cni插件获取网络资源;kubernetes集群,用于创建pod;cni插件,用于向资源管理模块获取网络资源,并基于获取的网络资源配置pod的网络栈。
10.作为优选方案,还包括分别与资源管理模块、资源代理模块连接的对象池模块;对象池模块,用于根据本地sqlite数据库记录的资源使用情况,及iaas提供者模块获取到的网络资源,得到空闲资源和已使用资源集合,通过对象池对网卡和ip资源做池化处理,维持一定数量的空闲资源。
11.作为优选方案,对象池模块中,通过对象池对网卡和ip资源做池化处理,维持一定数量的空闲资源具体为:当空闲资源数高于配置的高水位值,则通过对应iaas提供者资源管理协议释放部分空闲资源,当空闲资源数低于配置的低水位值,则通过对应iaas提供者资源管理协议申请部分资源。
12.作为优选方案,多类资源管理协议包括网卡资源管理协议、ip资源管理协议、vip资源管理协议。
13.作为优选方案,iaas提供者模块可提供的网络资源管理能力为多网卡能力、单网卡多ip能力、多网卡多ip能力、vip能力中的一种或多种。
14.本发明实施例第二方面提供一种构建容器网络的方法,基于上述第一方面提供的一种构建容器网络的系统,包括步骤:s1、根据配置初始化对应的iaas提供者模块;s2、iaas提供者模块通过内置的iaas提供者资源管理协议对接云平台,以从云平
台中获取相应的网络资源;s3、资源管理模块对外提供资源管理api,以供cni插件获取网络资源;s4、kubernetes集群创建pod;s5、cni插件向资源管理模块获取网络资源,并基于获取的网络资源配置pod的网络栈。
15.作为优选方案,步骤s2与步骤s3之间还包括步骤:根据本地sqlite数据库记录的资源使用情况,及iaas提供者模块获取到的已分配资源,得到空闲资源和已使用资源集合,通过对象池对网卡和ip资源做池化处理,维持一定数量的空闲资源。
16.作为优选方案,通过对象池对网卡和ip资源做池化处理,维持一定数量的空闲资源具体为:当空闲资源数高于配置的高水位值,则通过对应iaas提供者资源管理协议释放部分空闲资源,当空闲资源数低于配置的低水位值,则通过对应iaas提供者资源管理协议申请部分资源。
17.作为优选方案,步骤s3中,资源管理模块还基于本地sqlite数据库维护pod和已分配资源的关联关系以及进行网络资源的生命周期管理。
18.作为优选方案,资源管理模块进行网络资源的生命周期管理具体包括:定时检查pod是否存活,若为非存活状态,则主动释放相关网络资源;定时检查网络资源是否有效,若无效则上报告警。
19.本发明实施例第三方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如本发明实施例第二方面及第二方面任一项所述的一种构建容器网络的方法。
20.本发明实施例第四方面提供一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如本发明实施例第二方面及第二方面任一项所述的一种构建容器网络的方法。
21.本发明的有益效果是:本发明中网络插件通过iaas提供者资源管理协议与具体云平台解耦,仅少量开发对应iaas提供者模块,便可快速实现使用云平台vpc网络能力的underlay高性能网络插件,快速对接不同云平台。
附图说明
22.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1是根据本发明实施例的一种构建容器网络的系统的结构示意图;图2是本发明所述资源管理系统的结构框图;图3是本发明所述iaas提供者资源管理协议与云平台的交互图;
图4是根据本发明实施例的一种构建容器网络的方法的流程示意图;图5是根据本发明实施例的一种构建容器网络的方法的整体流程图;图6是根据本发明实施例提供的计算机可读存储介质的结构示意图;图7是根据本发明实施例提供的电子设备的结构示意图。
具体实施方式
24.以下通过特定的具体实施例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
25.实施例一:参照图1所示,本实施例提供一种构建容器网络的系统,包括kubernetes集群、cni插件、资源管理系统、云平台,资源管理系统包括依次连接的资源管理模块、资源代理模块、iaas提供者模块,kubernetes集群对接cni插件,资源管理模块还与cni插件连接,iaas提供者模块对接云平台;资源代理模块,用于初始化及配置iaas提供者模块;iaas提供者模块,用于通过内置的iaas提供者资源管理协议对接云平台,以从云平台中获取相应的网络资源,iaas提供者资源管理协议包括多类资源管理协议和能力自描述协议,各类资源管理协议仅提供与云平台无关的资源通用描述信息,能力自描述协议表明iaas提供者模块可提供的网络资源管理能力;资源管理模块,用于对外提供资源管理api,以供cni插件获取网络资源;kubernetes集群,用于创建pod;cni插件,用于向资源管理模块获取网络资源,并基于获取的网络资源配置pod的网络栈。
26.还包括分别与资源管理模块、资源代理模块连接的对象池模块;对象池模块,用于根据本地sqlite数据库记录的资源使用情况,及iaas提供者模块获取到的网络资源,得到空闲资源和已使用资源集合,通过对象池对网卡和ip资源做池化处理,维持一定数量的空闲资源。
27.本发明方案,参照图1所示,核心包括cni插件和资源管理系统两部分,以client-server架构组织。cni插件实现cni协议,作为一个可执行文件,与kubernetes对接。该插件提供准备容器网络栈(cmdadd) 、删除容器网络栈(cmddel)和检查容器网络栈(cmdcheck)能力,其所需子网网卡、子网ip等资源通过资源管理系统获取,其通过创建ipvlan虚拟网卡或直接使用弹性网卡、配置容器及宿主机路由、配置linux流量控制等方式准备容器网络栈。资源管理系统负责对接阿里云、aws或基于openstack构建的私有云等云平台vpc相关api,通过调用这类api为kubernetes集群节点管理网卡和子网ip等资源,这类资源将用于cni插件配置容器网络。资源管理系统核心配置字段示例如下:{"subnets": ["subnet-id"],
"iaas_type": "openstack","security_groups": ["sg-id-1"],......}其中iaas_type字段说明使用哪种内置实现的iaas提供者模块,iaas提供者模块和云平台一一对应;subnets字段说明使用哪些子网作为pod用子网,该字段值在aws、华为云、openstack等云平台为子网id,在阿里云则为虚拟交换机vswitch id;security_groups字段为动态创建网卡需绑定的安全组列表;除此之外,还有kubernetes service网段、对象池大小等配置。
[0028]
资源管理系统的模块组成如图2所示:资源管理模块:以grpc方式对外提供资源管理api,并维护pod和网卡及ip等资源的关联关系,提供这类资源的生命周期管理能力。
[0029]
对象池模块:由于iaas接口调用耗时具有不确定性,通过对象池对网卡和ip等资源做池化处理,维持一定数量的空闲资源,通过直接分配空闲资源以实现资源快速分配,加速cni插件配置容器网络,避免因容器网络栈准备耗时太久影响pod创建。
[0030]
资源代理模块:作为一个胶水层,通过iaas_type字段创建对应iaas提供者模块,进行一些模块初始化及配置工作;iaas提供者模块:实现iaas提供者资源管理协议,对接不同云平台api。
[0031]
为实现可跨平台特性,cni插件实现逻辑和具体平台无关,其只关注网卡、ip和路由等通用概念;资源管理系统的资源管理、对象池和代理模块依赖高度抽象的网卡、ip等资源,其资源定义和具体云平台无关。所有对云平台的依赖,通过 iaas提供者模块实现,而iaas提供者模块和云平台则通过iaas提供者资源管理协议对接。
[0032]
参照图3所示,iaas提供者资源管理协议包括网卡管理、ip管理、vip管理等资源管理协议和能力自描述协议。能力自描述协议说明该iaas提供者能提供什么能力,如多网卡能力、单网卡多ip能力、多网卡多ip能力和vip能力等。资源管理模块会根据这些能力自描述初始化相应管理模块,及决定分配哪种网络资源,例如某个iaas提供者模块仅提供单网卡多ip能力,该iaas提供者模块需实现子网ip管理协议,当cni插件向资源管理系统申请资源时,则会返回用于ipvlan的ip资源给cni插件,cni插件使用ipvlan虚拟网卡配置容器网络。各类资源管理协议的数据定义仅包含资源通用信息,例如id标识符、网卡mac地址、子网cidr和网关等平台无关的通用信息,资源代理模块使用这类抽象资源做资源管理。例如基于本系统对接阿里云,只需开发对应的iaas提供者模块即可,该模块逻辑简述如下:从配置文件或以其它方式获取鉴权信息,基于阿里云主机metadata服务和阿里云sdk实现对应资源管理协议定义的功能。对接openstack逻辑也大体类似。通过iaas提供者资源管理协议屏蔽云服务提供商差异,从而实现资源管理功能和cni插件复用,最终使得所述容器网络方案具备可跨云平台运行能力。
[0033]
采用上述构建容器网络的系统构建网络的具体步骤在实施例二中进行解释说明。
[0034]
实施例二:参照图4所述,本实施例提供的一种构建容器网络的方法,简单来说包括以下步骤:
s1、根据配置初始化对应的iaas提供者模块;s2、iaas提供者模块通过内置的iaas提供者资源管理协议对接云平台,以从云平台中获取相应的网络资源;s3、资源管理模块对外提供资源管理api,以供cni插件获取网络资源;s4、kubernetes集群创建pod;s5、cni插件向资源管理模块获取网络资源,并基于获取的网络资源配置pod的网络栈。
[0035]
本发明所述构建容器网络方法中更为细节的步骤可参照图5所示,包括以下步骤:1、部署和初始化:a、kubernetes拉起容器网络服务,创建核心配置文件,其中包含两类信息,第一类为资源管理系统使用的通用配置如子网id、iaas类型和安全组等;第二类是iaas提供者模块所需配置,例如aksk等云平台相关配置;b、每个kubernetes节点拉起容器网络服务时,将cni配置文件拷贝到特定目录;c、每个kubernetes节点拉起容器网络服务时,将cni插件文件拷贝到特定目录。
[0036]
2、资源管理系统管理网卡、ip等资源,以iaas提供者模块提供“多网卡多ip”能力为例:a、根据配置初始化对应iaas提供者模块;b、iaas提供者模块管理网卡;i、检查宿主机是否存在所需子网的网卡,若不存在则调云平台接口新增网卡;ii、根据配置的网卡可绑定ip数限制,若网卡已绑定ip数接近限制,则调云平台接口新增所需子网网卡;c、对象池管理ip资源:i、对象池初始化,根据本地sqlite数据库记录的资源使用情况,及iaas提供者获取到的已分配资源,得到空闲资源和已使用资源集合;ii、当空闲资源数高于配置的高水位值,则通过对应iaas提供者资源管理协议释放部分空闲资源;当空闲资源数低于配置的低水位值,则通过对应iaas提供者资源管理协议申请部分资源;d、资源管理模块提供grpc服务,供cni插件获取资源,并基于本地sqlite数据库维护pod和已分配资源的关联关系:e、资源管理模块负责ip等资源的生命周期管理;i、定时检查pod是否存活,若为非存活状态,则主动释放相关资源;ii、定时检查资源是否有效,若无效则上报告警;维护资源使用等信息。
[0037]
3、cni插件准备容器网络栈:a、kubernetes创建pod,kubelet准备好容器网络命名空间等参数后,调用cni插件cmdadd方法配置容器网络栈;b、cni插件调用资源管理系统获取资源,该资源的类型决定容器网络配置方案,如资源类型为ip则使用ipvlan虚拟网卡作为容器网卡;检查宿主机相关内核参数是否正确,如ip_forwarding是否开启等;c、cni插件调整宿主机网络,若使用ipvlan虚拟网卡,则检查宿主机网络命名空间
是否已存在ipvlan中转设备,若无则创建,并配置容器ip到该ipvlan中转设备的直连路由,以实现宿主机直接访问其上容器;d、cni插件配置容器网络栈,若使用ipvlan虚拟网卡:i、将宿主机对应子网网卡作为父网卡,创建ipvlan虚拟设备,加入容器网络命名空间并绑定ip;ii、配置网段路由和默认路由,默认路由网关为子网网关,即容器通过网关访问同vpc不同子网的ip;配置linux流量控制器,访问kubernetes service等流量走宿主机转发。
[0038]
e、返回cni插件配置容器网络栈结果给kubelet,继续pod创建流程:f、cni插件删除容器网络栈(cmddel)和检查容器网络栈(cmdcheck)方法实现类似。
[0039]
相对于kubernetes原生开源的基于虚拟私有网络的容器网络插件而言,本发明具有如下优点和效果:cni插件和资源管理系统核心模块不绑定云平台,可通过实现iaas提供者资源管理协议对接不同云平台,以此为基础实现所述容器网络插件的跨云平台特性,该特性可增强kubernetes容器平台多云多场景适配能力,减少落地障碍,提升产品竞争力。
[0040]
cni插件和资源管理系统核心模块均为通用逻辑,具有可扩展特性。基于本发明的设计,可方便实现多云多场景下容器多网卡等特性,提升容器平台产品竞争力。
[0041]
实施例三:参照图6所示,本发明实施例还提供一种存储介质,其上存储有计算机程序601,该指令被处理器执行时实现上述实施例中一种构建容器网络的方法的步骤。本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述实施例二的流程。
[0042]
其中,存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random accessmemory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
[0043]
实施例四:参照图7所示,本发明实施例还提供了一种电子设备,该电子设备可以包括处理器51和存储器52,其中处理器51和存储器52可以通过总线或者其他方式连接,图7中以通过总线连接为例。
[0044]
处理器51可以为中央处理器(central processing unit,cpu)。处理器51还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0045]
存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能
应用以及数据处理,即实现上述实施例二中的一种构建容器网络的方法。
[0046]
存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作装置、至少一个功能所需要的应用程序;存储数据区可存储处理器51所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0047]
所述一个或者多个模块存储在所述存储器52中,当被所述处理器51执行时,执行实施例二中所述的一种构建容器网络的方法。
[0048]
上述电子设备具体细节可以对应参阅实施例二中对应的相关描述和效果进行理解,此处不再赘述。
[0049]
以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1