随着软件项目迭代过程中需求的数量及复杂度的增加,难免会有缺陷,由于各种原因而遗漏到新发布的版本中,如果有未发现的较为严重缺陷的版本部署到正式环境中,就有可能带来较大的损失,甚至难以恢复。为了保障应用可以更加平稳地发布到正式环境中,可以不用一次性更新所用应用实例的版本,而是采取逐渐更新并观察新版本的稳定性,直到认为没有问题后,再全部更新为新版本的方法,即渐进式部署。
渐进式部署是持续部署的一种高级形式,常见的方式包括蓝绿(Blue-Green)发布、滚动发布、金丝雀(Canary)发布等。
1.蓝绿发布
蓝绿部署中有两套系统(如图3-1所示):一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”(图中用实线方框表示);另一套是准备发布的系统,标记为“蓝色”(图中用虚线方框表示)。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。
图3-1 蓝绿发布
2.滚动发布
滚动发布一般是指,取出一个或者多个服务器,停止服务,执行更新,并重新将其投入使用,周而复始,直到集群中所有的实例都更新成新版本,如图3-2所示。
3.金丝雀发布
金丝雀发布(Canary release)是一种降低在生产中引入新软件版本的风险的技术,方法是在将更改推广到整个基础架构并使可供所有人使用前,缓慢地将更改推广到一小部分用户。如图3-3所示,虚框代表的服务为更新的服务,新版本会少量地更新到环境中,遇到问题时,可以尽快回滚;没有问题,则可以逐渐更新到整个系统。
图3-2 滚动发布
图3-3 金丝雀发布
【金丝雀发布的起源】 17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀,作为“瓦斯检测指标”,以便在危险状况下紧急撤离。
Argo Rollouts由一个Kubernetes控制器(controller)和一组CRD组成,可以提供高级的部署功能,如蓝绿发布、金丝雀发布等。
Flagger是一个渐进式部署工具,可以自动化运行在Kubernetes上的应用的发布流程。