一种云环境下自动化部署资源的软件交互平台及方法
技术领域
本发明涉及计算机技术领域,特别是一种云环境下自动化部署资源的软件交互平台及方法。
背景技术
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes在某种程度上让系统环境与应用一一对应,并且达到在测试、开发、生产环境从基础系统和应用高度一致。Kubernetes使容器最大优势是可以复用,通过不断优化容器最终形成一个镜像可以无限克隆到任意一个环境。
互联网发展迭代快速,为满足复杂的应用架构场景微服务的架构越来越普及,即将应用服务实现高内聚低耦合,拆分越来越细,实现自由组合及服务编排,从而构建业务中台、数据中台。但同时,复杂的架构设计也带来了运维和软件发布层面的成本和复杂度。使用传统的服务器、虚拟主机、云主机已经无法支撑频繁的微服务发布。一般的企业级应用所需要的服务从几十个到上百个不等,使用传统方式从代码到发布运行的过程将是漫长、复杂、配置易错及低效率的,随着数量级应用服务的增长,运维成本成正比例增长,交付周期漫长而且不现实,这将会复杂架构的运维瓶颈。本发明本着将数量级的应用如单体应用一般简单发布运维部署。从而,使数量级的应用服务从代码到发布过程越来越简单,大大促进互联网软件高度复杂架构的支持和提供动力。
发明内容
本发明的目的在于提供一种云环境下自动化部署资源的软件交互平台及方法,实现从代码编译到发布过程的全自动化,通过本发明可以发布数量级的服务应用,并能正常运行服务,从而支撑数量级的应用服务发布和运维以解决背景技术提到的运维瓶颈。
为实现上述技术目的,达到上述技术效果,本发明公开了一种云环境下自动化部署资源的软件交互平台,用于将软件项目服务从代码开始到项目正常运行的整个过程进行自动化部署,包括了服务端server、控制端patrol、流程执行端process和插件端plugin,服务端server负责配置软件项目对应的gitlab地址、账号信息、上传项目初始化数据库脚本,构建项目环境,并向控制端patrol下达发布指令,控制端patrol负责实现用户使用交互,在收到项目发布指令后调用流程执行端process和插件端plugin,通过调用流程执行端process执行项目的软件环境发布,并调用插件端plugin实现自动化部署。
其中,服务端server部署有Gitlab、Docker、Maven、NodeJs、Registry、Kubernetes、Matrics-Server、NFS及数据MySQL服务,Kubernetes中在同一个namespace下拥有唯一应用别名,应用别名作为环境变量,通过配置的项目gitlab地址、初始化数据库,项目之间使用Docker的环境变量,用应用别名来取代原传统方式的固定ip配置,使得应用之间的相互访问无状态化。即自动化平台每启动一个应用都将IP绑定到固定的应用别名,别名作为环境变量。应用之间的数据交换地址都采用固定的应用别名。
其中,插件端plugin包含Git、Maven、Docker、Kubernetes、Nfs、Matrics-Server服务api调用;插件端plugin使用Gitapi通过配置的gitlab地址抓取软件项目的代码、编译、打包、制作镜像、上传镜像至镜像仓库及发布服务到Kubernetes和Docker的集群中。
其中,流程执行端process负责将从软件项目的代码抓取到发布应用的多种流程编排并触发执行。
优选的,Gitlab用于保存开发人员的源代码的日常管理、版本迭代、分支管理及代码存储。
优选的,Maven管理java语言的依赖包关系,分析源代码的第三方包依赖情况分析及本地仓库、第三方仓库和中央仓库的包存储和下载。
优选的,Matrics-Server基于Docker实例运行,采集集群服务的CPU、内存和硬盘数据,所述MySQL服务存储源代码地址、应用配置信息、镜像数据信息、资源分配信息。
一种云环境下自动化部署资源的方法,方法步骤如下:
S1:搭建服务端server,配置Gitlab、Docker、Maven、NodeJs、Registry、Kubernetes、Matrics-Server、NFS及数据MySQL服务;
S2:搭建部署控制端patrol、流程执行端process、插件端plugin;
S3:控制端patrol按照配置要求配置软件项目对应的gitlab地址、账号信息、上传项目初始化数据库脚本,并构建项目环境实现一键发布;
S4:控制端patrol收到用户自动化发布请求后,调用流程执行端process执行项目的软件环境发布;
S5:控制端patrol在项目软件环境部署完后自动触发项目完整发布,通过调用插件端plugin使用gitapi通过配置的代码地址抓取代码、编译、打包、制作镜像、上传镜像至镜像仓库及发布服务到Kubernetes和Docker的集群中;并于控制端patrol可视化展现。
其中,S5中插件端plugin将软件项目的代码抓取到本地,插件端plugin的Maven对后端语言的代码进行编译、打包,插件端plugin对前端类代码使用NodeJs自带的npm进行编译,插件端plugin的Docker对软件项目的代码及前端的编译文件进行镜像制作,并上传到镜像仓库中,插件端plugin利用用户已有配置数据及Kubernetes api生成deployment、svc实现软件项目应用的部署。
一种可读存储介质,可读存储介质上存储有上述基于云环境下自动化部署资源的软件交互平台,软件交互平台用于一种基于云环境下自动化部署资源的方法的步骤。
本发明具有以下有益效果:
1.本发明将传统软件项目从代码开始到项目正常运行的整个过程进行自动化;从软件源码、资源规划、编译、打包、镜像制作、镜像上传及自动发布的整个软件发布过程无人工介入的全自动化软件应用配置管理平台,并实现运行时监控、动态增量发布、动态删除发布、横向扩展和持久化管理等,极大程度的降低了运维人员的投入成本,软硬件资源进行最大化的有效利用。
2.本发明分别从项目开发、测试、生产阶段均达到了缩短交付周期的效果,提升了软件项目每个环境的效率,从而控制了项目研发成本。
3.本发明涉及docker环境变量的传递应用,通过环境变量,由全局资源管理器管理,软件项目服务之间无需知道对方ip,使得应用之间的相互访问无状态化;通过横向伸缩,在某些场景需求,如访问爆发、应用缩减、负载高峰期等快速响应,保障了可靠性,且大大降低了软件生命周期的成本投入。
附图说明
图1为本发明提出的一种云环境下自动化部署资源的软件交互平台及方法的操作流程图;
图2为本发明提出的一种云环境下自动化部署资源的软件交互平台及方法的执行流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。
如图1-2所示,本发明公开了一种云环境下自动化部署资源的软件交互平台,通过支持多种开发语言Java、React、Vue等,通过集成内置打包组件实现自动编译和打包,用于将软件项目服务从代码开始到项目正常运行的整个过程进行自动化部署;包括了服务端server、控制端patrol、流程执行端process和插件端plugin,服务端server负责配置软件项目对应的gitlab地址、账号信息、上传项目初始化数据库脚本,构建项目环境,并向控制端patrol下达发布指令,控制端patrol负责实现用户使用交互,在收到项目发布指令后调用流程执行端process和插件端plugin,通过调用流程执行端process执行项目的软件环境发布,并调用插件端plugin实现自动化部署。
服务端server部署有Gitlab、Docker、Maven、NodeJs、Registry、Kubernetes、Matrics-Server、NFS及数据MySQL服务,通过配置的项目gitlab地址、初始化数据库,项目之间使用Docker的环境变量,用应用别名来取代原传统方式的固定ip配置,使得应用之间的相互访问无状态化。即自动化平台每启动一个应用都将IP绑定到固定的应用别名,别名作为环境变量。应用之间的数据交换地址都采用固定的应用别名。例如,用户中心应用${u-center}、业务应用${business},那么业务应用要连接用户中心权限接口一直固定访问${u-center.ip},由Kubernetes的环境变量去取值,自动化平台在新建一套应用部署都会自动对用户中心应用${u-center}、业务应用${business}赋环境变量值,及实际应用的ip地址。如此一来,应用之间、程序之内、配置中心都无需关心每个应用的具体ip地址。开发环境、测试环境、生产环境应用镜像包保持文件hash值不用任何修改。从而到达几乎不用修改任何配置,来支持快速搭建一套环境和快速克隆。
通过预先生成kubernetes集群的master节点的ip下的端口,用于分配至kubernetes的namespace下所有pod实例(包括软件服务和第三方软件)的映射出来的svc服务的ip和端口;每一个kubernetes部署实例在同一个namespace下拥有唯一应用别名。所有的软件服务之间相互关联都通过别名出发引用响应的ip地址、端口、账号配置等。
插件端plugin包含Git、Maven、Docker、Kubernetes、Nfs、Matrics-Server服务api调用;插件端plugin使用Git api通过配置的gitlab地址抓取软件项目的代码、编译、打包、制作镜像、上传镜像至镜像仓库及发布服务到Kubernetes和Docker的集群中。具体为:java语言软件通过Apache Maven的mvn package命令实现软件自动打包;打包后将软件包通过自动生成的Dockerfile制作成带版本号docker镜像,并push至registry镜像仓库;将已推送的镜像信息自动生成到kubernetes的depolyment的yaml文件信息中,并将整个namespace下的所有kubernetes实例的信息以环境变量方式传递到deployment的yaml文件中,用于软件获取关联的配置信息的实际ip地址和端口,从而免去用户的ip信息配置。
流程执行端process负责将从软件项目的代码抓取到发布应用的多种流程编排并触发执行。
Gitlab用于保存开发人员的源代码的日常管理、版本迭代、分支管理及代码存储。
Maven管理java语言的依赖包关系,分析源代码的第三方包依赖情况分析及本地仓库、第三方仓库和中央仓库的包存储和下载;通过相关依赖,Maven解析pom.xml文件,自动解析Mysql、ActiveMQ、MongoDB、ElasticSearch、Redis、Kafka、Zookeeper、Eureka、PostgreSQL等中间软件,并通过预先映射关系第三方软件docker镜像版本和地址中获取合适的第三方软件镜像地址版本,并通过程序服务实现第三方软件实例发布。
Matrics-Server基于Docker实例运行,采集集群服务的CPU、内存和硬盘数据,通过Metrics-Server监控namespace下的所用pod应用实例的CPU、内存和硬盘负载情况;MySQL服务存储源代码地址、应用配置信息、镜像数据信息、资源分配信息。
一种云环境下自动化部署资源的方法,方法步骤如下:
S1:搭建服务端server,配置Gitlab、Docker、Maven、NodeJs、Registry、Kubernetes、Matrics-Server、NFS及数据MySQL服务;
S2:搭建部署控制端patrol、流程执行端process、插件端plugin;
S3:控制端patrol按照配置要求配置软件项目对应的gitlab地址、账号信息、上传项目初始化数据库脚本,并构建项目环境实现一键发布;
S4:控制端patrol收到用户自动化发布请求后,调用流程执行端process执行项目的软件环境发布;
S5:控制端patrol在项目软件环境部署完后自动触发项目完整发布,通过调用插件端plugin使用gitapi通过配置的代码地址抓取代码、编译、打包、制作镜像、上传镜像至镜像仓库及发布服务到Kubernetes和Docker的集群中;并于控制端patrol可视化展现。
S5中插件端plugin将软件项目的代码抓取到本地,插件端plugin的Maven对后端语言的代码进行编译、打包,插件端plugin对前端类代码使用NodeJs自带的npm进行编译,插件端plugin的Docker对软件项目的代码及前端的编译文件进行镜像制作,并上传到镜像仓库中,插件端plugin利用用户已有配置数据及Kubernetes api生成deployment、svc实现软件项目应用的部署。
一种可读存储介质,可读存储介质上存储有上述基于云环境下自动化部署资源的软件交互平台,软件交互平台用于一种基于云环境下自动化部署资源的方法的步骤。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。