摘要:传统软件开发和运维过程中存在效率低下、扩展性差、维护复杂等问题。基于容器技术与微服务架构的DevOps平台通过集成容器化、微服务、持续集成/持续部署(CI/CD) 等关键技术,能够提升软件开发和运维的敏捷性、可靠性和可伸缩性,可以很好地解决上述问题。文中首先概述了容器化技术、微服务和DevOps的基本概念,随后详细阐述了平台的设计思路、架构组成以及关键技术实现,最后分析了平台的优势和对未来的展望。
关键词:容器化;微服务;DevOps;云原生;CI/CD
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2024)27-0052-04
0 引言
随着云计算技术的飞速发展,软件开发和运维领域正经历着深刻的变革。其中,容器化技术作为一种新兴技术,旨在充分挖掘和利用云计算的潜力,为应用程序的构建和运维提供新的思路。通过容器化技术,可以加速应用程序的迭代周期,促进高效无缝的部署流程,并赋予系统卓越的灵活扩展能力。与此同时,随着微服务架构这种新型软件设计范式的兴起,可以对庞大复杂的软件应用进行解构,拆分出一系列高内聚的微型服务,显著增强了系统的可用性、可扩展性以及后续维护的便捷性,从而推动了软件架构的现代化转型。DevOps作为一种文化与技术的结合,旨在打破开发与运维之间的壁垒,实现软件交付的高速迭代和高质量保障。而基于容器与微服务的DevOps 平台正是顺应这一趋势的产物。
1 背景与相关技术介绍
1.1 容器化技术概述
随着计算机技术的发展,计算机软件的架构也在不断演进,从最初的单体架构,到近年兴起的分布式架构,再到现在最前沿的云原生架构。云原生代表了一种创新的应用构建与运行的新范式,它深度整合并利用了云计算平台的核心资源与能力,诸如容器化技术、容器编排技术、自动化运维等,旨在充分发挥云计算的潜能与效益。云原生技术栈中核心的就是容器化技术,其中最具代表性和应用最为广泛的是Docker 和Kubernetes。
1.1.1 Docker
容器技术作为一种轻量级的操作系统层面的虚拟化技术,能够为软件应用提供一个资源独立的运行环境[1]。目前应用最为广泛的一种容器技术当属Docker。Docker这个体系涵盖了Docker容器引擎与Docker Hub注册服务器两大核心组件。Docker容器引擎赋予开发者将软件应用封装成独立镜像的能力,提供了简单高效的部署方式。而Docker Hub注册服务器则作为一个全面的镜像管理平台,允许用户轻松创建专属的镜像仓库,用于安全地存储、高效地管理及灵活地分发Docker镜像。通过合理利用Docker的这些功能,软件应用能够轻松实现跨平台运行。
1.1.2 Kubernetes
Kubernetes是一种容器编排与管理系统,专注于跨节点的集群资源优化、服务自动发现、弹性扩展等功能。它构建了一个强健的调度框架,能够智能地在集群内分配并管理容器化应用的部署,实现了从创建到运维的全自动化流程。Kubernetes的核心能力涵盖容器的智能调度、集群范围内资源的精细管理以及容器状态的实时监控与数据收集,确保系统的高效运行与稳定性。Kubernetes集群由控制节点(Master) 、计算节点(Node) 、Etcd集群组成。Master节点负责集群运行和资源管理,Node节点为容器应用提供各类资源,Etcd存储记录集群状态信息[2]。
1.2 微服务架构
微服务架构是一种新型的软件设计范式,基于此范式可以对复杂庞大的软件应用进行解构,拆分出一系列自治且独立的微型服务。每个服务均负责一项业务能力,实现了高内聚低耦合的设计原则。微服务架构能够提高系统的可扩展性、可维护性和容错能力。微服务应用设计需要合理进行服务拆分,遵循单一职责原则,避免过度拆分导致“服务爆炸”问题[3]。
1.3 DevOps 理念
DevOps 是Development 和Operations 的组合词,DevOps的要点在于打破以往传统流程中开发与运维之间的割裂状态,促进二者之间的协作,以此实现全流程的自动化,旨在通过集成先进的工具来加速软件产品的迭代周期。其中,持续集成(CI) 与持续部署(CD) 占据了举足轻重的地位。持续集成是指当将新提交的代码上传到代码仓库中时,会自动或者手动地触发一系列编译、打包、构建、测试流程,确保新旧代码的无缝集成,并快速反馈测试结果,这一过程往往频繁进行,以缩短问题发现与解决的时间。持续部署是指通过自动化部署工具将软件功能频繁地持续进行交付[4]。此外,DevOps还涵盖了自动化测试、监控与日志等关键环节,共同构建了一个高效、可靠且响应迅速的软件交付体系。
2 平台设计
2.1 设计目标
平台的设计目标主要聚焦于构建一个高效、灵活、可扩展且易于管理的DevOps平台,该平台深度融合容器化技术与微服务架构,旨在提升软件开发、测试、部署及运维的自动化水平,加速产品迭代速度,同时保障软件质量与稳定性。具体而言,设计目标包括但不限于以下几个方面:
1) 通过容器化技术的运用,实现资源的弹性伸缩与高效利用,提升资源利用率,降低运维成本,提高系统的可靠性与可用性。
2) 采用微服务架构,对复杂庞大的软件应用进行解构,拆分出一系列自治且独立的微型服务。每个服务均只负责一项业务能力,实现高内聚低耦合的设计原则,从而提高系统的可维护性与可扩展性。
3) 构建自动化的CI/CD流程,实现代码提交到生产环境的无缝集成与快速部署,减少人为错误,提高交付效率。
2.2 功能设计
2.2.1 整体流程
平台在功能层面主要基于软件开发部署流程来设计,分为两大模块,分别是开发过程和部署过程,其中:
1) 开发过程主要对应持续集成(CI) 流程。开发人员针对软件应用的具体需求进行开发,开发完成后将对应代码提交到代码仓库。代码仓库负责保存所有软件应用的代码,同时软件应用按实际需求和场景可以分为多个版本,每个版本有对应的代码分支。当某个版本的代码被开发人员提交到代码仓库后,会触发CI流水线的执行。CI流水线从代码仓库拉取对应的代码,检查无误后编译打包、构建镜像。CI流水线执行完成后会生成软件应用的新版本代码包和Docker镜像。
2) 部署过程主要对应持续部署(CD) 流程。在CI 流水线执行完成后,负责部署的人员(可以是开发人员,也可以是测试人员或者运维人员)触发CD流水线执行,将CI流水线生成的Docker镜像部署到指定的环境(该环境按实际需求可以分为开发环境、测试环境、正式环境等)的Kubernetes集群中。以上整体流程如图1所示。
2.2.2 功能模块设计
平台的功能模块设计主要从业务领域的角度进行划分,主要包含以下几个核心功能模块:
1) DevOps模块:主要包含持续集成(CI) 和持续部署(CD) 相关功能,另外还有应用管理、代码管理、制品管理、流水线管理等功能。
2) 容器云模块:主要包含容器管理、部署策略、扩缩容、监控指标、日志管理等功能。
3) 镜像管理模块:镜像相关的模块,主要包含镜像的管理以及自定义镜像维护等功能。
4) 后台管理模块:主要为平台管理员提供服务,包含一系列平台管理相关的功能,如:用户管理、集群管理、资源管理、权限管理等。
2.3 架构设计
2.3.1 逻辑架构
平台采用云原生技术栈,主要包括Kubernetes和Docker(其中Kubernetes 作为容器编排与管理系统,Docker作为容器运行时)以及一系列微服务应用和自动化工具和平台(如Jenkins、GitLab、Prometheus等),以此来支持CI/CD流程、监控与日志管理等。平台的整体逻辑架构设计如图2所示。
对每一层的具体设计及描述如下:
1) 基础设施层:提供云资源(如虚拟机、容器实例等)和基础服务(如网络、存储、安全等)。
2) 资源调度层:包括容器编排与管理(Kuber⁃netes) 等核心服务,主要作用在于通过合适的调度策略和机制,分配并调度满足应用程序需要的计算资源、网络资源、存储资源等。同时通过弹性伸缩能力为应用提供横向扩展的能力,保障应用的高可用性。
3) 微服务层:主要由一系列基于微服务架构的应用程序组成,包含DevOps平台、容器云平台、镜像平台、日志管理、权限管理等微服务应用。
其中:
DevOps 平台主要提供持续集成(CI) 、持续部署(CD) 相关功能,同时还提供应用管理、代码管理、制品管理等功能。
镜像平台主要提供对镜像的管理与构建等功能。
日志平台主要提供对日志的收集和日志查询相关功能。
权限管理模块主要对用户的权限和角色进行管理。
容器云平台主要提供资源的分配与容器的调度和管理能力,收敛Kubernetes相关操作与权限,向下屏蔽Kubernetes细节,向上封装Kubernetes相关原子能力,承载调度策略与发布策略具体实现。
4) 应用层:提供Web界面或API接口,供开发人员和运维人员访问和使用平台功能,同时也可以在平台提供的基础能力之上,构建其他业务场景下的应用,如业务看板、数据可视化报表等。
2.3.2 组件关系拓扑
平台基于Spring Cloud微服务框架构建,利用其丰富的组件能力实现微服务应用实例之间的灵活调用。
平台主要包含以下微服务应用(组件):
1) DevOps平台。主要提供持续集成(CI) 和持续部署(CD) 功能,另外还有应用管理、代码管理、制品管理、流水线管理等功能。
2) 容器云平台。主要提供对资源的分配和对容器调度、编排与管理的能力,收敛Kubernetes相关操作与权限,向下屏蔽Kubernetes 细节,向上封装Kubernetes 相关原子能力,承载调度策略与发布策略具体实现。
3) 镜像平台。主要提供对镜像的构建、维护,用户按需自定义镜像等功能。
另外还有以下几个第三方组件:
4) 代码仓库。主要用于对软件应用的代码进行存储和托管。
5) Jenkins。用来实现持续集成(CI) 流程中的自动化代码编译、打包、构建镜像,并将构建成功后的镜像推送到镜像仓库。
6) Docker 服务。主要用于提供Docker运行环境和执行Docker相关命令的CLI。
7) 镜像仓库。主要用于对Docker镜像进行存储和托管。
8) Kubernetes集群。Kubernetes专注于跨节点的集群资源优化、服务自动发现、弹性扩展等高级功能。它构建了一个强健的调度框架,能够智能地在集群内分配并管理容器化应用的部署,实现了从创建到运维的全自动化流程。Kubernetes集群可以根据实际场景搭建多个。
以上这些组件之间互相协作,共同为平台的各个模块和功能服务。这些组件之间的拓扑关系如图3 所示。
2.4 关键技术实现
该平台通过集成一系列关键技术和工具,实现了软件开发、测试、部署、运维的全流程自动化,主要包括以下几个方面。
2.4.1 容器化技术
利用Docker这一先进的容器化技术,将软件应用封装进容器中。此举不仅保障了应用程序在不同运行环境间的一致性与可靠性,还凭借容器迅速启动与便捷迁移的能力,极大地加速了应用的部署流程,并有效提升了资源利用效率。
2.4.2 微服务架构
将复杂庞大的软件进行应用解构,拆分出一系列自治且独立运行的微型服务。每个服务均只负责一项业务能力,服务之间高内聚低耦合,使得开发团队能够更快速地响应需求变化。
2.4.3 持续集成/持续部署(CI/CD)
通过Jenkins等工具,构建完整的全流程自动化CI/CD流水线,涵盖了从提交代码到部署到各个环境的全部周期,极大地缩短了软件交付周期,提高了软件质量和稳定性。
2.4.4 自动化运维
Kubernetes作为硬件资源抽象和调度层,很好地解决了硬件资源的按需扩展和高可用等问题[5]。利用Kubernetes的自动化运维功能,实现应用的自动扩缩容、故障恢复和滚动更新,极大地提升了系统的高可用性和稳定性。
通过上述关键技术的实现,文中设计的DevOps 平台不仅提升了软件开发的效率和灵活性,还增强了系统的稳定性、可靠性和安全性,为企业在数字化转型过程中提供了强有力的支持。
3 结论与展望
本文深入探讨了基于容器化技术与微服务架构的DevOps平台。通过详细分析容器化技术、微服务架构、持续集成/持续部署流程以及自动化运维等关键技术,构建了一个高效、可靠且可扩展的软件交付平台。该平台不仅可以显著提升软件开发和运维的效率,还可以通过自动化和标准化的流程降低人为错误的风险,确保软件质量的稳定提升。
同时,随着技术的不断发展和业务需求的持续变化,平台的优化与升级将是确保其长期竞争力的关键。
展望未来,通过继续关注容器化、微服务及Dev⁃Ops领域的最新进展,积极探索人工智能新技术在平台中的应用,通过不断的技术创新与实践积累,推动AIOX+p4FRtc4+L6FaT4C66VfA==ps在平台中的落地,基于容器和微服务的DevOps 平台将能够更好地服务于企业的数字化转型战略,推动软件行业向更高水平迈进。
本文设计的基于容器与微服务的DevOps平台为现代软件开发提供了一种高效、灵活且可信赖的解决方案,有望为相关领域的研究人员和从业者提供有益的参考。
参考文献:
[1] 黄俊,陈曦,吴涛.基于Docker的网络仿真平台设计与实现[J].现代信息科技,2023,7(4):1-5,9.
[2] 朱小亮.基于Kubernetes高校数据中心云平台设计[J].电脑知识与技术,2023,19(22):81-84.
[3] 陈鹏,何宪英.基于云原生的应用平台研究与设计[J].信息系统工程,2022(1):48-51.
[4] 陈博,周亦敏.基于Kubernetes的CI/CD平台[J].计算机系统应用,2020,29(12):268-271.
[5] 许瑜超,李桂炎,周治,等.基于开源的Prometheus开发广电网络综合运维网管平台[J].广播与电视技术,2022,49(8):134-139.
【通联编辑:谢媛媛】
基金项目:湖南省自然科学基金项目:面向三维脉图的预处理框架构建及深度学习特征工程方法研究(项目编号:2024JJ8025)