一种防止容器编排框架中POD内存溢出的方法、装置与流程

文档序号:23090036发布日期:2020-11-27 12:41阅读:215来源:国知局
本发明涉及kubernetes集群中的pod应用
技术领域
:,具体涉及一种防止容器编排框架中pod内存溢出的方法、装置。
背景技术
::pod应用运行在kubernetes集群中,kubernetes是google开源的一个容器编排框架,也叫容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡,当pod(pod,应用执行程序和运行环境)运行过程中使用的内存超过设置值时,将会被控制器杀死,导致应用短时间内无法提供服务,由于无法快速测试到应用周期性使用的内存资源,预先设置限制将可能出现两种情况,第一是实际业务需求一直大于限制值,另外一种情况是实际业务与限制值还有很大的距离。以上两种情况都将会带来损失。技术实现要素:考虑到设置的内存大小和建立连接数的不确定关系,无法直接限制连接数防止内存溢出,本发明提供一种防止容器编排框架中pod内存溢出的方法、装置。通过采用监控内存使用率判断是否触发截流、降低服务质量。本发明的技术方案是:一方面,本发明技术方案提供一种防止容器编排框架中pod内存溢出的方法,包括如下步骤:监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求;接收到流量控制的请求后,将根据连续请求次数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调整请求;接收到内存阈值调整请求后,动态更改应用内存阈值,实现内存使用率的降低。进一步的,监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求的步骤包括:获取当前pod设置的内存阈值;获取当前pod使用的内存大小值;根据内存阈值和当前内存大小值计算内存使用率;其中,内存使用率=当前内存大小值/内存阈值;为了防止内存溢出,如果内存使用率大于设定的阈值时,发出进行流量控制的请求。在这里检测是周期性的相应的流量控制请求也是周期性的。进一步的,监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求的步骤之前包括:根据历史流量控制的请求连续请求次数将请求进行拦截等级的划分,每个拦截等级对应一个丢包率;在这里,拦截等级越高相应的丢包力度就越大。将划分的拦截等级以及对应的丢包率存储到本地存储文件。进一步的,接收到流量控制的请求后,将根据连续请求次数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调整请求的步骤包括:接收到流量控制的请求后,检查本地存储文件判断该请求所属的等级,存储该等级值和时间戳;根据时间戳判断请求的连续性。若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调大请求,同时发布应用异常的告警通知。进一步的,接收到内存阈值调整请求后,动态更改应用内存阈值,实现内存使用率的降低的步骤包括:接收到内存阈值调整请求后,计算应用运行节点的空闲资源,并根据计算结果将通过更改cgroup参数值动态更改应用内存阈值变大并将更改的内存阈值进行存储,实现内存使用率的降低。进一步的,若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量的步骤还包括:若在下一个内存监测周期时,未收到流量控制的请求,发送内存阈值恢复请求;接收到内存阈值恢复请求后,动态恢复默认的内存阈值,并将内存阈值进行存储。节省资源降低能耗。另一方面,本发明技术方案提供一种防止容器编排框架中pod内存溢出的装置,包括内存监测器、流量控制器、内存动态更改器;内存监测器,应用监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求到流量控制器;流量控制器,用于接收到流量控制的请求后,将根据连续请求次数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调整请求到内存动态更改器;从而降低应用内存等资源的使用。内存动态更改器,用于接收到内存阈值调整请求后,动态更改应用内存阈值,实现内存使用率的降低。进一步的,内存监测器包括内存阈值获取模块、当前内存值获取模块、计算判断模块和流量控制请求发送模块;内存阈值获取模块,用于获取当前pod设置的内存阈值;当前内存值获取模块,用于获取当前pod使用的内存大小值;计算判断模块,用于根据内存阈值和当前内存大小值计算内存使用率并判断内存使用率与设定阈值的大小;其中,内存使用率=当前内存大小值/内存阈值;流量控制请求发送模块,用于计算判断模块输出内存使用率大于设定的阈值时,发出进行流量控制的请求。进一步的,该装置还包括设置器;设置器,用于根据历史流量控制的请求连续请求次数将请求进行拦截等级的划分,每个拦截等级对应一个丢包率;还用于将划分的拦截等级以及对应的丢包率存储到本地存储文件;进一步的,流量控制器包括检查模块、请求判断模块、流量调整模块和内存调整请求发送模块;检查模块,用于接收到流量控制的请求后,检查本地存储文件判断该请求所属的等级,存储该等级值和时间戳;请求判断模块,用于判断若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并输出信息到流量调整模块;流量调整模块,用于根据请求判断模块输出的拦截等级对应的丢包率执行丢包操作来调整流量;内存调整请求发送模块,用于当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调大请求,同时发布应用异常的告警通知。进一步的,内存动态更改器,具体用于接收到内存阈值调整请求后,计算应用运行节点的空闲资源,并根据计算结果将通过更改cgroup参数值动态更改应用内存阈值变大并将更改的内存阈值进行存储,实现内存使用率的降低。进一步的,请求判断模块,还用于若在下一个内存监测周期时,未收到流量控制的请求,发送内存阈值恢复请求到内存动态更改器;内存动态更改器,还用于接收到内存阈值恢复请求后,动态恢复默认的内存阈值,并将内存阈值进行存储。内存监测器根据内存使用率判断是否向流量控制器发送流量控制请求,流量控制器根据请求的次数也就是频率执行分阶段流量大小限制,无请求情况下可自动恢复至无拦截状态,当出现异常情况无法通过分阶段流量控制,则发起内存阈值调整请求并通知管理员,内存动态更改器接收到流量控制器的请求后,将动态更改应用资源最大限制,当收到恢复默认值时也将动态变更。从以上技术方案可以看出,本发明具有以下优点:采用监控内存使用率判断是否触发截流、降低服务质量。若内存使用率持续增高,则需动态增加内存,然后再向管理员发布告警信息,从而保障了应用持续可靠的提供服务。加强了kubernetes集群中应用持续提供服务的需求,避免了应用因业务激增、异常访问或应用gc导致内存使用过大,造成内存溢出使应用被杀死的可能。此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明一个实施例的方法的示意性流程图。图2是本发明一个实施例的装置的示意性框图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。如图1所示,本发明实施例提供一种防止容器编排框架中pod内存溢出的方法,包括如下步骤:s1:监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求;s2:接收到流量控制的请求后,将根据连续请求次数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调整请求;s3:接收到内存阈值调整请求后,动态更改应用内存阈值,实现内存使用率的降低。在有些实施例中,步骤s1中,在运行pod中注入守护容器,然后监控pod的内存使用情况,并计算出内存使用率,具体包括:s11:获取当前pod设置的内存阈值;从apiserver中获得当前pod设置的内存最大值,例如:请求/api/v1/pod/namespace/test得到memory=1024mi,s12:获取当前pod使用的内存大小值;从metricserver中获得当前pod使用的内存大小,例如:memory=900mi;s13:根据内存阈值和当前内存大小值计算内存使用率;其中,内存使用率=当前内存大小值/内存阈值;例如:内存使用率=900mi/1024mi≈88%s14:如果内存使用率大于设定的阈值时,发出进行流量控制的请求。在这里检测是周期性的相应的流量控制请求也是周期性的。例如,设定的阈值为80%;需要说明的是,s1的步骤之前包括:s0:根据历史流量控制的请求连续请求次数将请求进行拦截等级的划分,每个拦截等级对应一个丢包率,并将划分的拦截等级以及对应的丢包率存储到本地存储文件。例如,拦截等级的划分为三个等级,分别是第一等级、第二等级和第三等级;对应的丢包率,第一等级10%、第二等级15%、第三等级20%,等级越高对应的丢包率越大,当大于第三等级以后,需请求内存阈值调整并发出告警通知管理员,持续以第三等级的丢包率20%进行操作。在有些实施例中,步骤s2具体包括:s21:接收到流量控制的请求后,检查本地存储文件判断该请求所属的等级,存储该等级值和时间戳;根据时间戳判断请求的连续性。s22:若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;s23:当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调大请求,同时发布应用异常的告警通知。例如:等级为三级level=3,根据时间片段进行丢包iptables-aoutput-d192.168.1.1-ptcp--tcp-flagssyn,ack,fin,rstack-jdrop,则在一分钟内iptables规则总生效12s。在有些实施例中,步骤s3具体为:接收到内存阈值调整请求后,计算应用运行节点的空闲资源,并根据计算结果将通过更改cgroup参数值动态更改应用内存阈值变大并将更改的内存阈值进行存储,实现内存使用率的降低。在有些实施例中,若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量的步骤还包括:若在下一个内存监测周期时,未收到流量控制的请求,发送内存阈值恢复请求;接收到内存阈值恢复请求后,动态恢复默认的内存阈值,并将内存阈值进行存储。节省资源降低能耗。当一个周期内未收到流量控制的请求后,则先请求内存动态调整器恢复为初始内存阈值,然后再按照递减的方式降低拦截等级直到完全放开。使用运行节点的空闲资源,例如:/api/kubelet/mem收到恢复默认值请求,例如/api/kubelet/remem?mem=1024mib。如图2所示,本发明实施例提供一种防止容器编排框架中pod内存溢出的装置,包括内存监测器、流量控制器、内存动态更改器;内存监测器,应用监控pod的当前内存大小,并根据当前内存大小与预设置的内存阈值计算出内存使用率,如果内存使用率大于设定的阈值时,发出进行流量控制的请求到流量控制器;流量控制器,用于接收到流量控制的请求后,将根据连续请求次数判断拦截等级并根据拦截等级对应的丢包率执行丢包操作来调整流量;当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调整请求到内存动态更改器;从而降低应用内存等资源的使用。内存动态更改器,用于接收到内存阈值调整请求后,动态更改应用内存阈值,实现内存使用率的降低。在有些实施例中,内存监测器包括内存阈值获取模块、当前内存值获取模块、计算判断模块和流量控制请求发送模块;内存阈值获取模块,用于获取当前pod设置的内存阈值;当前内存值获取模块,用于获取当前pod使用的内存大小值;计算判断模块,用于根据内存阈值和当前内存大小值计算内存使用率并判断内存使用率与设定阈值的大小;其中,内存使用率=当前内存大小值/内存阈值;流量控制请求发送模块,用于计算判断模块输出内存使用率大于设定的阈值时,发出进行流量控制的请求。需要说明的是,该装置还包括设置器;设置器,用于根据历史流量控制的请求连续请求次数将请求进行拦截等级的划分,每个拦截等级对应一个丢包率;还用于将划分的拦截等级以及对应的丢包率存储到本地存储文件;在有些实施例中,流量控制器包括检查模块、请求判断模块、流量调整模块和内存调整请求发送模块;检查模块,用于接收到流量控制的请求后,检查本地存储文件判断该请求所属的等级,存储该等级值和时间戳;请求判断模块,用于判断若时间戳是连续的内存监测周期,将根据连续的内存监测周期的个数判断拦截等级并输出信息到流量调整模块;流量调整模块,用于根据请求判断模块输出的拦截等级对应的丢包率执行丢包操作来调整流量;内存调整请求发送模块,用于当设定时间段内一直以最高拦截等级进行流量的调整时,发送内存阈值调大请求,同时发布应用异常的告警通知。在有些实施例中,内存动态更改器,具体用于接收到内存阈值调整请求后,计算应用运行节点的空闲资源,并根据计算结果将通过更改cgroup参数值动态更改应用内存阈值变大并将更改的内存阈值进行存储,实现内存使用率的降低。进一步的,在有些实施例中,请求判断模块,还用于若在下一个内存监测周期时,未收到流量控制的请求,发送内存阈值恢复请求到内存动态更改器;内存动态更改器,还用于接收到内存阈值恢复请求后,动态恢复默认的内存阈值,并将内存阈值进行存储。内存动态更改器收到增大内存请求后,使用主机限制资源动态调整应用最大内存阈值,收到恢复内存阈值请求后,变更应用内存限制。尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1