一种基于DNS负载均衡技术的容器动态缩容方法与流程

文档序号:15594050发布日期:2018-10-02 19:17阅读:151来源:国知局

本发明属于计算机服务领域容器动态缩容方法,尤其涉及一种基于dns(domainnamesystem,域名系统)负载均衡技术的容器动态缩容方法。



背景技术:

容器是轻量级的操作系统级虚拟化技术,可以让我们在一个资源隔离的进程中运行应用及其依赖项。相对于传统虚拟机技术,容器技术具有轻量级的资源开销和秒级启动时间良好属性。随着容器技术不断完善与发展,更多的服务提供商采用容器技术重构传统的业务平台,从而达到优化平台的资源效能和提升服务响应能力的目的。在实时业务环境中,业务量通常处于不断波动状态。于是,服务提供商通过调整容器数量来确保平台具有经济的资源开销:在业务量增加时,服务提供商通过增加容器数量来满足业务处理的需求;在业务量减少时,服务提供商则利用注销容器手段实现容器数量的减少。

现有编排器已较好的实现容器弹性扩容功能,支持动态地增加一定数量的容器,并借助dns负载均衡技术将业务量分发到新建的容器,从而满足猝发时业务流的需求,但目前不支持动态缩容。图1是kubernetes、rancher和docker等行业领先公司基于dns负载均衡技术的容器编排架构,主要包括基础设施、dns域名服务、编排器三部分,编排器基于资源编排模块、扩容模块进行容器扩容,流程如下:

1.扩容模块向基础设施发送容器扩容消息;

2.基础设施收到容器扩容消息后,容器向dns域名服务系统发送请求服务名的消息;

3.dns域名服务系统收到请求服务名的消息后,将服务名返回给容器;

4.容器收到服务名后,根据网段区间自动生成ip(internetprotocol,网络之间互连的协议)地址;容器创建成功完成后,容器将自身服务名和ip地址注册到dns服务器,并修改容器dns缓存时间为0。

当容器利用服务名通信时,容器首先向dns请求所通信的服务的名字与ip地址映射关系,通过反馈ip地址实现与服务内其他容器通信。但是现有技术中编排器尚不支持动态缩容,容器资源一旦被申请后,即使业务量下降,容器占有的资源也不会被容器编排器主动释放,通常需要业务部门人员手动删除部分容器来实现容器缩容,以达到容器资源释放的目的。

传统采取人工干预实现容器缩容的方法存在以下弊端与不足:

(1)由于从容器确定被撤销到实施容器撤销的间隔较长导致容器缩容时间通常较长,难以匹配业务量动态调整的速度;

(2)由于若干容器同时负责相同业务流,在撤销部分容器达到缩容目的时会导致部分业务中断。



技术实现要素:

针对现有人工干预实现容器缩容方法存在缩容时间过长和业务流被中断的技术问题,本发明提供一种基于dns负载均衡技术的容器动态缩容方法,可以在不影响业务流正常处理的前提下实现容器动态缩容任务,实现了从传统手动干预实现容器缩容到自动动态缩容的转变,降低了运维复杂度和难度,有效地降低容器缩容时间,可以快速匹配业务量实时变化的速度,达到快速调整容器规模的目的。

本发明的技术方案包括以下步骤:

第一步、改进编排器,向背景技术基于dns负载均衡技术的容器编排架构的编排器中增加缩容模块,改进后的编排器包括资源编排模块、扩容模块、缩容模块;缩容模块与各容器和dns域名服务系统相连,缩容模块检测服务资源利用率实现动态缩容;

第二步、将改进后的编排器部署到操作系统中,改进后编排器通过扩容模块创建一个名为service的服务,该服务拥有n个容器,分别记为docker1,…,dockeri,dockern,1≤i≤n,i、n为自然数;如果service服务创建成功,n个容器中每个容器向dns域名服务系统注册{service服务名,容器ip地址}映射关系,进入第三步;否则,进入第四步;

第三步、缩容模块从服务service中自动删除m个空闲容器实现动态缩容,1≤m<n,m为自然数,判断容器是否空闲的方法是:缩容模块检测服务资源利用率,根据资源利用率判断容器是否已完成业务流处理并处于空闲状态,若处于空闲状态,则删除该容器资源,同时,dns域名服务系统删除该空闲容器的服务名和ip地址的映射关系;

第四步、缩容任务结束。

作为本发明技术方案的进一步改进,所述第二步编排器通过扩容模块创建一个名为service的服务,该服务拥有n个容器,具体流程如下:

2.1改进后编排器利用扩容模块在基础设施创建一个名为service的服务,该服务拥有n个容器,并检查容器状态:如果服务名为service的容器数量为n且容器状态为“运行”(running),表明服务service创建成功,记录服务service的初始资源使用率(a,b),0≤a≤100%,0≤b≤100%,并记当前状态为s1,分别通过s1.a和s1.b访问s1状态下的资源使用率;记录服务service初始状态下n个容器的资源使用率{a1,b1},…,{ai,bi},…,{an,bn},0≤ai≤100%,0≤bi≤100%,分别通过s1.ai和s1.bi访问初始状态下容器dockeri的资源使用率,进入步骤2.2;否则,服务service未创建成功,跳转至第四步;

2.2n个容器中每个容器向dns域名服务系统注册{service服务名,容器ip地址}映射关系。

所述第三步缩容模块动态缩容方法是:缩容模块检测服务service的资源使用率,记为s2状态,如果s2状态下的资源使用率与s1状态下的资源使用率差额在5%以内,即||s2.a-s1.a||≤5%且||s2.b-s1.b||≤5%,则服务service进行缩容,初始化m=0,m为已删除容器统计变量;改进后编排器利用缩容模块从服务service中删除m个容器,流程如下:

3.1从服务service中随机选取1个容器,记为dockert,1≤t≤n,t为自然数;缩容模块检测s2状态下dockert的资源使用率与初始资源使用率的差额是否小于5%,如果是,即||s2.at-s1.at||≤5%且||s2.bt-s1.bt||≤5%,缩容模块删除容器dockert并向dns域名服务系统发送{service,容器ip地址}映射关系删除请求消息,转至步骤3.2;否则,说明容器dockert仍在运行任务,转至步骤3.1重新选择容器;

3.2dns域名服务系统接收到{service,容器ip地址}映射关系删除请求消息,根据该删除请求消息删除{service,容器ip地址}映射关系;如果删除不成功,向缩容模块发送未成功删除响应消息,跳转至步骤3.1重新选择容器;如果删除成功,向缩容模块发送成功删除响应消息,转至步骤3.3;

3.3m值增加1,比较m与m值,如果m≠m,跳转至步骤3.1;如果m=m,转至第四步。

所述资源利用率为cpu使用率和内存的使用率,即a、ai为cpu使用率,b、bi为内存使用率。

采用本发明可以达到以下技术效果:

1、改进后编排器在不影响业务流正常处理的前提下实现服务动态缩容任务,容器资源可按需回收,从而达到提升基础设施资源效能的目的。

2、改进后编排器的缩容具备自动化能力,缩容模块检测服务资源利用率,判断容器是否已完成业务流处理并处于空闲状态,若处于空闲状态,容器则删除(即回收)该空闲容器资源;同时,缩容模块向dns域名服务系统请求删除该空闲容器的服务名和ip地址的映射关系,从传统手动干预实现容器缩容到自动动态缩容的转变,降低了运维复杂度和难度。

3、改进后编排器能有效地降低容器缩容时间,可以快速匹配业务量实时变化的速度,达到快速调整容器规模的目的。

附图说明

图1是背景技术基于dns负载均衡技术的容器编排架构;

图2是本发明第一步对基于dns负载均衡技术的容器编排架构改进后的容器编排器;

图3是本发明实施例基于dns负载均衡技术的容器动态缩容方法的总体流程图。

具体实施方式

图1是背景技术所述的是kubernetes、rancher和docker等行业领先公司基于dns负载均衡技术的容器编排架构。主要包括基础设施、dns域名服务、编排器三部分,编排器基于资源编排模块、扩容模块进行容器扩容,流程如下:

1.扩容模块向基础设施发送容器扩容消息;

2.基础设施收到容器扩容消息后,容器向dns域名服务系统发送请求服务名的消息;

3.dns域名服务系统收到请求服务名的消息后,将服务名返回给容器;

4.容器收到服务名后,根据网段区间自动生成ip(internetprotocol,网络之间互连的协议)地址;容器创建成功完成后,容器将自身服务名和ip地址注册到dns服务器,并修改容器dns缓存时间为0。

当容器利用服务名通信时,容器首先向dns请求所通信的服务的名字与ip地址映射关系,通过反馈ip地址实现与服务内其他容器通信。但是现有技术中编排器尚不支持动态缩容,容器资源一旦被申请后,即使业务量下降,容器占有的资源也不会被容器编排器主动释放,通常需要业务部门人员手动删除部分容器来实现容器缩容,以达到容器资源释放的目的。

图2是本发明第一步对基于dns负载均衡技术的容器编排架构进行改进后的容器编排器。改进后的编排器包括资源编排模块、扩容模块、缩容模块。缩容模块与各容器和dns域名服务系统相连,缩容模块检测服务资源利用率,如cpu资源、内存资源利用率,判断容器是否已完成业务流处理并处于空闲状态,若处于空闲状态,容器则删除(即回收)该空闲容器资源;同时,缩容模块向dns域名服务系统请求删除该空闲容器的服务名和ip地址的映射关系。

图3是本发明实施例基于dns负载均衡技术的容器动态缩容方法的总体流程图。本发明包括以下步骤:

第一步、改进编排器,向背景技术基于dns负载均衡技术的容器编排架构的编排器中增加缩容模块,改进后的编排器包括资源编排模块、扩容模块、缩容模块;缩容模块与各容器和dns域名服务系统相连,缩容模块检测服务资源利用率实现动态缩容;

第二步、将改进后的编排器部署到操作系统中,改进后编排器通过扩容模块创建一个名为service的服务,该服务拥有n个容器,分别记为docker1,…,dockeri,dockern,流程如下:

2.1改进后编排器利用扩容模块在基础设施创建一个名为service的服务,该服务拥有n个容器,并检查容器状态:如果服务名为service的容器数量为n且容器状态为“运行”(running),表明服务service创建成功,记录服务service的初始资源使用率(a,b),0≤a≤100%,0≤b≤100%,并记当前状态为s1,分别通过s1.a和s1.b访问s1状态下的资源使用率;记录服务service初始状态下n个容器的资源使用率{a1,b1},…,{ai,bi},…,{an,bn},0≤ai≤100%,0≤bi≤100%,分别通过s1.ai和s1.bi访问初始状态下容器dockeri的资源使用率,进入步骤2.2;否则,服务service未创建成功,跳转至第四步;

2.2n个容器中每个容器向dns域名服务系统注册{service服务名,容器ip地址}映射关系。

第三步、缩容模块检测服务service的资源使用率,记为s2状态,如果s2状态下的资源使用率与s1状态下的资源使用率差额在5%以内,即||s2.a-s1.a||≤5%且||s2.b-s1.b||≤5%,则服务service进行缩容,初始化m=0,m为已删除容器统计变量;改进后编排器利用缩容模块从服务service中删除m个容器,流程如下:

3.1从服务service中随机选取1个容器,记为dockert;缩容模块检测s2状态下dockert的资源使用率与初始资源使用率的差额是否小于5%,如果是,即||s2.at-s1.at||≤5%且||s2.bt-s1.bt||≤5%,缩容模块删除容器dockert并向dns域名服务系统发送{service,容器ip地址}映射关系删除请求消息,转至步骤3.2;否则,说明容器dockert仍在运行任务,转至步骤3.1重新选择容器;

3.2dns域名服务系统接收到{service,容器ip地址}映射关系删除请求消息,根据该删除请求消息删除{service,容器ip地址}映射关系;如果删除不成功,向缩容模块发送未成功删除响应消息,跳转至步骤3.1重新选择容器;如果删除成功,向缩容模块发送成功删除响应消息,转至步骤3.3;

3.3m值增加1,比较m与m值,如果m≠m,跳转至步骤3.1;如果m=m,转至第四步;

第四步、缩容任务结束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1