APP下载

IO密集型生产环境下容器集群弹性伸缩研究

2023-12-07

电脑知识与技术 2023年30期
关键词:资源分配实例内存

樊 雷

(连云港师范高等专科学校 数学与信息工程学院,江苏 连云港 222006)

0 引言

近年来云计算和虚拟化技术得到快速发展,互联网IT基础设施呈现快速更新迭代、业务场景不断创新的趋势。随着IT基础设施运维成本逐步攀升,如何在生产环境下保持高可用、可扩展、高性能等方面提高效率、降低运维成本是云计算和虚拟化应用面临的新课题。

容器技术在资源占用、部署效率、快速交付等方面相对于虚拟机具备显著的优势,在提高软件交付的效率、提升应用系统的弹性和运维效率、缩短业务上线的时间上都发挥着重要的作用。容器技术的核心是利用容器实现应用程序的封装,从而实现了应用程序的便携性和可移植性。在容器集群中,容器之间可以共享主机的操作系统内核,从而节省了运维成本,提升了应用的系统利用率。因为容器技术对硬件资源的占用较轻,所以在容器集群中可以运行更多的应用实例,进一步提高系统的弹性和可扩展性,满足业务高可用和弹性需求。

目前,容器技术主要标准是Docker,同时Kubernetes是目前最流行的容器集群管理工具,这使得容器技术得到了更广泛的应用。但是在生产环境中,容器部署的复杂性、应用的性能、容器的稳定性等都是需要考虑的。在容器的弹性伸缩管理中,如何调整容器资源限制、调整集群的节点数量、配置负载均衡等方面会影响到容器集群的弹性伸缩能力和性能表现,因此需要对应用的负载特性进行分析和调整,以更好地发挥容器技术的优势,实现更高的系统性能和更好的用户体验。

1 容器集群的弹性伸缩研究

容器技术是一种轻量级虚拟化技术,相比于传统的虚拟机技术,容器技术对硬件资源的需求相对较少,优势表现在以下几个方面:

1) 容器技术支持快速部署和快速交付。容器技术有利于进行多语言框架的封装部署,通过镜像的方式进行快速部署和快速交付。

2) 容器技术支持隔离控制和资源限制。容器技术支持CPU、内存、IO等资源限制,可以防止单个应用程序独占资源,造成系统崩溃。

3) 容器技术支持高可用和容错。容器技术可以进行手动或自动的容器实例的监控和重启,保障应用程序的持续可用性。

4) 容器技术支持弹性伸缩。容器技术支持通过调整容器的数量、资源限制的方法进行动态扩容和缩减,根据负载情况快速适应。

容器集群是由多个容器组成的一个集群,每个容器运行一个应用程序。容器集群的弹性伸缩问题是指在应用程序负载增加时,自动地增加计算资源,以保证应用程序的正常运行。容器集群的弹性伸缩需要考虑多个因素,例如负载预测、资源分配和容器调度等。

1.1 负载预测

负载预测是容器集群弹性伸缩的一个关键问题。负载预测是指预测未来一段时间内应用程序的负载情况,以便根据负载情况进行资源分配和容器伸缩。负载预测需要考虑多个因素,例如历史负载、节假日、活动、天气等。

负载预测的方法通常有以下几种:

1) 基于时间序列的方法:将负载序列看作时间序列数据,预测未来一段时间内的负载情况。这种方法需要考虑数据的周期性和趋势性。

2) 基于机器学习的方法:利用机器学习算法对历史负载数据进行分析和学习,预测未来一段时间内的负载情况。这种方法需要考虑特征选择、训练数据和模型选择等问题。

3) 基于统计方法的方法:利用统计学理论对历史负载数据进行分析和建模,预测未来一段时间内的负载情况。这种方法需要考虑数据的分布、假设检验和模型选择等问题。

1.2 资源分配

资源分配是容器集群弹性伸缩的另一个关键问题。资源分配是指根据负载情况,自动地分配计算资源,以保证应用程序的正常运行。资源分配需要考虑容器的数量、容器所在的物理机和虚拟机的资源情况,以及容器之间的资源隔离等因素。

常见的资源分配方法包括:

1) 基于容器组的方法:将多个容器编组,按照组的负载情况进行资源分配。

2) 基于服务的方法:将多个容器编组服务,按照服务的负载情况进行资源分配。

3) 基于节点的方法:将多个容器分散在不同的节点上,按照节点的负载情况进行资源分配。

在弹性伸缩中选择合适的容器编排工具,监控容器集群负载情况,定义合适的策略,选择合适的资源分配调度算法,充分考虑容器的隔离和相互影响,以及系统负载均衡都是其中的关键因素。

1.3 容器调度

容器调度是容器集群弹性伸缩的另一个关键问题。容器调度是指找到合适的节点,将容器调度到该节点上。容器调度需要考虑多个因素,例如节点的剩余资源、网络延迟等。

目前比较流行的容器调度工具包括Kubernetes、Docker Swarm和Mesos等。

容器集群的管理和调度方面,目前比较成熟的是Kubernetes。Kubernetes 具备强大的功能特性。针对Kubernetes 的弹性伸缩特性,已经有一些研究取得了关于性能优化、负载均衡策略、弹性伸缩策略等方面的成果。

在性能优化方面,文献[1] 提出一种融合了基于Web 请求量的请求预测模型和基于排队论的Web 应用性能分析的Kubernetes 容器弹性伸缩方法[1]。在负载均衡策略方面,文献[2]通过对Kubernetes 的架构进行分析后,设计一种基于负载预测的弹性伸缩方案,将所提出的预测模型DAPSO-GRU-LSTM 应用到弹性伸缩方案中,在Kubernetes集群中设计监控模块、负载预测模块以及弹性伸缩模块,并对各个模块进行实现[2]。文献[3] 提出了基于深度学习Transformer 模型的面向Kubernetes 容器云的微服务负载预测模型TSBT[3]。

2 实验环境与数据分析

本文的实验是基于Kubernetes集群平台的容器部署环境,使用Docker 作为容器运行引擎,使用Prometheus 等工具进行数据统计和分析。在进行实验前,需要准备如下的环境和工具:

1) 硬件环境:服务器CPU Intel Xeon 2.4GHz 32核64线程,内存128GB,硬盘8TB。

2) 软件环境:CentOS 7.x,Kubernetes 集群环境,Docker 容器运行引擎,Prometheus 数据库和监控操作工具。

3) 实验工具:IOPerf,Prometheus,Grafana。

在实验中,针对不同的容器资源限制、集群节点数量、负载均衡等因素实施了不同的负载均衡策略,对容器集群进行了性能测试,对实验结果进行了相关数据分析。

2.1 容器资源限制

容器资源限制主要针对CPU、内存、IO 等方面进行限制,在实验中针对CPU和内存资源进行了限制设置,并对容器实例数量、CPU 资源限制、内存资源限制、负载压力等指标进行了测试和分析。

图1展示了Kubernetes容器集群中不同容器实例数量在20分钟内的递增情况。随着容器实例数量的快速增加,CPU 和内存资源占用也会随之增加,并且在容器实例数量较大时呈现出指数级增长。因此,在容器资源限制方面需要根据实际情况进行调整,避免因为资源限制不合理而导致CPU和内存负载过重,从而影响容器集群的稳定性。

图1 Kubernetes容器集群中Pod递增情况

2.2 HPA和CA实现弹性伸缩

负载均衡在容器集群弹性伸缩管理中发挥着重要的作用。在实验中,通过设置负载均衡策略来实现容器实例的动态负载均衡。在Kubernetes 中,自动弹性伸缩主要有三种方式,Pod 水平自动伸缩(HPA ,Horizontal Pod Autoscaler) 、Pod 垂直自动伸缩(VPA,Vertical Pod Autoscaler) 和集群自动伸缩(CA,Cluster Autoscaler) 。HPA用于自动扩展和缩减 Pod 数量,可以根据 Pod 的负载和资源利用率的情况,自动地增加或减少 Pod 的数量,解决的是业务负载波动较大的问题。VPA负责调整单个Pod 的资源限额 request、limit 实现,解决的是资源配额评估不准的问题,依赖历史负载指标,自动计算或调整资源配额。CA 用于自动扩展和缩减节点上的容器数量。它可以根据节点的资源利用率和可用性,自动地增加或减少节点的数量。

HPA 会计算同一组内所有Pod 的平均CPU 使用率,并与预设的阈值进行比较,如果低于阈值,则减少实例的数量,如果高于阈值,则增加实例的数量。另外为了保证资源不会被用户耗尽,还需要设置实例数量的上限。由于自动伸缩进行的过程中,也会增加CPU的使用,为了减少在自动伸缩过程中的这种抖动现象,HPA 中同样地也引入了一个冷却时间,即在自动伸缩发生后的3 分钟内不再进行其他的资源伸缩[4],如图2所示。

图2 HPA和CA通过配置yml实现工作负载和节点联动弹性伸缩

HPA每隔30秒轮询一次目标Pod的负载状态,当目标Pod的负载上升且负载高于指定的静态扩容阈值之后,会根据扩容策略进行扩容生成新的Pod,当目标Pod的负载下降且负载低于指定的静态缩容阈值一段时间之后,又会根据缩容策略进行缩容回收集群中的Pod,其伸缩公式为:

其中,ER(Expect Replicas)为期待的Pod 副本数量,即通过算法计算后所得到的Pod 副本数量,cR(current Replicas)是在当前状态下检测到的Pod 的副本数量,cM (current Metric value)是当前所检测到的指标值,例如CPU 利用率、内存使用情况等,dM (desired Metric value)为扩缩容的阈值,也就是期望Pod的指标值,ceil表示了期待的Pod副本数量的值是大于或者等于该数的最近一个整数[5]。

3 实验结果分析

随着容器实例数量增加,CPU 和内存资源占用随之增加,逐渐逼近预设阈值的60%。通过HPA和CA工作流程,实施表1的负载均衡策略,对容器集群的QPS/CPU/内存/响应时间等因素限定阈值。容器资源限制设置需要根据实际情况进行调整,避免独占资源过多,影响整个容器集群的性能和可用性。增加集群节点数量,容器实例数量也可以相应地增加,从而提高容器集群的弹性和可扩展性。不合理的集群节点数量也会导致系统负载过重或资源浪费等问题。

表1 基于HPA和CA的弹性负载均衡策略

从图3 得到的实验结果分析可以看出,随着Pod数量的增加逐渐逼近和超过CPU 预设的60%占比阈值,HPA+CA的弹性伸缩策略被激活,先进行了扩容,后随着策略调整后又进行了缩容,有效实现了容器集群的负载均衡。进一步可以实现基于时间序列的负载预测和相应的策略实施。

图3 容器集群弹性伸缩测试结果

在应对容器集群弹性伸缩管理的过程中,需要综合考虑容器资源限制、集群节点数量、伸缩类型、触发阈值等因素,因为这些因素之间是相互影响和重要相互作用的。在实际应用中,需要根据实际情况进行选择和调整不同的算法,避免出现不合理的设置和影响整个容器集群的性能和可用性。

4 结论与展望

通过对容器资源限制、集群节点数量、负载均衡等方面的测试和数据分析,得出了以下结论:

1) 使用HPA+CA可以很容易做到弹性伸缩,且节点和Pod 的伸缩过程可以非常方便地观察到,使用HPA+CA做弹性伸缩能够满足大部分业务场景需求。

2) 容器资源限制需要根据实际情况进行调整,防止单个应用独占资源,避免因为资源限制不合理而导致CPU 和内存负载过重,从而影响容器集群的稳定性。

3) 负载均衡策略可以更好地实现容器实例之间的负载均衡,提高容器集群的弹性能力。在实际应用中,需要根据实际情况选择合适的负载均衡算法和方法,在性能优化方面不断挖掘和实践创新。

弹性伸缩技术主要划分依据有:按伸缩时间划分、按伸缩方向划分。前者可分为响应式和预测式伸缩,当前容器云平台大都采用的基于阈值的响应式弹性伸缩技术,预测式的弹性伸缩正由学术界广泛研究[6]。

未来,容器技术将会在生产环境中得到更广泛的应用。如何利用容器技术实现高可用、高性能和高效率,是企业将必须面临的挑战和机遇。

猜你喜欢

资源分配实例内存
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
新研究揭示新冠疫情对资源分配的影响 精读
“春夏秋冬”的内存
一种基于价格竞争的D2D通信资源分配算法
云环境下公平性优化的资源分配方法
完形填空Ⅱ
完形填空Ⅰ
OFDMA系统中容量最大化的资源分配算法
基于内存的地理信息访问技术