SpringCloud应用在Kubernetes上的最佳实践——线上发布(可灰度)

  

   SpringCloud应用在Kubernetes上的最佳实践——线上发布(可灰度)   

作者|白寂阿里云开发工程师

  

  <>强导读:前三篇文章我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。

  

相关文章推荐:

  
      <李>   《SpringCloud应用在Kubernetes上的最佳实践——开发篇》   <李>   《SpringCloud应用在Kubernetes上的最佳实践——部署篇(开发部署)》   <李>   《SpringCloud应用在Kubernetes上的最佳实践——部署篇(工具部署)》
  

     前言

  

在新版本上线时,无论是从产品稳定性还是用户对新版本的接受程度上考虑,直接将老应用升级到新版本应用都有很大风险的。我们一般的做法是,保证新老版本同时在线,并且先将少部分流量切换到新版本应用上,同时在此期间对新版本的应用请求进行观察。在确认新版本没有问题后,再逐步将更大比例的流量切换到新版本上。这个过程的核心是可以对流量的流入转发规则进行配置,eda的金丝雀发布能力,提供了多个版本同时在线的能力,并且提供了灵活的配置规则来给不同的版本进行流量分配。

  

部署在eda Kubernetes集群中春天的云微服务应用,在新版本发布的时候可以使用金丝雀发布进行小规模验证,验证通过后再全量升级。

  

     金丝雀发布配置

  

首先,进入eda的应用部署页面,对我们要进行部署升级的应用进行发布,在这里我们选择金丝雀(灰度)发布。需要注意的是,对灰度发布的流量控制,当前只对非入口应用的达博和春云应用生效。所谓入口应用,即承接外部流量的第一个应用节点。并且若您的应用使用了HPA,农场主Istio,或者依赖Deployment.Metadata。名称或Deployment.Metadata。Uid的功能与配置等k8原生功能或配置时,请勿使用灰度发布或分批发布。否,则应用部署之后,这些k8原生功能或配置将出现异常。

  

   SpringCloud应用在Kubernetes上的最佳实践——线上发布(可灰度)   

在发布页面,可以选择通过上传的JAR包或者填入JAR包地址的方式选择要进行发布的新版本应用部署包。

  

   SpringCloud应用在Kubernetes上的最佳实践——线上发布(可灰度)   

在选择好要进行发布的新版本应用部署包后,接下来进行发布策略的配置。这里分为两个部分:

  
      <李>第一部分可以对发布批次进行设置,例如设置发布灰度批次,首批进行灰度的圆荚体实例个数,分批间处理方式等,李   <李>第二部分可以对流量灰度规则进行配置,我们可以选择按流量内容进行灰度或者简单地按照流量比例进行灰度、下面将详细介绍这两种发布策略配置。
  

     设置发布策略

  

在批次发布这里我们可以进行的配置有:

  
      <李>   <强>首批灰度数量:在点击发布后,会首先将首批灰度数量个数的实例进行新版本的发布,为了保证应用的稳定性,首批灰度的实例数不能超过应用实例总数的50%,比如当前实例数是7台,那么最多只能选择3台作为首批灰度的实例;李   <李>   <强>剩余批次:首批灰度发布完成后,剩余的应用实例将按照此处指定的批次发布完成,李   <李>   <>强分批间处理方式:剩余批次间的处理方式可选择手动或者自动,若选择自动,则剩余的几个批次将在前一批发布完成后进行自动发布,自动发布的批次间隔也可进行配置,例如配置每批次在发布完成后,30分钟后自动进行下一批次的发布;李   <李>   <强>批次内部署间隔:每一批次内,如果此批次内要发布的应用实例数大于1,则要进行此配置指定批次内实例部署间隔。
  

在下面的例子中,我们现在有7个舱应用实例,选择首批对2个实例进行灰度升级。在首批2个实例的灰度发布完成后,将剩下的5个实例分3个批次进行发布。这3个批次的批次间处理方式选择自动发布,在当前批次发布完成30分钟后自动进行下一批次的发布。同时,由于第2批次和第2批次内实例个数为两台,因此选择批次内两台实例部署间隔为60秒。在发布页面右侧可以对我们的发布策略配置信息进行预览。

SpringCloud应用在Kubernetes上的最佳实践——线上发布(可灰度)