背景信息
蓝绿发布是一种[backcolor=transparent]零宕机的应用更新策略。进行蓝绿发布时,应用的旧版本服务与新版本服务会同时并存,同一个应用不同版本的服务之间共享路由,通过调节路由权重的方式,可以实现不同版本服务之间的流量切换。验证无误后,可以通过发布确认的方式将应用的旧版本的服务删除;如果验证不通过,则进行发布回滚,应用的新版本会进行删除。
前置条件
支持蓝绿发布需要将路由服务升级到最新的版本。详细信息参见
升级系统服务。
场景介绍
假设您要进行蓝绿发布的应用是一个 Nginx 的静态页面,初始的应用模板如下。
- [backcolor=transparent]nginx[backcolor=transparent]-[backcolor=transparent]v1[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] nginx
- [backcolor=transparent] labels[backcolor=transparent]:
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]routing[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] nginx
- [backcolor=transparent] restart[backcolor=transparent]:[backcolor=transparent] always
部署后页面的效果如下。
操作步骤
- 登录 容器服务管理控制台。
- 单击左侧导航栏中的 [backcolor=transparent]应用。
- 选择目标应用所在的集群。
- 选择目标应用并单击 [backcolor=transparent]变更配置。
选择变更的发布模式与新版本服务的配置。
[backcolor=transparent]注意:
- 在蓝绿发布中,新版本与旧版本不能共用同一个名字。
- 在蓝绿发布的场景中,为了保证应用的零宕机切换,新版本的服务的路由权重默认为 0,需要通过路由管理页面进行调整,方可进行流量切换。
模板样例如下所示:[backcolor=transparent]
nginx[backcolor=transparent]
-[backcolor=transparent]
v2[backcolor=transparent]
:
[backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] nginx
[backcolor=transparent] labels[backcolor=transparent]:
[backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]routing[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] nginx
[backcolor=transparent] restart[backcolor=transparent]:[backcolor=transparent] always
单击 [backcolor=transparent]确定,发布变更。
在发布的过程中,会经历两个状态:
- [backcolor=transparent]蓝绿发布中:表示新版本的服务尚未启动完成。
[backcolor=transparent]蓝绿发布待确认:表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。
进入应用的详情页面,可以看到新版本的应用和旧版本的应用并存。
单击 [backcolor=transparent]路由列表 并单击 [backcolor=transparent]设置服务权重。
如下图所示,旧版本服务的权重为 100,新版本服务的权重为 0。
要做到零宕机升级,您需要先把新版本的服务的权重值调整为 100,此时新旧服务的权重各占 50%,测试新旧版本的服务都有稳定的流量。
[backcolor=transparent]注意:同时调整两个服务的权重,可能会导致部分请求失败,所以权重需要分为两步进行调整,一步只调整一个服务的权重。例如,先将新服务权重值从 0 调整为 100,待流量稳定后,再将然旧服务权重值从 100 设置为 0。
将旧版本服务的权重调整为 0,新版本服务的权重调整为 100。
由于默认路由服务是进行会话保持的,您可以打开一个新的浏览器窗口,访问新的版本,结果如下所示。
当整个发布流程验证完毕后,在应用列表页面,单击 [backcolor=transparent]确认发布完成 并在弹出的确认对话框中单击 [backcolor=transparent]确认 进行发布确认,方可进行下一次发布。
您可以看到应用的服务列表已经更新了,旧的服务已经完全下线删除了。