基于Kubernetes 的云管理平台的解决方案

作者: 庄莉莉

基于Kubernetes 的云管理平台的解决方案0

摘要:为提高运维自动化水平,降低系统故障率,该文采用 GitOps理念提出了一种基于 Kubernetes 的云管理平台解决方案。经测试验证,该方案在保证平台运行稳定的同时能有效降低系统故障率并提升运营人员的工作效率,在实际中具有可推广性。

关键词: 云管理平台;Kubernetes;GitOps;自动化运维;故障自愈

中图分类号:TP391 文献标识码:A

文章编号:1009-3044(2025)04-0120-03 开放科学(资源服务) 标识码(OSID) :

0 引言

“互联网+”行动计划的提出,推动了移动互联网、云计算、大数据、物联网等新一代信息技术与传统行业的深度融合。相较硬件设施的升级改造,软件系统的更新迭代更为便捷,已成为企业数字化转型的突破口[1]。容器技术作为云计算领域的新兴力量,可以将应用及其运行环境打包成镜像,实现应用的快速部署和迁移。Kubernetes作为主流的容器编排工具,能够有效管理大规模容器集群,实现应用的自动化部署、扩缩容、故障恢复等功能。因此,本文选择Kubernetes 来构建云管理平台解决方案。

1 主流云管理平台现状

云计算是一种按需提供计算资源的服务模式,用户无须关注底层基础设施,即可快速获取所需的计算能力、存储空间和信息服务。近年来,以亚马逊、谷歌、微软、阿里云、华为云为代表的云服务提供商迅速崛起,推动了云计算的快速发展[2-3]。为了满足合规性要求、处理机密文档、保护知识产权、个人身份信息、财务数据以及其他敏感数据,许多公司选择采用开源云平台搭建私有云[4]。

开源云平台为用户提供了构建私有云的另一种选择,例如OpenStack、CloudStack等。Wen等人[5]通过对比OpenStack和OpenNebula,发现OpenStack在技术架构、功能完备性等方面更具优势。Xu 等人[6]基于VMware云平台搭建了实验环境,验证了云计算平台在数据处理效率和可扩展性方面的优势。

然而,传统的云平台在应用部署方面仍然存在效率较低的问题。容器技术的出现为云计算注入了新的活力,其轻量级、快速部署、环境一致性等特点可以有效解决传统云平台面临的挑战。作为主流的容器编排工具,Kubernetes凭借其强大的功能和活跃的社区,已成为容器编排领域的事实标准[7-9]。因此,本文选择了Kubernetes来构建云管理平台的解决方案。

2 基于Kubernetes 的云管理平台方案

2.1 平台总体方案

本平台采用裸金属架构,直接在物理服务器上部署Kubernetes集群,以减少虚拟化带来的性能损耗。平台整体架构采用分层设计,主要包括基础设施层、容器编排层、应用服务层和运维管理层,如图1所示。

可以看到,Kubernetes对IaaS资源层进行了抽象,对应用而言,整个IaaS资源层相当于一台逻辑上的“超级计算机”。开发好的应用程序镜像被存入镜像仓库中,而用于部署应用程序的YAML文件作为IaC(Infrastructure as Code,基础设施即代码) 中的代码存储在版本管理系统中。运维人员只需将新的部署YAML文件更新到版本管理系统中,应用版本变更管理器即可自动拉取相关YAML文件并执行版本变更。这个版本更新可以利用Kubernetes的Deployment资源的滚动升级功能进行,从而实现应用升级变更而不中断业务服务。

2.2 平台功能设计

本平台聚焦于应用程序的自动化运维方面,例如GitOps、水平扩缩容、故障自愈等功能的支持。

2.2.1 GitOps 支持

本平台的版本管理系统选择使用GitLab进行搭建,符合GitOps核心思想。即将应用系统的声明性基础架构和应用程序存放在Git版本库中,当声明性的代码(YAML文件) 提交并通过审核后,应用版本变更管理器会自动拉取该代码文件并在Kubernetes中应用。这样,应用的升级、回退等运维操作均由应用版本变更管理器自动执行,无须运维人员手动执行任何命令。运维人员只需在测试环境将最新版本的基础设施声明性YAML文件测试通过后,提交发布到生产分支的请求。一旦请求被通过,所有变更将自动完成,无须人工介入。

2.2.2 水平扩缩容

要实现水平扩缩容的目标,前提是应用程序需要做到无状态。通常我们会将数据库、缓存、文件系统等从应用程序中分离,使用相关中间件提供的数据存储服务,对应用进行无状态改造。当应用满足无状态的前提时,可以通过改变Kubernetes中Deployment资源提供的副本数量,对应用程序进行在线的水平扩缩容。这个水平扩缩容可以通过修改资源声明性YAML文件中的副本数进行,也可以通过Kubernetes 中的HPA(Horizontal Pod Autoscaler,Pod 水平自动伸缩) 进行自动扩缩容配置。HPA可以基于CPU利用率、内存利用率以及其他程序提供的度量指标(例如流量) 进行自动扩缩容。

2.2.3 故障自愈

当应用程序所在的Pod出现故障后,Kubernetes 会检测到该Deployment对应的健康Pod数量与声明的不一致,Kubernetes将会自动启动新的Pod以补齐健康Pod的数量,最终达到声明性YAML文件中声明的副本数。整个过程是自动的,无须人工介入。

2.3 平台高可用设计

2.3.1 Kubernetes 高可用部署

为了避免Kubernetes集群单点故障,本平台采用三副本模式部署ETCD和Master节点,架构如图2所示。图2中省略了非管理节点,在实际使用中,为了节约资源,可以将非管理节点与管理节点混部,简化为如图2所示。Kubernetes集群的稳定性得到了大幅提升,只有当全部Master管理节点同时出现故障时,本云平台的运行才会受到影响;单个或多个节点宕机的情况下,并不会影响集群的正常运行。

2.3.2 数据高可用部署

平台对数据库、文件系统、缓存等数据存放中间件均采用高可用模式部署,以确保平台数据的可靠性。首先,数据库采用集群模式部署,以防止因单点故障导致数据库失效。其次,对于数据文件的存储,采用分布式存储系统CephFS来提供安全、高效的网络文件系统服务。最后,缓存采用Redis集群模式部署,以防止因单点故障导致缓存失效。

2.3.3 应用的高可用部署

首先,应用程序必须实现无状态,这样应用的高可用性就可以通过部署多个服务副本来实现。Ku⁃bernetes通过设置健康检查探针和指定副本数量的方式,来提高部署应用的运行可靠性。当发生节点故障时,Kubernetes 将自动启动新的Pod,以保证Deploy⁃ment资源中定义的健康副本数量。

3 平台运营流程

本平台的运营流程遵循GitOps理念。在整个运营流程中,采用IaC(基础设施即代码) 方式,将基础设施用声明性的YAML文件表示,并采用自动的应用版本更新管理器来自动化拉取和应用YAML文件。在整个应用程序的部署生命周期中,只有对YAML文件代码的提交和审核是由人工执行,其余动作均为自动化完成。这大大减轻了运营人员的工作量,提高了工作效率,使运营人员能够将精力集中在程序新版本的验证和IaC对应的YAML代码文件的编写、测试上。具体步骤如下:

1) 将Kubernetes 管理的IaaS 资源通过命名空间(Namespace) 进行资源分配,分为生产环境命名空间和验证环境命名空间。这样,生产环境和验证环境的资源相互隔离,互不影响。

2) 运营人员将基础设施的描述性YAML代码文件存储在GitLab中,在编写、测试阶段进行拉取或提交。GitLab管理员负责审核代码提交请求,审核通过的提交代码会更新到GitLab的主分支。

3) 应用版本变更管理器定期从GitLab的主分支中拉取基础设施的描述性YAML 代码文件,并进行应用。

4) 开发人员将测试完毕的生产镜像发布到镜像仓库中,并通知运营人员更新应用基础设施即代码对应的YAML文件。

5) 运营人员先将基础设施即代码对应的YAML 文件提交到验证环境分支进行验证。验证通过后,再提交到生产环境分支。

整个运营迭代流程示意图如图3所示。

4 测试与验证

4.1 测试环境

为了验证基于Kubernetes 的云管理平台解决方案,本文搭建了云平台测试所需的测试环境。测试环境服务器配置如表1所示。

在测试环境服务器上搭建了Kubernetes测试环境相关资源,具体如表2所示。

为验证方案的可行性,本文搭建了测试环境,并进行了测试。

4.2 测试效果

1) 实现应用的GitOps自动化部署目标。与以往的人工应用部署模式不同,本方案采用先进的GitOps 模式。运营人员只须将最新的基础设施声明性YAML代码文件提交到GitLab代码仓库,待GitLab管理员审核通过后,提交的代码将被应用版本更新管理器自动拉取并应用。整个过程中,只有GitLab管理员审核运营人员提交的代码这一步骤需要人工介入,其余均为自动化过程,大大降低了人工出错概率。

2) 服务故障率显著下降。测试结果表明,本方案通过Kubernetes高可用部署、数据高可用部署和应用高可用部署,实现了平台的故障自愈能力,有效降低了服务故障率,提高了应用系统整体稳定性。

3) 运营人员工作效率大幅提升。通过GitOps模式,运营人员摆脱了原先的人工运维场景。例如,以往应用发布通常需要在业务闲时进行人工发布,而采用本方案后,运营人员可以根据需求设置应用程序版本更新器的更新时间,并在工作时间将测试好的基础设施描述性YAML代码文件更新到GitLab代码仓库,并确认GitLab管理员已审核通过。在设置好的时间点,应用程序版本更新器将自动拉取GitLab上的基础设施描述性YAML文件并进行应用。这使得运营人员从繁杂的人工操作中解脱出来,可以集中精力进行基础设施描述性YAML文件的编写及测试工作,提升了运营人员的工作效率。

5 结束语

本文提出了一种基于Kubernetes的云管理平台解决方案,并对其设计方案和运营流程进行了详细说明。测试结果表明,该方案能够有效降低服务故障率,提高运维效率。该方案可为企业提供高效、可靠、易用的云管理平台,促进企业数字化转型。未来,我们将进一步研究平台的自动水平伸缩功能,以更好地应对突发流量压力。

参考文献:

[1] 李葆文“. 互联网+” 设备智能管理新时代:对话学府咨询(国际)集团有限公司董事长李葆文[J].中国设备工程,2015(4):20-23.

[2] ARMBRUST M, FOX A, GRIFFITH R, et al. Above theClouds: A Berkeley View of Cloud Computing [R]. Berkeley,CA, USA: EECS Department, University of California at Berke⁃ley, 2009.

[3] 光贤.2020私有云平台创新排行榜[J].互联网周刊,2020(14):64-65.

[4] 刘国成,吴丹.基于OpenStack的中小企业服务云平台架构研究[J].吉林大学学报(信息科学版),2020,38(6):709-713.

[5] WEN X L,GU G Q,LI Q C,et al.Comparison of open-sourcecloud management platforms:OpenStack and OpenNebula[C]//2012 9th International Conference on Fuzzy Systems andKnowledge Discovery. Chongqing, China. IEEE, 2012: 2457-2461.

[6] XU X,ZOU F M,ZHU Q,et al.Comparison and test for severaltypical cloud computing platforms[M]//Intelligent Data Analy⁃sis and Applications.Cham:Springer International Publishing,2015:427-435.

[7] 王伟军.基于Kubernetes的容器云平台建设[J].电脑知识与技术,2019,15(36):47-48.

[8] 单朋荣,杨美红,赵志刚,等.基于Kubernetes云平台的弹性伸缩方案设计与实现[J].计算机工程,2021,47(1):312-320.

[9] 张有帅,佘葭,尹雪龙.基于Kubernetes的容器云平台研究与设计[J].电子设计工程,2021,29(22):180-183,188.

【通联编辑:代影】

经典小说推荐

杂志订阅