[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]蓝绿发布是一种
[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]零宕机
[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]的应用更新策略。进行蓝绿发布时,应用的旧版本服务与新版本服务会同时并存,同一个应用不同版本的服务之间共享负载均衡,通过调节负载均衡权重的方式,可以实现不同版本服务之间的流量切换。验证无误后,可以通过发布确认的方式将应用的旧版本的服务删除;如果验证不通过,则进行发布回滚,应用的新版本会进行删除。
场景介绍
假设您要进行蓝绿发布的应用是一个 Nginx 的静态页面,初始的应用模板如下。
- [backcolor=transparent]nginx[backcolor=transparent]-[backcolor=transparent]v1[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'registry.aliyuncs.com/ringtail/nginx:1.0'
- [backcolor=transparent] ports[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]80[backcolor=transparent]:[backcolor=transparent]80[backcolor=transparent]/[backcolor=transparent]tcp
- [backcolor=transparent] labels[backcolor=transparent]:
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//proxy_test:80
- [backcolor=transparent] restart[backcolor=transparent]:[backcolor=transparent] always
部署后页面的效果如下。
使用说明
由于每个容器需要暴露主机的端口,所以执行负载均衡路由蓝绿发布过程中,需要确保某个服务容器的个数少于或者等于集群中机器数的1/2;否则,会导致端口冲突。
进行负载均衡蓝绿发布时,您可以考虑先缩容容器到集群机器数量的一半,然后进行蓝绿发布,发布结束后,再扩容到原来的规模。
操作步骤
- 登录 容器服务管理控制台。
- 单击左侧导航栏中的 [backcolor=transparent]应用。
- 选择目标应用所在的集群。
- 选择目标应用并单击 [backcolor=transparent]变更配置。
选择变更的发布模式与新版本服务的配置。
[backcolor=transparent]注意:
- 在蓝绿发布中,新版本与旧版本不能共用同一个名字。
- 在蓝绿发布的场景中,为了保证应用的零宕机切换,新版本的服务的路由权重默认为 0,需要通过路由管理页面进行调整,方可进行流量切换。
模板样例如下:[backcolor=transparent]
nginx[backcolor=transparent]
-[backcolor=transparent]
v2[backcolor=transparent]
:
[backcolor=transparent]image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'registry.aliyuncs.com/ringtail/nginx:2.0'
[backcolor=transparent]ports[backcolor=transparent]:
[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]80[backcolor=transparent]:[backcolor=transparent]80[backcolor=transparent]/[backcolor=transparent]tcp
[backcolor=transparent]labels[backcolor=transparent]:
[backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//proxy_test:80
[backcolor=transparent]restart[backcolor=transparent]:[backcolor=transparent] always
单击 [backcolor=transparent]确定,发布变更。
在发布的过程中,会经历两个状态:
- 蓝绿发布中:表示新版本的服务尚未启动完成。
蓝绿发布待确认:表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。
进入应用的详情页面,可以看到新版本的应用和旧版本的应用并存。其中蓝色的表示旧版本的服务,绿色表示新版本的服务。如果一个服务在前后两个版本中都存在且没有变化,那么会出现黄色的标签,表示这个应用在蓝绿发布中不会出现任何变化。
单击 [backcolor=transparent]路由列表 并单击[backcolor=transparent]设置服务权重。
如下图所示,旧版本服务的负载均衡权重为 100,新版本服务负载均衡的权重为 0。
要做到[backcolor=transparent]零宕机升级,您需要先把新版本的服务的权重值调整为 100,此时新旧服务的权重各占 50%,测试新旧版本的服务都有稳定的流量。
[backcolor=transparent]注意:同时调整两个服务的权重,可能会导致部分请求失败,所以权重需要分为两步进行调整,一步只调整一个服务的权重。例如,先将新服务权重值从 0 调整为 100,待流量稳定后,再将然旧服务权重值从 100 设置为 0。
下一步,将旧版本服务的权重调整为 0,新版本服务的权重调整为 100。
您可以打开一个新的浏览器窗口,访问新的版本,结果如下。
当整个发布流程验证完毕后,在应用列表页面,单击 [backcolor=transparent]确认发布完成 并在弹出的确认对话框中单击 [backcolor=transparent]确认 进行发布确认,方可进行下一次发布。
您可以看到应用的服务列表已经更新了,旧的服务已经完全下线删除了。