在应用发布与产品迭代中,经常采用分批发布的方式来控制上线风险。

分批发布简介

分批发布是按照一定的批次,每次只对应用的一部分实例进行升级的发布过程。分批发布过程中如果出现故障,您可以终止变更过程并进行回滚,待问题修复后重新发布。

在容器服务 Kubernetes 集群中,当一个应用进行分批发布时,是将该应用内的应用实例数均分到每一个批次进行部署,如果不能均分则批次靠前数量较小,批次靠后数量较大。

场景示意

现有一个应用包含 10 个应用实例,每个应用实例的部署版本为 Ver.1 版本,现需将每个应用实例升级为 Ver.2 版本。

假设将所有应用实例分 3 批进行部署,根据分批发布的策略,该发布的流程示意如下图:

ED分批发布示意图AS

使用须知

  • 在容器服务 Kubernetes 集群中,应用使用分批发布时会新建 Deployment 进行部署。
  • 当您的应用包含了以下原生功能或配置时,请勿使用分批发布,否则发布后该原生功能将出现异常:
    • HPA
    • Rancher
    • Istio
    • 依赖 Deployment.Metadata.Name 或 Deployment.Metadata.Uid 的功能与配置

操作步骤

  1. 登录EDAS 控制台
  2. 在左侧导航栏中选择应用管理 > 应用列表
  3. 应用列表页面选择地域命名空间,然后单击具体应用名称。
  4. 在应用详情页面右上角单击部署应用
  5. 部署模式选择页面分批发布区域单击开始部署
  6. 分批发布页面上传应用新版本的部署包。
    • WAR/JAR

      WAR 包和 JAR 包部署仅仅是部署包形式不同,其它参数一致。

    • 镜像

      镜像只需要选择新的镜像版本,无需设置其它参数。

  7. 设置发布策略
    分批发布-发布策略

    发布策略参数说明:

    • 发布批次:应用实例按照设定的批次完成分批发布。
    • 分批间处理方式:包含自动手动两种方式。
      • 自动:根据间隔自动分批发布。间隔即剩余批次间的发布时间间隔,单位为min。
      • 手动:手动触发下一个批次的发布。
    • 批次内部署间隔:每一批次内,如果应用实例数大于 1,应用实例间的部署时间间隔,单位为秒。
  8. 可选: 根据您的实际需求,选择是否需要配置启动命令环境变量持久化存储本地存储应用生命周期管理日志收集设置
  9. 设置完成后,单击确定

结果验证

到应用中查看应用变更详情,查看分批发布的状态,待所有批次都执行成功则说明分批发布成功。

在应用详情页查看实例部署信息,当实例的版本已变为 Ver.2 并且所有实例运行状态均为 Running 时,则说明发布成功。

回滚应用

在分批发布期间,只要至少有一个应用实例未升级为新版本,就认为发布处于进行中状态。在监视升级时,如果您注意到第一批升级的应用实例停止响应,您可以进入变更详情页面单击立即回滚,将已发布的实例回滚到以前的服务包和配置。

在分批发布时,如果遇到异常,可参考变更流程问题排查指南进行排查、解决。
  • 部署包不可用、健康检查失败等异常报错会导致应用升级失败,当前应用变更会自动终止并回滚。
  • 升级时单批次最大超时时间为 30 分钟,如果是超时导致变更流程暂停,您需进入变更详情页面手动终止发布流程并回滚。