开发者社区> 问答> 正文

Swarm mode 集群的简单路由蓝绿发布策略


背景信息
蓝绿发布是一种[backcolor=transparent]零宕机的应用更新策略。进行蓝绿发布时,应用的旧版本服务与新版本服务会同时并存,同一个应用不同版本的服务之间共享路由,通过调节路由权重的方式,可以实现不同版本服务之间的流量切换。验证无误后,可以通过发布确认的方式将应用的旧版本的服务删除;如果验证不通过,则进行发布回滚,应用的新版本会进行删除。

前置条件
支持蓝绿发布需要将路由服务升级到最新的版本。详细信息参见 升级系统服务

场景介绍
假设您要进行蓝绿发布的应用是一个 Nginx 的静态页面,初始的应用模板如下。

  1. [backcolor=transparent]nginx[backcolor=transparent]-[backcolor=transparent]v1[backcolor=transparent]:
  2. [backcolor=transparent]  image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'registry.aliyuncs.com/ringtail/nginx:1.0'
  3. [backcolor=transparent]  labels[backcolor=transparent]:
  4. [backcolor=transparent]    aliyun[backcolor=transparent].[backcolor=transparent]routing[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] nginx
  5. [backcolor=transparent]  restart[backcolor=transparent]:[backcolor=transparent] always

部署后页面的效果如下。


操作步骤
  1. 登录 容器服务管理控制台
  2. 单击左侧导航栏中的 [backcolor=transparent]应用。
  3. 选择目标应用所在的集群。
  4. 选择目标应用并单击 [backcolor=transparent]变更配置。

  5. 选择变更的发布模式与新版本服务的配置。

    [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]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]设置服务权重。
    如下图所示,旧版本服务的权重为 100,新版本服务的权重为 0。

    要做到零宕机升级,您需要先把新版本的服务的权重值调整为 100,此时新旧服务的权重各占 50%,测试新旧版本的服务都有稳定的流量。

    [backcolor=transparent]注意:同时调整两个服务的权重,可能会导致部分请求失败,所以权重需要分为两步进行调整,一步只调整一个服务的权重。例如,先将新服务权重值从 0 调整为 100,待流量稳定后,再将然旧服务权重值从 100 设置为 0。

    将旧版本服务的权重调整为 0,新版本服务的权重调整为 100。

    由于默认路由服务是进行会话保持的,您可以打开一个新的浏览器窗口,访问新的版本,结果如下所示。

    当整个发布流程验证完毕后,在应用列表页面,单击 [backcolor=transparent]确认发布完成 并在弹出的确认对话框中单击 [backcolor=transparent]确认 进行发布确认,方可进行下一次发布。

    您可以看到应用的服务列表已经更新了,旧的服务已经完全下线删除了。

    展开
    收起
    反向一觉 2017-10-30 16:08:22 2230 0
    0 条回答
    写回答
    取消 提交回答
    问答排行榜
    最热
    最新

    相关电子书

    更多
    基于流量的灰度发布和自动弹性实践 立即下载
    阿里云容器 AHAS Sentinel 网关流控揭秘 立即下载
    基于ACK One和ACR构建CI/CD流水线最佳实践 立即下载