一种基于SDN的容器网络资源调度方法与流程

文档序号:17626810发布日期:2019-05-10 23:44阅读:162来源:国知局
本发明涉及计算机网络领域,特别是涉及一种基于sdn(softwaredefinednetwork,软件定义网络)的容器网络资源调度方法,可应用容器组网和网络资源调度中。技术背景目前容器集群的资源调度相关研究主要包括两个方面:docker自身提供的资源限制功能以及容器集群管理平台提供的资源限制功能。docker作为容器的管理者,提供了控制容器资源的功能。正如使用内核的namespace进行容器之间的隔离,docker也是通过内核的cgroups来做容器的资源限制,主要包括cpu、内存和i/o。docker本身并没有给出网络限制方案,因为目前网络是通过插件来实现,和容器本身的功能相对独立,不易实现,扩展性也很差。提供资源限制功能的容器集群管理平台主要有kubernetes。在kubernetes中,每个pod都有个资源调度标记,通过这个资源调度标记来对pod进行服务质量管理。在kubernetes中,pod的资源调度级别有三种:guaranteed(保障)、burstable(突出)与best-effort(尽力转发)。相关研究主要集中在cpu、内存、磁盘和i/o等资源的资源调度,对容器网络的资源调度研究较少,也没有成熟的商业应用。特别需要指出的是,传统ip网络的资源调度技术虽然在理论和实践上相对来说比较成熟,但是与容器网络结合还有待进一步研究。近年来,sdn技术的出现使得我们在网络配置、管理、监控方面有了更大的灵活性。作为一种新型的网络架构,sdn基于网络抽象的思想,将网络中的控制层和数据层分离开来,提供对分布式网络的集中管理和动态维护能力,从而有效解决传统ip网络在维护、扩展和实验创新上的弊端。sdn网络主要包含应用、控制和数据这3个层面:控制层将网络各节点的控制功能从逻辑上集中;应用层利用控制层提供的可编程接口实现各种网络应用;数据层负责进行数据流的转发。利用sdn控制器维护的全局视图反映网络中各路径的使用情况,流量可以据此进行动态的转发以实现负载的均衡。因此,依据现有的容器组网框架,将sdn思想引入到容器资源调度为容器网络资源调度提供了新的思路。技术实现要素:针对现有技术无法根据容器网络的需求进行资源切分与保障的问题,引入sdn集中控制的思想,提出一种基于sdn的容器网络资源调度方法。本发明将网络软硬件资源统一抽象与描述,通过集中感知网络态势,结合任务的需求对容器网络资源进行合理切分与回收,构建集“组网、路由、监控”一体化的网络资源调度方法,从而实现容器网络资源的优化调度。具体技术方案如下:一种基于sdn的容器网络资源调度方法,包括以下步骤:第一步,基于sdn/nfv(networkfunctionvirtualization,网络功能虚拟化)技术进行网络软硬件资源统一抽象与描述;第二步,对容器网络实施资源分配与回收。将资源整合成资源池,组建并管理网络地址资源池和网络设备资源池,按需提供网络设备资源,网络销毁时及时回收网络设备资源;第三步,基于sdn集中控制的思想,在容器网内部署集中控制服务器,实施网络态势感知与路由一体化。作为本发明技术方案的进一步改进,所述第一步基于sdn/nfv技术进行网络软硬件资源统一抽象与描述,具体方法如下:1.1对网络设备功能进行抽象,利用sdn对网络的行为进行集中编程控制,利用nfv进行软硬件解耦和功能抽象,使网络设备不再依赖于专用硬件,资源可以充分灵活共享。1.2对网络服务最小单元进行抽象,基于网络设备功能的抽象,设计可编排的最小单元作为网络服务单元(网络对象),包含设备(虚拟/物理)、端口port(虚拟/物理)、链路link(end-endlink,net-netlink,end-netlink)、网络network(l2/l3/flow-based)、ip服务(dhcp/dns/nat)、安全服务(fw/lb/ips)。1.3根据容器网络组网方案的实现手段、网络特点等对网络组网方案进行抽象。将容器跨主机组网方案抽象为以下几种:(1)基于隧道的overlay网络,按隧道类型不同,采用不同的实现方案。如docker原生的overlay网络就是基于vxlan隧道实现的,ovn则需要通过geneve或者stt隧道来实现的,flannel最新版本也开始默认基于vxlan实现overlay网络;(2)基于包封装的overlay网络,基于udp封装等数据包包装方式,在docker集群上实现跨主机网络;(3)基于三层实现sdn网络,基于三层协议和路由,直接在三层上实现跨主机网络,并且通过iptables实现网络的安全隔离。作为本发明技术方案的进一步改进,所述第二步对容器网络实施资源分配与回收,具体方法如下:2.1根据软硬件资源抽象的结果将容器网络资源整合成网络地址资源池和网络设备资源池;2.2为网络服务单元静态分配网络资源,包括ip地址和网络设备的静态分配。2.3对网络资源进行动态调整,一方面根据配置信息自动对各容器网络分配和回收子网地址池,以及分配和回收容器ip地址,另一方面采用一致性算法确保集群内网络服务单元状态信息的一致性。在此基础上实现容器网络集群对网络设备动态的增加、删除和修改。具体方法为:2.3.1对ip地址进行动态调整,当kubernetes发出需要添加pod的请求时,返回步骤2.2;当kubernetes发出需要删除pod的请求时,则进行pod网络的清理工作,系统调用server/connection.go中的deleteconnection函数:首先删除之前创建的端口,然后再释放原来的ip供网络中的新pod使用。删除操作不需要进入容器网络namespace,在主机网络namespace即可完成。2.3.2对网络设备进行动态调整,所有网络服务单元首先运行控制代理,控制代理将对网络服务单元进行操作监听和服务发现,获取集群中任何网络服务单元的保活信息,并采用一致性算法确保集群内网络服务单元状态信息的一致性。在此基础上实现容器网络集群对网络服务单元动态的增加、删除、查询和标签值修改。作为本发明技术方案的进一步改进,所述第三步实施网络态势感知与路由有一体化,具体方法如下:3.1网络态势感知。通过转发层的感知模块探测网络拓扑,感知底层网络拓扑变化和流量情况,在控制面通过集中控制数据库维护一个整网的拓扑视图。同时监控网络状态,如拥塞等异常情况,并提供网路感知信息获取接口,为容器网络资源调度提供必要参考和依据。3.2集中控制服务器基于linuxcgroup技术对全局链路状态信息和各节点的路由信息进行分析后统一进行调度和路由优化控制,形成全局的网络资源控制策略,下发到各路由节点的控制代理,最终回注到节点,实现在全网范围内的最优网络资源调度效果。3.3集中控制服务器对容器网络状态进行持续性跟踪评估。作为本发明技术方案的进一步改进,所述步骤2.2为网络服务单元静态分配网络资源,具体流程如下:2.2.1利用容器云平台kubemetes创建pod的infra容器;2.2.2infra容器创建成功后,创建一个端口,将端口放入infra容器网络的namespace内,并对该端口进行网络配置;2.2.3kubemetes创建自定义网络类型并指定网段,然后以json格式将具体的网络配置信息封装在requestbody中;2.2.4在自定义的网段中利用requestbody中的requestip参数指定固定ip地址给pod使用,如果requestip参数留空,转2.2.5;2.2.5kubemetes自动选择合适的ip即网络中未使用的最小ip给pod使用;2.2.6启用完成ip地址配置的端口,pod未来将使用它作为对外通信的网络接口;2.2.7切换回主机网络的namespace,如果网络设置成功,则向kubemetes返回0(设置正常),否则返回1(设置失败),并继续等待下一次设置容器网络的请求。作为本发明技术方案的进一步改进,所述步骤3.1网络态势感知,具体方法为:3.1.1基于sdn的集中控制思想,在容器网内部署一台集中控制服务器,在每台物理服务器节点上部署控制代理;3.1.2通过控制代理从节点内部获取链路状态信息和路由信息;3.1.3控制代理端采用tcp协议通过网络套接字(networksocket)将采集到的信息发送给集中控制服务器;3.1.4集中控制服务器对控制代理发送过来的原始数据进行汇总,分析整合后存储到集中控制数据库,形成全局视图。作为本发明技术方案的进一步改进,所述步骤3.2具体流程如下:3.2.1集中控制服务器对全局链路状态信息和各节点的路由信息进行分析,对集群中主机的网络资源利用率和业务容器的负载进行统计;3.2.2集中控制服务器根据主机网络资源利用率的统计结果和每个容器所在的位置,计算每两个容器之间的最佳路径,实施基于容器迁移的负载均衡;3.2.3集中控制服务器根据业务容器负载的统计结果采用net_prio对容器网络流量进行分级,根据容器节点运行业务的优先级设置相应数据分组的优先级,其中,net_prio是cgroup中的网络优先权子系统,可以为各个cgroup中的应用程序动态配置每个网络接口的流量优先级;3.2.4集中控制服务器根据容器业务负载情况和net_prio划分的容器网络流量优先级对容器网络资源进行动态调度,给负载较重的容器节点增加网络带宽;3.2.5集中控制服务器采用net_cls对容器发送的所有数据加上标签,然后使用trafficcontroller(流量控制器)根据数据包上的标签进行流量控制,限制容器所使用的网络带宽,其中net_cls用于cgroup中给报文打上分类等级的标签,用于过滤分类。作为本发明技术方案的进一步改进,所述步骤3.3集中控制服务器对容器网络状态进行持续性跟踪评估,具体方法为:3.3.1控制代理定期查询每个容器发送及接收的网络数据量;3.3.2控制代理统计同期使用网络的信息,并将这些信息通过网络套接字(networksocket)暴露出来供集中控制服务器使用;3.3.3集中控制服务器对资源调整前后网络的运行情况进行对比分析,如果出现网络拥塞或运行故障时则执行回滚操作,否则,转3.3.1。采用本发明提供的技术方案可以达到以下技术效果:1.本发明第一步,基于sdn/nfv技术对容器网络进行软硬件资源进行抽象,sdn结合nfv通过标准的南向接口屏蔽了底层物理转发设备的差异,实现了网络资源的虚拟化,同时开放了灵活的北向接口供上层业务按需进行网络配置并调用网络资源。2.本发明第二步在步骤2.1,通过将容器网络资源整合成资源池,可实现灵活、弹性的资源部署,提高资源利用率。3.本发明第二步在步骤2.2和步骤2.3,通过静态分配与动态调整相结合的方式,能够实现按需提供网络资源,并在网络设备销毁时及时回收网络资源。4.本发明第三步,通过部署集中控制服务器,实现对容器网络的全局监控和路由优化,并实现对网络资源长期的优化调度。附图说明图1是本发明中基于sdn的网络资源调度方法框架图;图2是本发明中网络设备功能抽象示意图;图3是本发明中网络资源分配与回收流程图;图4是本发明中网络态势感知与路由一体化流程图;图5是本发明中容器迁移流程图。具体实施方式以下将结合说明书附图和具体实施例对本发明做进一步详细说明。如图1所示,本发明提供一种基于sdn的容器网络资源调度方法,包括以下步骤:第一步,基于sdn/nfv技术进行网络软硬件资源统一抽象与描述。具体方法为:s101:结合图2,对网络设备功能进行抽象,利用sdn对网络的行为进行集中编程控制,利用nfv进行软硬件解耦和功能抽象,使网络设备不再依赖于专用硬件,资源可以充分灵活共享。s102:对网络服务最小单元进行抽象,基于网络设备功能的抽象,设计可编排的最小单元作为网络服务单元(网络对象),包含设备(虚拟/物理)、端口port(虚拟/物理)、链路link(end-endlink,net-netlink,end-netlink)、网络network(l2/l3/flow-based)、ip服务(dhcp/dns/nat)、安全服务(fw/lb/ips)。s103:根据容器网络组网方案的实现手段、网络特点等对网络组网方案进行抽象。将容器跨主机组网方案抽象为以下几种:(1)基于隧道的overlay网络,按隧道类型不同,采用不同的实现方案。如docker原生的overlay网络就是基于vxlan隧道实现的,ovn则需要通过geneve或者stt隧道来实现的,flannel最新版本也开始默认基于vxlan实现overlay网络;(2)基于包封装的overlay网络,基于udp封装等数据包包装方式,在docker集群上实现跨主机网络;(3)基于三层实现sdn网络,基于三层协议和路由,直接在三层上实现跨主机网络,并且通过iptables实现网络的安全隔离。第二步,对容器网络实施资源分配与回收。将资源整合成资源池,组建并管理网络地址资源池和网络设备资源池,按需提供网络设备资源,网络销毁时及时回收网络设备资源。如图3所示,具体流程为:s201:根据软硬件资源抽象的结果将容器网络资源整合成网络地址资源池和网络设备资源池;s202:为网络服务单元静态分配网络资源,包括ip地址和网络设备的静态分配。具体方法如下:s202.1:利用容器云平台kubemetes创建pod的infra容器;s202.2:infra容器创建成功后,创建一个端口,将端口放入infra容器网络的namespace内,并对该端口进行网络配置;s202.3:kubemetes创建自定义网络类型并指定网段,然后以json格式将具体的网络配置信息封装在requestbody中;s202.4:在自定义的网段中利用requestbody中的requestip参数指定固定ip地址给pod使用,如果requestlp参数留空,转s202.5;s202.5:kubemetes自动选择合适的ip即网络中未使用的最小ip给pod使用;s202.6:启用完成ip地址配置的端口,pod未来将使用它作为对外通信的网络接口;s202.7:切换回主机网络的namespace,如果网络设置成功,则向kubemetes返回0(设置正常),否则返回1(设置失败),并继续等待下一次设置容器网络的请求。s203:对网络资源进行动态调整,一方面根据配置信息自动对各容器网络分配和回收子网地址池,以及分配和回收容器ip地址,另一方面采用一致性算法确保集群内网络服务单元状态信息的一致性。在此基础上实现容器网络集群对网络设备动态的增加、删除和修改。具体方法为:s203.1:对ip地址进行动态调整,当kubernetes发出需要添加pod的请求时,返回s202;当kubernetes发出需要删除pod的请求时,则进行pod网络的清理工作,系统调用server/connection.go中的deleteconnection函数。首先删除之前创建的端口,然后再释放原来的ip供网络中的新pod使用。删除操作不需要进入容器网络namespace,在主机网络namespace即可完成。s203.2:对网络设备进行动态调整,所有网络服务单元首先运行控制代理,控制代理将对网络服务单元进行操作监听和服务发现,获取集群中任何网络服务单元的保活信息,并采用一致性算法确保集群内网络服务单元状态信息的一致性。在此基础上实现容器网络集群对网络服务单元动态的增加、删除、查询和标签值修改。第三步,基于sdn集中控制的思想,在容器网内部署集中控制服务器,实施网络态势感知与路由一体化。如图4所示,具体流程为:s301:网络态势感知。通过转发层的感知模块探测网络拓扑,感知底层网络拓扑变化和流量情况,在控制面通过集中控制数据库维护一个整网的拓扑视图。同时监控网络状态,如拥塞等异常情况,并提供网路感知信息获取接口,为容器网络资源调度提供必要参考和依据。具体方法为:s301.1:基于sdn的集中控制思想,在容器网内部署一台集中控制服务器,在每台物理服务器节点上部署控制代理;s301.2:通过控制代理从节点内部获取链路状态信息和路由信息;s301.3:控制代理端采用tcp协议通过networksocket将采集到的信息发送给集中控制服务器;s301.4:集中控制服务器对控制代理发送过来的原始数据进行汇总,分析整合后存储到集中控制数据库,形成全局视图。s302:集中控制服务器基于linuxcgroup技术对全局链路状态信息和各节点的路由信息进行分析后统一进行调度和路由优化控制,形成全局的网络资源控制策略,下发到各路由节点的控制代理,最终回注到节点,实现在全网范围内的最优网络资源调度效果。具体方法为:s302.1:集中控制服务器对全局链路状态信息和各节点的路由信息进行分析,对集群中主机的网络资源利用率和业务容器的负载进行统计;s302.2:集中控制服务器根据主机网络资源利用率的统计结果和每个容器所在的位置,计算每两个容器之间的最佳路径,实施基于容器迁移的负载均衡,容器网络实时迁移主要包括打包传输和容器恢复两个阶段,处理流程如图5所示:打包传输这一阶段可以分为如下四个步骤:1)停止容器工作:将所有进程关闭,同时禁止网络。2)打包容器镜像:将运行中的容器进行打包成镜像,并重新命名。3)传输镜像:将打包生成的镜像进行传输。4)移除容器:关闭容器,卸载容器文件系统。容器恢复阶段的操作与检查点生成的操作类似,为检查点生成的逆操作,包含三个阶段:1)加载镜像:赋予新镜像文件权限,并加载到主机内。2)重新启动容器:依据保存在检查点文件中的信息,创建一个相同状态的容器。3)恢复容器工作:恢复容器中执行的任务,使网络处于可用状态,继续之前的正常运行。s302.3:集中控制服务器根据业务容器负载的统计结果采用net_prio对容器网络流量进行分级,根据容器节点运行业务的优先级设置相应数据分组的优先级;s302.4:集中控制服务器根据容器业务负载情况和net_prio划分的容器网络流量优先级对容器网络资源进行动态调度,给负载较重的容器节点增加网络带宽;s302.5:集中控制服务器采用net_cls对容器发送的所有数据加上标签,然后使用trafficcontroller(流量控制器)根据数据包上的标签进行流量控制,限制容器所使用的网络带宽。s303:集中控制服务器对容器网络状态进行持续性跟踪评估。具体方法为:s303.1:控制代理定期查询每个容器发送及接收的网络数据量;s303.2:控制代理统计同期使用网络的信息,并将这些信息通过networksocket暴露出来供集中控制服务器使用;s303.3:集中控制服务器对资源调整前后网络的运行情况进行对比分析,如果出现网络拥塞或运行故障时则采取回滚手段,否则,转s3031。综上所述,本发明提供一种基于sdn的容器网络资源调度方法,由于本方案基于sdn进行容器网络资源的调度,因而能够实现对容器网络资源的集中调度,实现资源灵活分配与回收。最后应说明的是,本发明还可有其他多种实施例,以上实施例仅用以说明本发明的技术方案而非限制,在不脱离本发明技术方案的精神及其实质的情况下,本领域的技术人员应当理解,可以对本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1