1.本发明涉及devops领域,具体来说,涉及实现calico网络下容器实例级的带宽控制方法。
背景技术:2.容器因其轻量化、隔离性、跨平台的特点在各种云原生、devops、容器云方案中起着核心的作用,配合k8s可以快速形成容器集群,可以方便实现应用的多实例,以及实现多容器实例间的分布式通讯。目前主流的实现k8s的容器间通讯的一个网络组件是calico。
3.容器间的网络带宽限制有其必要性:1. k8s管理的是分布式集群的节点,机器的硬件本身会存在差异,有的节点的网络具有千兆能力,有的节点网络具有万兆能力,需要做实除级的带宽限制;2. k8s集群下所有节点上的实例也不具有对等性,在多种应用共处的分布式集群下,有的节点上网络流量本身就很小,有的节点聚集着重流量的容器应用等,需要对容器实例级进行限制;3. 一个应用通是多实例,某些场景下,个别实例触发了bug或者性能非常低效的状态、再或者容器在的节点的机器负载非常高,不便于接受更多的请求,需要进行容器级的带宽限制现有的k8s下对容器网络进行带宽限制的技术存在着一些缺点:1. 无法做到容器级实例的限制:k8s对容器管理的最小粒度是pod,其对带宽的限制是基于pod级的注解来实现的,本质是应用级别的,即一组容器,而非单容器;2. 无法做到动态调整容器的带宽限制:k8s对pod带宽的限制,是以注解方式写到pod属性中,是在创建容器时定下来,且在pod的生命周期内是不可改变的,如果要调带宽(提高或者降低带宽限制),则需要重新调整注解,重新创建pod,这在生产环境中是非常不利的。因此现有的方案,无法对存活的容器实施带宽限制;3. 无法做到动态调整容器的带宽限制的取消:带宽的限制不是一层不变的,在一些重大节点或者业务高峰的时段再或者集群节点做了扩容,由于存在的带宽限制,不利于业务的高并发处理,此时迫切需要取消带宽限制,最大发挥容器的性能。然而目前k8s的带宽限制方案,是将带宽的限制是绑定到pod的生命周期的,无法做到不启容器的情况下动态取消带宽限制。
4.针对相关技术中的问题,目前尚未提出有效的解决方案。
技术实现要素:5.针对相关技术中的问题,本发明提出实现calico网络下容器实例级的带宽控制方法,以克服现有相关技术所存在的上述技术问题。
6.为此,本发明采用的具体技术方案如下:实现calico网络下容器实例级的带宽控制方法,该方法包括以下步骤:s1、请求代理服务接收所有带宽限制的请求信息;s2、根据请求信息中的容器信息,获取相对应的宿主机信息;s3、请求代理服务将请求数据经过组合下发到宿主机上的流量控制服务;s4、所述流量控制服务接受带宽限制的请求,并调用交通控制指令对所述请求代理服务传入的参数进行解析;s5、所述流量控制服务根据所接受的请求类型,对所述宿主机的虚网口进行相应的带宽配置。
7.进一步的,所述容器信息为容器名称或容器ip。
8.进一步的,当所述容器信息为容器名称时,所述根据请求信息中的容器信息,获取相对应的宿主机信息包括以下步骤:s21
′
、请求代理服务请求对外开放接口获取其中所有的容器信息;s22
′
、从所述容器信息中过滤出容器名称对应的容器;s23
′
、从对应的容器的属性中查找出容器ip及容器所在的宿主机ip。
9.进一步的,当所述容器信息为容器ip时,所述根据请求信息中的容器信息,获取相对应的宿主机信息包括以下步骤:s21
′′
、请求代理服务访问calico的客户端,通过客户端获取请求,获取所有的虚拟网络实体;s22
′′
、从所有的虚拟网络实体中,过滤出容器ip的容器在宿主机上的虚网口mac地址。
10.进一步的,所述请求数据包括请求信息与虚网口。
11.进一步的,所述请求类型包括限制带宽、取消限制带宽与更新限制带宽。
12.进一步的,当所述请求类型为限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′
、所述流量控制服务调用交通控制对传入的虚网口创建令牌桶过滤器队列;s52
′
、控制容器管理平台下使用容器网络的容器的带宽。
13.进一步的,当所述请求类型为取消限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′′
、所述流量控制服务调用交通控制对传入的虚网口删除令牌桶过滤器队列;s52
′′
、取消单容器的带宽限制。
14.进一步的,当所述请求类型为限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′′′
、所述流量控制服务调用交通控制对传入的虚网口实施宽带清理;s52
′′′
、调用tc对传入的虚网口实施带限配置。
15.进一步的,所述请求代理服务与所述流量控制服务之间的通讯协议为http或https。
16.本发明的有益效果为:通过在k8s容器集群下,利用calico网络基于bgp协议将k8s集群内的所有容器组网,并基于calico的客户端从k8s的etcd数据库中获取目标容器在宿
主机上的虚网口信息,然后利用linuxtc的shaping技术对容器在宿主机上的虚网口进行带宽的规则配置,从而实现对具体某一个容器实例的带宽限制、带带限制调整、带宽限制取消等动态管理功能。
17.具体的,可以对k8s容器集群下的任意一个容器实施带宽限制;可以取消某一个容器的带宽限制;可以更新某个容器的带宽限制;支持单个容器带宽的设置是很有好处的,非常有利于在资源受限的机器上降低流量请求,增强系统稳定性,而目前k8s官方对容器带宽的限制,只能做到pod级别,只能对一组容器实施带宽限制。
18.此外,还可以动态的对k8s容器集群下的任意一个容器实施带宽设置,包括创建、更新、取消,这个动态是非常有好处的,不需要重建容器而实施生效,不会中断业务应用;而目前k8s官方对容器带宽的限制,是作用到一组容器,不具备动态调整带宽的能力,且其取消、更新容器的带宽,只能通过编辑pod的配置,重新建新的容器,因此本发明能够避免目前生产过程中业务的中断,进而提高生产效率。
附图说明
19.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1是根据本发明实施例的实现calico网络下容器实例级的带宽控制方法的流程图;图2是根据本发明实施例的实现calico网络下容器实例级的带宽控制方法的整体架构图;图3是根据本发明实施例的实现calico网络下容器实例级的带宽控制方法中请求代理端tc
‑
req
‑
proxy实现的说明图;图4是根据本发明实施例的实现calico网络下容器实例级的带宽控制方法中由tc
‑
server服务实现带宽规则配置、清理、更新的说明图。
具体实施方式
21.为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
22.根据本发明的实施例,提供了实现calico网络下容器实例级的带宽控制方法。
23.现结合附图和具体实施方式对本发明进一步说明,如图1
‑
2所示,根据本发明实施例的实现calico网络下容器实例级的带宽控制方法,该方法包括以下步骤:s1、请求代理服务(tc
‑
req
‑
proxy)接收所有带宽限制的请求信息;s2、根据请求信息中的容器信息,获取相对应的宿主机信息;其中,所述容器信息为容器名称(containername)或容器ip(containerip)。
24.具体的,如图3所示,当所述容器信息为容器名称时,所述根据请求信息中的容器
信息,获取相对应的宿主机信息包括以下步骤:s21
′
、请求代理服务请求对外开放接口(k8s
‑
apiserver)获取其中所有的容器(pod)信息;s22
′
、从所述容器(pod)信息中过滤出容器名称对应的容器(pod);s23
′
、从对应的容器(pod)的属性中查找出容器ip及容器所在的宿主机ip(hostip)。
25.当所述容器信息为容器ip时,所述根据请求信息中的容器信息,获取相对应的宿主机信息包括以下步骤:s21
′′
、请求代理服务访问calico的客户端,通过客户端获取请求,获取所有的虚拟网络实体(workloadendpoint);s22
′′
、从所有的虚拟网络实体中,过滤出容器ip的容器在宿主机上的虚网口mac地址(calixxxxxxxx)。
26.s3、请求代理服务将请求数据经过组合下发到宿主机上的流量控制服务(tc
‑
server);其中,所述请求数据包括请求信息与虚网口。
27.s4、所述流量控制服务接受带宽限制的请求,并调用交通控制(tc)指令对所述请求代理服务传入的参数进行解析;s5、所述流量控制服务根据所接受的请求类型,对所述宿主机的虚网口进行相应的带宽配置。
28.其中,如图4所示,所述请求类型包括限制带宽、取消限制带宽与更新限制带宽。
29.具体的,当所述请求类型为限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′
、所述流量控制服务调用tc对传入的虚网口创建令牌桶过滤器(tbf)队列;s52
′
、控制容器管理平台(k8s)下使用容器网络(calico)的容器的带宽。
30.当所述请求类型为取消限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′′
、所述流量控制服务调用tc对传入的虚网口删除令牌桶过滤器队列;s52
′′
、取消单容器的带宽限制。
31.当所述请求类型为限制带宽时,所述流量控制服务根据所接受的请求类型,对虚网口进行相应的带宽配置包括以下步骤:s51
′′′
、所述流量控制服务调用tc对传入的虚网口实施宽带清理;s52
′′′
、调用tc对传入的虚网口实施带限配置。
32.此外,利用tc
‑
server服务实现上述带宽规则配置、清理、更新的算法如下:trafficqontrolserver(bindlimitrequest){
ꢀꢀ
while(true){
ꢀꢀꢀꢀꢀꢀ
onreceive(request) //接受请求
ꢀꢀꢀꢀꢀꢀ
resolve(request) //解析请求,获取虚网口
ꢀꢀꢀꢀꢀꢀ
if (virtualinterface not exist) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
continue;
ꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀ
bindwidthprocess(request)}bindwidthprocess(request) //带宽限制{
ꢀꢀ
dockerbindwidthlimit(带宽请求){
ꢀꢀꢀꢀꢀꢀ
case 请求种类 of
ꢀꢀꢀꢀꢀꢀꢀꢀ
case 1:<容器带宽限制>
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
调用tc对容器虚网口实施带宽限制
ꢀꢀꢀꢀꢀꢀꢀꢀ
case 2:<容器带宽更新>
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
调用tc对容器虚网口的旧的带宽限制规则的实施删除
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
调用tc对容器虚网口的实施新的带宽限制
ꢀꢀꢀꢀꢀꢀꢀꢀ
case 3:<取消带宽限制>
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
调用tc查询当前节点上所有的规则限制,返回所更新容器的带宽规则
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
调用tc对容器虚网口实施带宽限制规则的删除
ꢀꢀꢀꢀꢀꢀꢀꢀ
endcase
ꢀꢀꢀꢀꢀꢀ
}
ꢀꢀ
}}在一个实施例中,所述请求代理服务与所述流量控制服务之间的通讯协议为http或https,并且tc
‑
req
‑
proxy为实时在线代理服务,用于接受外部对容器的带宽设置的请求;tc
‑
server为实时在线服务,接受tc
‑
req
‑
proxy下发的请求。此外,tc
‑
req
‑
proxy与tc
‑
server的关系是:tc
‑
req
‑
proxy代理带宽请求,将外部的带宽请求经过重新组装,转由tc
‑
server做带宽的进一步处理,由tc
‑
server实现某个虚网口的带宽设置。
33.实施例一结合具体实验场景对本发明做进一步说明,本实施例用于对集群中的容器(容器ip192.168.44.155)实施带宽限制,带宽限制在256kbit,具体步骤如下:第1步:外部请求信息(容器ip192.168.44.155,带宽256kbit)发向请求代理服务tc
‑
req
‑
proxy。
34.第2步:接受带宽请求,初步加工请求并转发。请求代理服务tc
‑
req
‑
proxy将外部收到的请求信息做初步加工,然后将带宽请求信息下发到集群中相应机器上的tc
‑
server来做最终的带宽限制。
35.a)首先调用k8s集群的api,从集群中解析容器ip对应的容器信息,即容器所在的宿主机ip,因为只有知道容器所在的宿主机ip之后,tc
‑
req
‑
proxy才能将带宽的限制请求转到对应的宿主机上的tc
‑
server来做带宽的设置;b)然后,tc
‑
req
‑
proxy调用calico容器网络的客户端calicoctl,来获取容器所对应的虚网口cali4dd2690fe31;
c)最后,组装初步加工后的带宽请求信息,tc
‑
req
‑
proxy将(容器所在宿主机虚网口、带宽256kbit)传到宿主机10.45.80.38上的tc
‑
server来做最后的带宽限制。
36.第3步:对容器对应机器上的虚网口设置带宽。10.45.80.38上的带宽限制服务tc
‑
server收到tc
‑
re
‑
proxy发来的请求,开始调用tc实施带宽限制。设置带宽的原理是调用tc建议tbf队列,通过rate参数来控制带宽。例如,下面表示对容器在主机上的虚网口实现带宽限制:速率256kbit突发传输10k最大延迟50mstc qdisc add dev cali4dd2690fe31 root handle 1: tbf rate 256kbit burst 10000 latency 50ms设置完以后,可以进一步查询,确实已建立相应的带宽限制。
37.实施例二结合又一具体实验场景对本发明做进一步说明,本实施例用于对集群中的容器(容器ip192.168.44.155)实施带宽限制,带宽限制在256kbit.,具体步骤如下:第1步,同上述实施例一的第1步;第2步,同上述实施例一的第2步;第3步,取消带宽限制,对容器对应机器上的虚网口取消带宽限制。10.45.80.38上的带宽限制服务tc
‑
server收到tc
‑
re
‑
proxy发来的请求,开始调用tc实施取消带宽。取消带宽的原理是调用tc对虚网口删除tbf队列。tc
‑
server核心是调用下面的指令tc qdisc del dev cali4dd2690fe31 root完成以后,可以进一步查询,确实已清理了虚网口cali4dd2690fe31的带宽限制。
38.综上所述,借助于本发明的上述技术方案,通过在k8s容器集群下,利用calico容器网络基于bgp协议将k8s集群内的所有容器组网,并基于calico的客户端从k8s的etcd数据库中获取目标容器在宿主机上的虚网口信息,然后利用linuxtc的shaping技术对容器在宿主机上的虚网口进行带宽的规则配置,从而实现对具体某一个容器实例的带宽限制、带带限制调整、带宽限制取消等动态管理功能。
39.具体的,可以对k8s容器集群下的任意一个容器实施带宽限制;可以取消某一个容器的带宽限制;可以更新某个容器的带宽限制;支持单个容器带宽的设置是很有好处的,非常有利于在资源受限的机器上降低流量请求,增强系统稳定性,而目前k8s官方对容器带宽的限制,只能做到pod级别,只能对一组容器实施带宽限制。
40.此外,还可以动态的对k8s容器集群下的任意一个容器实施带宽设置,包括创建、更新、取消,这个动态是非常有好处的,不需要重建容器而实施生效,不会中断业务应用;而目前k8s官方对容器带宽的限制,是作用到一组容器,不具备动态调整带宽的能力,且其取消、更新容器的带宽,只能通过编辑pod的配置,重新建新的容器,因此本发明能够避免目前生产过程中业务的中断,进而提高生产效率。
41.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。