如需升级部署在容器服务 Kubernetes 集群中的 Spring Cloud 或 Dubbo 微服务应用,可以使用金丝雀发布进行小规模验证,验证通过后再全量升级。

使用限制

  • Dubbo 应用在使用金丝雀发布时没有使用限制。
  • Spring Cloud 应用在使用金丝雀发布时有以下限制:
    • 暂不支持 Netflix Zuul、Spring Cloud Gateway。
    • 入口应用(承接外部流量的第一个应用节点)暂不支持灰度。

      入口应用直接承接外部流量,由于暂不支持对这种流量进行截获和路由,因此对入口应用暂不能提供流量灰度控制。一种理想的模式是搭建微服务网关来作为承接外部流量的“入口应用”,这样所有业务应用都在网关之后,就可以实现流量灰度控制了。

    • 如果应用包含以下原生功能或配置,请勿使用灰度发布,否则发布后该原生功能将出现异常:

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

操作步骤

  1. 登录 EDAS 控制台
  2. 在左侧导航栏中选择应用管理 > 应用列表
  3. 应用列表页面选择地域命名空间,然后单击具体应用名称。
  4. 在应用详情页面右上角单击部署应用
  5. 部署模式选择页面灰度发布(金丝雀)区域右上角单击开始部署
  6. 灰度发布页面上传新版本应用的部署包、设置发布策略和灰度规则,然后单击确定
    1. 上传新版本应用的部署包。
      灰度发布-上传部署包-k8s
    2. 发布策略区域配置发布策略参数。

      右侧的发布策略配置信息会根据配置显示灰度发布流程。

      灰度发布-发布策略-K8s

      发布策略参数说明:

      • 首批灰度数量:灰度发布的应用实例数量。右侧会显示应用当前实例数,为了保证应用稳定性,灰度实例数不能超过应用实例总数的 50%。
      • 剩余批次:灰度发布后,剩余的应用实例按照设定的批次完成分批发布。
      • 分批间处理方式灰度后剩余批次设置为 2 批或 2 批以上时需要设置,包括自动手动两种方式。

        • 自动:根据间隔自动分批发布。间隔即剩余批次间的发布时间间隔,单位为分钟。
        • 手动:手动触发下一个批次的发布。
      • 批次内部署间隔:每一批次内,如果应用实例数大于 1,应用实例间的部署时间间隔,单位为秒。

    3. 设置灰度规则。

      目前支持按内容灰度按比例灰度两种方式设置灰度规则。

      • 按内容灰度:单击创建新的入口流量规则,设置入口流量规则。
        说明 您可以创建多个入口流量规则。
        灰度规则-按内容灰度

        按内容灰度参数说明:

        • 协议类型:包含 Spring CloudDubbo,按应用实际情况选择。
          • Spring Cloud:需要设置 path
          • Dubbo:需要选择服务方法
        • 条件模式:包含同时满足下列条件满足下列任一条件
        • 条件列表Spring CloudDubbo 协议的条件有所不同。包含 Cookie、Header 和 Parameter 3 种方式,根据实际需求选择。
          • Spring Cloud:包含 CookieHeaderParameter 3 种方式,根据实际需求设置。
          • Dubbo:根据应用实际的参数参数值获取表达式设置。
      • 按比例灰度:设置流量比例,流量会按配置的比例被转发到当前的灰度分组。

    灰度发布启动后,先在指定的灰度分组中部署新版本应用。基本信息页面提示应用有变更流程正在执行,处于执行中状态。单击查看详情,进入变更详情页面查看部署进度和状态。

    终止变更:应用处于金丝雀发布状态,并且该变更已经被终止。请先回滚应用,再进行其他操作。

  7. 监控灰度流量是否符合预期,详情请参见监控灰度流量
  8. 灰度流量验证完成后,在变更详情页面单击开始下一批,完成后续分批发布。
    如果在验证过程中,发现新版本应用有问题,可以在变更详情页面右上角单击立即回滚。在弹出的立即回滚对话框确认回滚的影响,然后单击回滚

结果验证

灰度发布后,在基本信息页面查看部署包是否为新部署的应用版本。在实例部署信息页面查看应用实例的运行状态是否为运行正常