我们的客户主要是国企、央企或者科技公司,绝大多数情况下,都是需要将星云平台进行私有化部署。此前,在星云平台整体架构一文中,我详细介绍了平台是基于微服务架构设计的,这种架构带来了许多灵活性和扩展性优势,但也给私有化部署带来了不小的挑战。尤其是在私有化部署的过程中,如何确保各个服务版本的兼容性、如何确保不同服务之间的配置和代码的一致性,成为了必须解决的核心问题。为了应对这些挑战,我们需要实现清晰的版本管理体系,以确保各个微服务在不同部署环境中的稳定性。同时,为了简化部署流程,我们还必须提供一键部署的功能,确保部署过程的高效性,同时也避免人工操作中的错误和不一致。
上图展示了私有化部署的整体方案。从时间维度来看,整个过程可以分为两个主要阶段。
第一阶段:制作离线资源包。
这一阶段由我们主导,主要是在SaaS版本发布过程中,选择稳定的版本并制作相应的离线资源包。完成后,离线资源包会被推送到远程服务器进行存储。这个过程可以分为以下两个主要步骤:
第一步:选择合适的稳定版本进行私有化部署。
在这一阶段,我们需要确定基于SaaS系统的哪个稳定版本为客户提供私有化部署。为此,我们引入了Milestone(里程碑)的概念。Milestone本质上是SaaS系统某一稳定版本的标记,它代表着系统在经历了若干种关键升级后,已被验证为稳定运行。下面是我们定义Milestone的几个标准:
(1)大版本发布:当SaaS系统发布重要版本更新时,会进行相应的稳定性验证。
(2)重大架构升级:每当系统架构发生较大调整时,会对新架构的稳定性进行充分验证。
(3)数据迁移工具的编写与验证:当系统需要修复线上数据问题时,针对数据迁移编写工具并确保其成功运行。
第二步:制作基于Milestone的离线资源包并发布到仓库。
在这一阶段,我们将根据前面确定的Milestone版本,制作并发布用于客户私有化部署的离线资源包。具体过程如下:
(1)使用Jenkins构建一键打包任务。我们通过Jenkins配置一键构建任务,触发该任务后,会自动执行一系列子任务来完成整个打包过程。
(2)拉取源代码并打包后端服务。从GitLab拉取源代码后,我们会对所有后端服务进行打包处理。每个后端服务将生成一个独立的Docker镜像,并推送至Harbor仓库。
(3)拉取配置源代码并打包配置服务。同样从GitLab拉取config和config-repo的源代码,分别打包config服务及其相关配置文件(config-repo),生成一个独立的配置镜像,推送至Harbor仓库。
(4)前端及Nginx配置打包。拉取GitLab上的Nginx配置和前端源代码。首先,我们会对前端代码进行打包,然后与Nginx配置结合,生成一个完整的Web服务包。
(5)从Harbor下载镜像并打包。从Harbor仓库下载前述打包好的后端服务镜像,以及其他必要的中间件镜像(如MySQL、ElasticSearch、RabbitMQ、Redis等)。同时,复制所需的Docker安装包和各种部署脚本。将所有这些资源打包成一个tar文件,例如:M1.tar.gz。
(6)上传生成的资源包。将最终生成的tar包上传至我们自己的资源服务器,为后续私有化部署提供所需的离线资源包。
第二阶段:私有化一键部署。
在第二阶段,我们将进行私有化环境的实际部署。具体步骤如下:
(1)确定客户所需版本。首先,明确客户所需的私有化部署版本,并将对应的私有化资源包复制到客户的目标机器上。
(2)解压资源包。将私有化资源包解压到指定目录,为后续部署做好准备。
(3)执行一键部署脚本。在解压完成后,客户只需执行一键部署入口脚本install.sh。在执行过程中,客户需要根据提示输入必要的参数(如数据库连接信息、服务配置等)。
(4)完成一键部署。输入参数后,脚本会自动完成所有部署操作,包括配置服务、启动容器和检查服务等,实现整个私有化部署的自动化。
本文从整体层面介绍我们私有化部署方案的核心思路。这一私有化部署思路具有通用性,能够适应不同场景。随后,我将陆续发布几篇文章,深入探讨如何在实际项目中具体实现这一方案。每篇文章将从不同的维度进行详细讲解,确保大家可以更好地理解私有化部署的每一个环节。
我是维搭的小刘,期待与您一起深入讨论私有化部署方案的方方面面,共同推动这一领域的发展。