CN112835685A - 容器内存调整方法及装置 - Google Patents
容器内存调整方法及装置 Download PDFInfo
- Publication number
- CN112835685A CN112835685A CN202110346649.9A CN202110346649A CN112835685A CN 112835685 A CN112835685 A CN 112835685A CN 202110346649 A CN202110346649 A CN 202110346649A CN 112835685 A CN112835685 A CN 112835685A
- Authority
- CN
- China
- Prior art keywords
- memory
- container
- container memory
- amount
- pod
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Abstract
本发明公开了一种容器内存调整方法及装置,涉及计算机技术领域。该方法包括监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新。本发明在控制容器内存进行更新过程中同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够在无需重建容器的情况下提供持续服务;本发明提供的容器内存调整方法不受限于容器性质,无状态应用和有状态应用均适用,提高了容器内存调整的普适性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及容器内存调整方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
Kubernetes是容器编排引擎,支持容器的自动化部署,大规模伸缩,应用容器化管理等功能。在Kubernetes中容器的内存资源使用量会随业务访问量波动而波动,但容器所分配的内存资源是在容器启动前就设置好的,在业务访问过程中不能随意调整。因此在业务访问高峰时会存在内存不足的情况,而在业务访问低谷时又会存在内存闲置的情况。为了解决上述问题,目前业界有以下两种技术方案:
(1)Pod的水平自动扩缩容。水平伸缩是对应用的实例个数进行调整,达到应用资源分配量的调整。Pod的水平自动扩缩容技术通过监控应用容器内存的使用率,动态修改应用Pod的副本数量,达到应用内存分配随业务流量波动而动态调整的效果。其原理为,水平自动扩缩容插件周期性的查询所有应用容器内存的使用量,并将所有应用容器的内存使用量取平均值,再根据设定的内存使用量目标值,计算产生一个用于缩放所需的副本数量。如果该值大于当前应用副本数量,则执行扩容操作;而当该值小于当前应用副本数量,则执行缩容操作。
(2)Pod的垂直自动扩缩容。垂直伸缩是对应该单体进行规格调整,达到应用资源分配量的调整。Pod的垂直自动扩缩容技术通过监控应用容器内存的使用率,动态修改应用Pod的内存资源配置,达到应用内存分配随业务流量波动而动态调整的效果。其原理为,垂直自动扩缩容插件周期性的查询应用容器内存的使用量,并产生推荐值。当推荐值超过应用设定的扩容阈值,则更新应用Pod的内存资源配置为推荐值,执行扩容操作;当推荐值低于应用设定的缩容阈值,则更新应用Pod的内存资源配置为推荐值,执行缩容操作。
然而,Pod的水平自动扩缩容技术要求各应用容器具有完全相同的功能,或者对外可以同时提供同等的服务,但其无法处理主从/主备模式的应用,故不具备普适性。Pod的垂直自动扩缩容技术可以解决主从/主备模式的应用内存扩容的问题,但是需要重建容器,造成服务中断,这对于一些如数据库等重要应用是无法接受的。
发明内容
本发明实施例提供一种容器内存调整方法,用以解决容器内存自动扩缩容不具备普适性及重建容器导致的服务中断问题,该容器内存调整方法包括:
监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;
根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
本发明实施例还提供一种容器内存调整装置,用以解决容器内存自动扩缩容不具备普适性及重建容器导致的服务中断问题,该容器内存调整装置包括:
内存监测模块,用于监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;
内存更新模块,用于根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述容器内存调整方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述容器内存调整方法的计算机程序。
本发明实施例中,监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新。本发明实施例通过监测容器内存数据,进而根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值及扩容阈值的关系,控制容器内存进行更新。在控制容器内存进行更新过程中同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够在无需重建容器的情况下提供持续服务;另外本发明实施例提供的容器内存调整方法不受限于容器性质,无状态应用和有状态应用均适用,提高了容器内存调整的普适性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例提供的容器内存调整方法的实现流程图;
图2为本发明实施例提供的容器内存调整方法中步骤101的实现流程图;
图3为本发明实施例提供的容器内存调整方法中步骤102的实现流程图;
图4为本发明实施例提供的容器内存调整方法中步骤102的实现流程图;
图5为本发明实施例提供的容器内存调整方法的另一实现流程图;
图6为本发明实施例提供的容器内存调整装置的功能模块图;
图7为本发明实施例提供的容器内存调整装置中内存监测模块601的结构框图;
图8为本发明实施例提供的容器内存调整装置中内存更新模块602的结构框图;
图9为本发明实施例提供的容器内存调整装置中内存更新模块602的结构框图;
图10为本发明实施例提供的容器内存调整装置的另一功能模块图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
图1示出了本发明实施例提供的容器内存调整的实现流程,为便于描述,仅示出了与本发明实施例相关的部分,详述如下:
如图1所示,容器内存调整方法,其包括:
步骤101,监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;
步骤102,根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
在进行容器内存调整时监测容器内存数据。其中,监测的容器内存数据主要包括容器内存使用量及容器内存分配量。在监测获取容器内存数据后确定容器内存使用量与容器内存分配量的比值,以确定容器内存使用情况。进而将容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系进行比较,以基于容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系控制容器内存进行更新。
其中,缩容阈值或扩容阈值为预先配置的百分比值,本领域技术人员可以理解的是,可以根据实际情况和具体需求预先配置缩容阈值或扩容阈值。例如,预先配置的缩容阈值及扩容阈值分别为10%及90%,或预先配置的缩容阈值及扩容阈值分别为20%及80%,本领域技术人员可以理解的是,还可以预先配置缩容阈值及扩容阈值分别为除上述10%及90%,或20%及80%之外的其它数值,例如预先配置的缩容阈值及扩容阈值分别为15%及85%等等,本发明实施例对此不作特别的限制。
在本发明的一实施例中,为提高缩容阈值或扩容阈值配置的灵活性,容器内存调整方法还包括:
根据接收到的配置指令配置缩容阈值或扩容阈值。
在配置缩容阈值或扩容阈值时,可以基于接收到的配置指令配置缩容阈值或扩容阈值。另外,还可以基于接收到的配置修改指令对配置好的缩容阈值或扩容阈值进行修改,以提高缩容阈值或扩容阈值配置的灵活性。
内存更新主要涉及docker层面和kubernetes层面这两个层面的更新。其中,docker层面限制应用容器在进程资源控制机制cgroup的内存子系统中的内存使用量;kubernetes层面限制应用容器所在Pod的内存资源。鉴于在更新容器内存的过程中,若应用容器引擎docker中容器字段的哈希值与Pod在存储状态数据库etcd中容器字段的哈希值不一致时,会导致kubernetes层面的内存更新所依赖的组件kubelet重建容器,造成服务中断。只有同时更新两方面的内存配置,才能保证应用容器在不重建的情况下完成在线内存更新。
故为保障不发生重建容器及保重服务不中断,此时在控制容器内存进行更新过程中,更新容器在进程资源控制机制cgroup的内存子系统中的内存配置与更新Pod在存储状态数据库中的内存配置需要同步进行,即同时更新容器在进程资源控制机制cgroup的内存子系统中的内存配置与更新Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
在本发明实施例中,监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新。本发明实施例通过监测容器内存数据,进而根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值及扩容阈值的关系,控制容器内存进行更新。在控制容器内存进行更新过程中同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够在无需重建容器的情况下提供持续服务;另外本发明实施例提供的容器内存调整方法不受限于容器性质,无状态应用和有状态应用均适用,提高了容器内存调整的普适性。
图2示出了本发明实施例提供的容器内存调整方法中步骤101的实现流程,为便于描述,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了提高容器内存数据监测的稳定性,如图2所示,步骤101,监测容器内存数据包括:
利用随kubelet部署于应用所在节点的cAdvisor监测容器内存数据。
容器内存监测采用容器监控领域的主流技术方案——cAdvisor。在kubernetes集群中,cAdvisor已集成在内存更新所依赖的kubelet组件里,并作为默认启动项。cAdvisor随kubelet部署在应用所在节点,监控节点上所有容器的内存使用情况,并提供http接口,供自动扩缩容控制查询,以获取容器当前内存使用量。
在本发明实施中,利用随kubelet部署于应用所在节点的cAdvisor监测容器内存数据,能够提高容器内存数据监测的稳定性。
图3示出了本发明实施例提供的容器内存调整方法中步骤102的实现流程,为便于描述,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了提高容器内存调整的准确性,如图3所示,步骤102,根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新,包括:
步骤301,在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容;
步骤302,在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容。
在控制容器内存进行更新时,若容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值,说明容器内存使用量相较于容器内存分配量较小,容器内存分配量并没有完全利用起来,存在多余的容器内存分配量,此时可基于监测到的容器内存数据控制容器内存进行缩容,以提高容器内存调整的准确性。例如,将缩减容器内存分配量至原来容器内存分配量的50%或者80%等目标分配量。
在控制容器内存进行更新时,若容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值,说明容器内存使用量相较于容器内存分配量较大,容器内存分配量可能并不能满足需求,此时可基于监测到的容器内存数据控制容器内存进行扩容,以提高容器内存调整的准确性。例如,将缩减容器内存分配量至原来容器内存分配量的150%或者120%等目标分配量。
在本发明实施例中,在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容,在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容,能够提高容器内存调整的准确性。
在本发明的一实施例中,为了进一步提高容器内存调整的准确性,步骤301,在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容,包括:
在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行缩容。
其中,在确定容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值之后,在基于监测到的容器内存数据控制容器内存进行缩容之前,为了进一步提高容器内存调整的准确性,还需要进一步监测是否满足内存更新条件。若容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值,且同时满足内存更新条件,此时根据监测到的容器内存数据控制容器内存进行缩容,能够进一步提高容器内存调整的准确性。
在本发明的一实施例中,为了进一步提高容器内存调整的准确性,步骤302,在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容,包括:
在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行扩容。
其中,在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值之后,在基于监测到的容器内存数据控制容器内存进行扩容之前,为了进一步提高容器内存调整的准确性,还需要进一步监测是否满足内存更新条件。若容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值,且同时满足内存更新条件,此时基于监测到的容器内存数据控制容器内存进行扩容,能够进一步提高容器内存调整的准确性。
在本发明的一实施例中,为了提高内存更新的准确性,满足内存更新条件包括:
Pod状态正常,内存更新所依赖的组件处于工作状态及Pod所在节点可用内存充足。
其中,内存更新所依赖的组件主要包括应用容器引擎docker及kubelet。若Pod状态正常,内存更新所依赖的组件处于工作状态及Pod所在节点可用内存充足均满足,说明此时满足内存更新条件。若Pod状态不正常,或内存更新所依赖的组件未处于工作状态,或Pod所在节点可用内存不充足,说明不满足内存更新条件。
图4示出了本发明实施例提供的容器内存调整方法中步骤102的实现流程,为便于描述,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了保证服务不中断,提高服务持续性,如图4所示,步骤102,根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新,包括:
步骤401,根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系,确定容器内存更新指令;
步骤402,执行容器内存更新指令以更新容器在进程资源控制机制的内存子系统中的内存配置;
步骤403,暂停内存更新所依赖组件的进程;
步骤404,更新Pod在存储状态数据库中的内存配置,确定Pod在存储状态数据库中容器字段的哈希值;
步骤405,更新应用容器引擎中容器字段的哈希值,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致;
步骤406,恢复内存更新所依赖组件的进程。
在控制容器内存进行更新过程中,将容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系进行比较,在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,确定容器内存更新指令为容器内存缩容指令;在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,确定容器内存更新指令为容器内存扩容指令。
进而,基于容器内存更新指令docker update(容器内存缩容指令或容器内存扩容指令),更新容器在进程资源控制机制的内存子系统中的内存配置,暂停内存更新所依赖组件的进程docker及kubelet。进一步的,更新Pod在kubernetes中存储状态数据库etcd中的内存配置,以确定Pod在存储状态数据库etcd中容器字段的哈希值(hash值),然后更新应用容器引擎docker中容器字段的哈希值(hash值),以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,最后恢复内存更新所依赖组件的进程docker及kubelet。
其中,暂停内存更新所依赖组件docker和kubelet进程,是防止docker层面和kubernetes层面双方对容器字段hash值的校验,因为当两边的hash值不同时,kubernetes层面的kubelet会重建容器造成服务中断。
在本发明实施例中,根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系,确定容器内存更新指令,执行容器内存更新指令以更新容器在进程资源控制机制的内存子系统中的内存配置,暂停内存更新所依赖组件的进程,更新Pod在存储状态数据库中的内存配置,确定Pod在存储状态数据库中容器字段的哈希值,更新应用容器引擎中容器字段的哈希值,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,恢复内存更新所依赖组件的进程,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够保证服务不中断,提高服务持续性。
图5示出了本发明实施例提供的容器内存调整方法的另一实现流程,为便于描述,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了确定容器内存更新状态,如图5所示,在上述方法步骤的基础上,容器内存调整方法还包括:
步骤501,检测容器内存是否更新至目标内存值;及
步骤502,检测容器是否重启;及
步骤503,检测内存更新所依赖组件是否恢复工作状态。
在容器内存更新后,可及时检测容器内存是否更新至目标内存值,检测容器是否重启,以及检测内存更新所依赖组件是否恢复工作状态,以确定容器内存是否更新成功。在容器内存更新至目标内存值,容器已重启,以及内存更新所依赖组件恢复至工作状态时,说明容器内存已更新成功;在容器内存未更新至目标内存值,或容器未重启,或内存更新所依赖组件未恢复至工作状态时,说明容器内存未更新成功。
在本发明实施例中,检测容器内存是否更新至目标内存值,检测容器是否重启,检测内存更新所依赖组件是否恢复工作状态,能够确定容器内存更新状态,进一步提高容器内存更新的准确性。
本发明实施例还提供一种容器内存调整装置,如下面的实施例所述。由于这些装置解决问题的原理与容器内存调整方法相似,因此这些装置的实施可以参见方法的实施,重复之处不再赘述。
图6示出了本发明实施例提供的容器内存调整装置的功能模块,为便于说明,仅示出了与本发明实施例相关的部分,详述如下:
参考图6,所述容器内存调整装置所包含的各个模块用于执行图1对应实施例中的各个步骤,具体请参阅图1以及图1对应实施例中的相关描述,此处不再赘述。本发明实施例中,所述容器内存调整装置包括内存监测模块601及内存更新模块602。
内存监测模块601,用于监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量。
内存更新模块602,用于根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
在本发明实施例中,内存监测模块601监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;内存更新模块602根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新。本发明实施例内存监测模块601通过监测容器内存数据,进而内存更新模块602根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值及扩容阈值的关系,控制容器内存进行更新。内存更新模块602在控制容器内存进行更新过程中同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够在无需重建容器的情况下提供持续服务;另外本发明实施例提供的容器内存调整方法不受限于容器性质,无状态应用和有状态应用均适用,提高了容器内存调整的普适性。
图7示出了本发明实施例提供的容器内存调整装置中内存监测模块601的结构示意,为便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了提高容器内存数据监测的稳定性,参考图7,所述内存监测模块601所包含的各个单元用于执行图2对应实施例中的各个步骤,具体请参阅图2以及图2对应实施例中的相关描述,此处不再赘述。本发明实施例中,所述内存监测模块601包括存监测单元701。
内存监测单元701,用于利用随kubelet部署于应用所在节点的cAdvisor监测容器内存数据。
在本发明实施例中,内存监测单元701利用随kubelet部署于应用所在节点的cAdvisor监测容器内存数据,能够提高容器内存数据监测的稳定性。
图8示出了本发明实施例提供的容器内存调整装置中内存更新模块602的结构示意,为便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了提高容器内存调整的准确性,参考图8,所述内存更新模块602所包含的各个单元用于执行图3对应实施例中的各个步骤,具体请参阅图3以及图3对应实施例中的相关描述,此处不再赘述。本发明实施例中,所述内存更新模块602包括内存缩容单元801及内存扩容单元802。
内存缩容单元801,用于在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容。
内存扩容单元802,用于在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容。
在本发明实施例中,内存缩容单元801在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容,内存扩容单元802在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容,能够提高容器内存调整的准确性。
在本发明的一实施例中,为了进一步提高容器内存调整的准确性,内存缩容单元801,具体用于在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行缩容。
在本发明的一实施例中,为了进一步提高容器内存调整的准确性,内存扩容单元802,具体用于在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行扩容。
在本发明的一实施例中,为了提高内存更新的准确性,满足内存更新条件包括:
Pod状态正常,内存更新所依赖的组件处于工作状态及Pod所在节点可用内存充足。
图9示出了本发明实施例提供的容器内存调整装置中内存更新模块602的结构示意,为便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了保证服务不中断,提高服务持续性,参考图9,所述内存更新模块602所包含的各个单元用于执行图4对应实施例中的各个步骤,具体请参阅图4以及图4对应实施例中的相关描述,此处不再赘述。本发明实施例中,所述内存更新模块602包括内存更新指令确定单元901、容器内存更新单元902、进程暂停单元903、Pod内存更新单元904、容器哈希值更新单元905及进程恢复单元906。
内存更新指令确定单元901,用于根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系,确定容器内存更新指令。
容器内存更新单元902,用于执行容器内存更新指令以更新容器在进程资源控制机制的内存子系统中的内存配置。
进程暂停单元903,用于暂停内存更新所依赖组件的进程。
Pod内存更新单元904,用于更新Pod在存储状态数据库中的内存配置,确定Pod在存储状态数据库中容器字段的哈希值。
容器哈希值更新单元905,用于更新应用容器引擎中容器字段的哈希值,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
进程恢复单元906,用于恢复内存更新所依赖组件的进程。
在本发明实施例中,内存更新指令确定单元901根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系,确定容器内存更新指令,容器内存更新单元902执行容器内存更新指令以更新容器在进程资源控制机制的内存子系统中的内存配置,进程暂停单元903暂停内存更新所依赖组件的进程,Pod内存更新单元904更新Pod在存储状态数据库中的内存配置,确定Pod在存储状态数据库中容器字段的哈希值,容器哈希值更新单元905更新应用容器引擎中容器字段的哈希值,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,进程恢复单元906恢复内存更新所依赖组件的进程,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够保证服务不中断,提高服务持续性。
图10示出了本发明实施例提供的容器内存调整装置的另一功能模块,为便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在本发明的一实施例中,为了确定容器内存更新状态,参考图10,所述容器内存调整装置所包含的各个单模块用于执行图5对应实施例中的各个步骤,具体请参阅图5以及图5对应实施例中的相关描述,此处不再赘述。本发明实施例中,在上述模块结构的基础上,所述容器内存调整装置还包括内存检测模块1001、重启检测模块1002及组件状态检测模块1003。
内存检测模块1001,用于检测容器内存是否更新至目标内存值。
重启检测模块1002,用于检测容器是否重启。
组件状态检测模块1003,用于检测内存更新所依赖组件是否恢复工作状态。
在本发明实施例中,内存检测模块1001检测容器内存是否更新至目标内存值,重启检测模块1002检测容器是否重启,组件状态检测模块1003检测内存更新所依赖组件是否恢复工作状态,能够确定容器内存更新状态,进一步提高容器内存更新的准确性。
本发明提出的基于内存阈值的容器内存自动在线扩缩容方法,相对于Pod的水平自动扩缩容技术更具有一般性,不区分应用容器的性质,无状态应用有状态应用皆适用,具有普适性。相对Pod的垂直自动扩缩容技术,具备容器不重建服务不中断的优势。本发明提出的基于内存阈值的容器内存自动在线扩缩容方法在完成扩缩容的同时不中断服务,在例如数据库这样的关键应用场景,优势突出。更新容器在cgroup的内存子系统中的内存配置的方式,除了执行容器内存更新指令docker update指令方式外,还可以直接修改相应的配置文件等方式。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述容器内存调整方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述容器内存调整方法的计算机程序。
综上所述,本发明实施例中,监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新。本发明实施例通过监测容器内存数据,进而根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值及扩容阈值的关系,控制容器内存进行更新。在控制容器内存进行更新过程中同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以保证更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致,能够在无需重建容器的情况下提供持续服务;另外本发明实施例提供的容器内存调整方法不受限于容器性质,无状态应用和有状态应用均适用,提高了容器内存调整的普适性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种容器内存调整方法,其特征在于,包括:
监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;
根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
2.如权利要求1所述的容器内存调整方法,其特征在于,监测容器内存数据包括:
利用随kubelet部署于应用所在节点的cAdvisor监测容器内存数据。
3.如权利要求1所述的容器内存调整方法,其特征在于,根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新,包括:
在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容;
在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容。
4.如权利要求3所述的容器内存调整方法,其特征在于,在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值时,根据监测到的容器内存数据控制容器内存进行缩容,包括:
在容器内存使用量与容器内存分配量的比值不大于预先配置的缩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行缩容;
在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值时,根据监测到的容器内存数据控制容器内存进行扩容,包括:
在容器内存使用量与容器内存分配量的比值不小于预先配置的扩容阈值,且满足内存更新条件时,根据监测到的容器内存数据控制容器内存进行扩容。
5.如权利要求4所述的容器内存调整方法,其特征在于,满足内存更新条件包括:
Pod状态正常,内存更新所依赖的组件处于工作状态及Pod所在节点可用内存充足。
6.如权利要求1所述的容器内存调整方法,其特征在于,根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新,包括:
根据容器内存使用量与容器内存分配量的比值与预先配置的缩容阈值或预先配置的扩容阈值的大小关系,确定容器内存更新指令;
执行容器内存更新指令以更新容器在进程资源控制机制的内存子系统中的内存配置;
暂停内存更新所依赖组件的进程;
更新Pod在存储状态数据库中的内存配置,确定Pod在存储状态数据库中容器字段的哈希值;
更新应用容器引擎中容器字段的哈希值,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致;
恢复内存更新所依赖组件的进程。
7.如权利要求1所述的容器内存调整方法,其特征在于,还包括:
检测容器内存是否更新至目标内存值;及
检测容器是否重启;及
检测内存更新所依赖组件是否恢复工作状态。
8.一种容器内存调整装置,其特征在于,包括:
内存监测模块,用于监测容器内存数据;容器内存数据包括容器内存使用量及容器内存分配量;
内存更新模块,用于根据容器内存使用量与容器内存分配量的比值,预先配置的缩容阈值及扩容阈值,控制容器内存进行更新;在控制容器内存进行更新过程中,同时更新容器在进程资源控制机制的内存子系统中的内存配置与Pod在存储状态数据库中的内存配置,以使更新后的应用容器引擎中容器字段的哈希值与Pod在存储状态数据库中容器字段的哈希值一致。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一所述容器内存调整方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7任一所述容器内存调整方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110346649.9A CN112835685A (zh) | 2021-03-31 | 2021-03-31 | 容器内存调整方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110346649.9A CN112835685A (zh) | 2021-03-31 | 2021-03-31 | 容器内存调整方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112835685A true CN112835685A (zh) | 2021-05-25 |
Family
ID=75930773
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110346649.9A Pending CN112835685A (zh) | 2021-03-31 | 2021-03-31 | 容器内存调整方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835685A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568706A (zh) * | 2021-07-27 | 2021-10-29 | 北京百度网讯科技有限公司 | 针对业务的容器调整方法、装置、电子设备和存储介质 |
CN114153518A (zh) * | 2021-10-25 | 2022-03-08 | 国网江苏省电力有限公司信息通信分公司 | 一种云原生MySQL集群自主扩容缩容的方法 |
CN115617517A (zh) * | 2022-10-12 | 2023-01-17 | 中航信移动科技有限公司 | 一种用于应用pod控制的数据处理系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897558A (zh) * | 2020-07-23 | 2020-11-06 | 北京三快在线科技有限公司 | 容器集群管理系统Kubernetes升级方法和装置 |
CN112181649A (zh) * | 2020-09-22 | 2021-01-05 | 广州品唯软件有限公司 | 一种容器资源调整方法、装置、计算机设备及存储介质 |
-
2021
- 2021-03-31 CN CN202110346649.9A patent/CN112835685A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897558A (zh) * | 2020-07-23 | 2020-11-06 | 北京三快在线科技有限公司 | 容器集群管理系统Kubernetes升级方法和装置 |
CN112181649A (zh) * | 2020-09-22 | 2021-01-05 | 广州品唯软件有限公司 | 一种容器资源调整方法、装置、计算机设备及存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568706A (zh) * | 2021-07-27 | 2021-10-29 | 北京百度网讯科技有限公司 | 针对业务的容器调整方法、装置、电子设备和存储介质 |
CN113568706B (zh) * | 2021-07-27 | 2024-01-19 | 北京百度网讯科技有限公司 | 针对业务的容器调整方法、装置、电子设备和存储介质 |
CN114153518A (zh) * | 2021-10-25 | 2022-03-08 | 国网江苏省电力有限公司信息通信分公司 | 一种云原生MySQL集群自主扩容缩容的方法 |
CN115617517A (zh) * | 2022-10-12 | 2023-01-17 | 中航信移动科技有限公司 | 一种用于应用pod控制的数据处理系统 |
CN115617517B (zh) * | 2022-10-12 | 2023-11-10 | 中航信移动科技有限公司 | 一种用于应用pod控制的数据处理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112835685A (zh) | 容器内存调整方法及装置 | |
CN108132949B (zh) | 数据库集群中数据迁移的方法及装置 | |
AU2011299337B2 (en) | Controlled automatic healing of data-center services | |
TW202207030A (zh) | 深度學習模型的分布式訓練方法以及裝置 | |
CN107480014B (zh) | 一种高可用设备切换方法及装置 | |
CN103580915B (zh) | 集群系统中确定主控节点的方法及装置 | |
WO2003102772A2 (en) | Business continuation policy for server consolidation environment | |
CN110489494B (zh) | 分布式数据库在线扩容方法及装置 | |
US9600487B1 (en) | Self healing and restartable multi-steam data backup | |
CN109582459A (zh) | 应用的托管进程进行迁移的方法及装置 | |
CN111538585B (zh) | 一种基于node.js的服务器进程调度方法、系统和装置 | |
CN103902401A (zh) | 基于监控的虚拟机容错方法及装置 | |
CN104753992A (zh) | 一种数据存储、虚拟平台故障恢复的方法、设备和系统 | |
CN111290767B (zh) | 具有业务快速恢复功能的容器组更新方法及系统 | |
WO2024041363A1 (zh) | 无服务器架构分布式容错系统、方法、装置、设备及介质 | |
CN114363356B (zh) | 数据同步方法、系统、装置、计算机设备和存储介质 | |
CN114385366A (zh) | 容器云平台的容器组弹性扩容方法、系统、介质和设备 | |
CN116069468A (zh) | 检查点调整的方法和装置 | |
CN115686368A (zh) | 区块链网络的节点的存储扩容的方法、系统、装置和介质 | |
CN112181597B (zh) | 容器资源使用限制动态更新方法 | |
WO2017124829A1 (zh) | 恢复虚拟机的方法和装置 | |
US20210173698A1 (en) | Hosting virtual machines on a secondary storage system | |
CN114443356A (zh) | 一种容器集群的处理方法及系统 | |
CN109510867B (zh) | 数据请求处理的方法、装置、存储介质及电子设备 | |
CN109947593B (zh) | 数据容灾方法、系统、策略仲裁装置和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210525 |