全部产品
云市场

在容器服务 Kubernetes 集群中灰度发布或分批发布

更新时间:2019-09-29 19:11:02

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

灰度发布和分批发布简介

灰度发布,又叫金丝雀发布,是指在原有部署版本可用的情况下,同时部署一个新版本应用作为金丝雀(金丝雀对瓦斯极为敏感,因此矿工会携带金丝雀进入矿井,以检测瓦斯浓度是否符合安全标准),用来测试新版本的性能和表现,在保证整体系统稳定的情况下尽早暴露问题。

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

在容器服务 Kubernetes 集群中,当一个应用进行分批发布时,是将该应用内的应用实例数均分到每一个批次进行部署,如果不能均分则批次靠前数量较小,批次靠后数量较大。当一个应用进行灰度发布时,灰度发布的应用实例数不能超过应用实例总数的 ½,剩余的应用实例将按照指定的批次分批发布完成。

场景示意

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

  • 灰度发布:假设选择灰度发布 2 台应用实例,剩下的 8 个应用实例分 3 批进行分批发布,根据分批发布的策略,该发布的流程示意如下图。

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

使用须知

  • 在容器服务 Kubernetes 集群中,应用使用灰度或者分批发布时会新建 Deployment 进行部署。

  • 当您的应用包含了以下原生功能或配置时,请勿使用灰度发布或分批发布,否则发布后该原生功能将出现异常:

    • HPA
    • Rancher
    • Istio
    • 依赖 Deployment.Metadata.Name 或 Deployment.Metadata.Uid 的功能与配置

灰度发布

  1. 登录 EDAS 控制台EDAS 控制台

  2. 在左侧导航栏中选择应用管理->应用列表,在应用列表页面中单击需要灰度发布的集群类型为容器服务 K8S 集群的应用名称。

  3. 在应用详情页右上角单击部署应用

  4. 应用的部署方式由第一次部署方式决定,根据部署方式设置部署参数:

    • WAR 包部署:重新上传 WAR 包或者粘贴新的部署 WAR 包的地址,并选择环境、设置参数。

    • JAR 包部署:重新上传 JAR 包或者粘贴新的部署 JAR 包的地址,并完成相关环境的选择和参数的设置。

    • 镜像:在镜像仓库内重新选择镜像。

  5. 发布策略设置区域框内配置发布策略参数。

    参数 说明
    发布策略 可选值包括灰度发布和分批发布。在本示例中选择灰度发布
    灰度数量 设置进行灰度发布的应用实例数量,灰度发布的应用实例数不能超过应用实例总数的 ½。
    灰度后剩余批次 灰度发布后,剩余的应用实例按照设定的批次完成发布。
    分批间处理方式可以设置剩余的应用实例各批次间发布的触发形式,选择自动将根据分批时间间隔自动分批发布,选择手动将人为手动触发下一个批次的发布。
    分批时间间隔仅需自动方式需要设置,即分批批次间的发布时间间隔。
    批次内部署间隔每一批内,如果应用实例数大于 1,应用实例间的部署时间间隔。
  6. 根据实际配置需求,重新配置启动命令环境变量Hosts 绑定设置健康检查等高级设置选项。

  7. 单击确认

分批发布

参照灰度发布的过程,在步骤 5 中的发布策略选择分批发布,参考步骤 5 的说明表格配置参数,然后单击确认完成分批发布设置。

结果验证

到应用变更记录中查看应用变更详情,查看灰度和分批发布的状态,待所有批次都执行成功则说明应用更新成功。您可以到应用详情页查看实例部署信息,当实例的版本已变为 Ver.2 并且所有实例运行状态均为 Running 时,则说明发布成功。

回滚应用

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

应用在变更过程中会有一些变更流程异常情况

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

更多信息