发布方案
蓝绿发布
蓝绿部署,是指同时运行两个版本的应用。
在蓝绿部署时,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。
例如发布前,在蓝色的系统上进行测试,测试完成后切换为蓝色系统,同时观察蓝色系统的运行状态,如果运行出现问题可以及时切回绿色系统。
优点:
这样做可以减少发布影响的时间。例如某网站要进行后端升级,无需完全停掉服务更新,且出现问题后可以及时切回老版本。
缺点:
需要两倍的硬件资源,需要额外进行付费;微服务架构很难这样进行迁移;要求蓝绿两套系统完全没有耦合;迁移后未完成的任务进行迁移需要一定的成本,如数据库的迁移。
滚动发布
取出部分服务器停止服务,执行更新,更新完成后,让流量流向此更新完成的机器。周而复始,直到集群中所有的实例都更新成新版本。
优点:
不需要准备两套完整的机器,节约资源。
缺点:
回滚困难,流量直接到新的机器上,出现问题后,无法实现快速回滚;更新时间长,带来额外的风险,如果80%完成更新后发生重大漏洞,回滚会比较耗时和困难。
灰度发布
灰度发布,又名金丝雀发布,是对某一产品的发布逐步扩大使用群体范围,也叫灰度放量。
在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来。
测试成功后,将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比。
当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。
直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。
部署方案
K8S部署过程
开发人员提交代码到Git版本仓库;
Jenkins人工/定时触发项目构建;
Jenkins拉取代码、代码编码、打包镜像、推送到测试环境的镜像仓库;
k8s拉取镜像产生pod中的容器;
测试环境中测试没有问题后,把镜像同步到生产的镜像仓库中;
生产环境K8S部署镜像;
Jenkins
Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。
没有Jenkins时:
软件在开发者的机器上通过脚本或者手动构建,源代码保存在代码服务器中。
但是开发者经常要修改本地代码,因此每次发布,都需要手动合并代码,再进行手动构建,这个过程费时费力。
使用Jenkins部署项目