作者 | 白寂 阿里云开发工程师
导读:前三篇文章我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。
相关文章推荐:
在新版本上线时,无论是从产品稳定性还是用户对新版本的接受程度上考虑,直接将老应用升级到新版本应用都有很大风险的。我们一般的做法是,保证新老版本同时在线,并且先将少部分流量切换到新版本应用上,同时在此期间对新版本的应用请求进行观察。在确认新版本没有问题后,再逐步将更大比例的流量切换到新版本上。这个过程的核心是可以对流量的流入转发规则进行配置,EDAS 的金丝雀发布能力,提供了多个版本同时在线的能力,并且提供了灵活的配置规则来给不同的版本进行流量分配。
部署在 EDAS Kubernetes 集群中的 Spring Cloud 微服务应用,在新版本发布的时候可以使用金丝雀发布进行小规模验证,验证通过后再全量升级。
首先,进入 EDAS 的应用部署页面,对我们要进行部署升级的应用进行发布,在这里我们选择金丝雀(灰度)发布。需要注意的是,对灰度发布的流量控制,当前只对非入口应用的 Dubbo 和 Spring Cloud 应用生效。所谓入口应用,即承接外部流量的第一个应用节点。并且若您的应用使用了 HPA、Rancher、Istio、或者依赖Deployment.Metadata.Name 或 Deployment.Metadata.Uid 的功能与配置等 K8s 原生功能或配置时,请勿使用灰度发布或分批发布。否则,应用部署之后,这些 K8s 原生功能或配置将出现异常。
在发布页面,可以选择通过上传 JAR 包或者填入 JAR 包地址的方式选择要进行发布的新版本应用部署包。
在选择好要进行发布的新版本应用部署包后,接下来进行发布策略的配置。这里分为两个部分:
在批次发布这里我们可以进行的配置有:
在下面的例子中,我们现在有 7 个 pod 应用实例,选择首批对 2 个实例进行灰度升级。在首批 2 个实例的灰度发布完成后,将剩下的 5 个实例分 3 个批次进行发布。这3个批次的批次间处理方式选择自动发布,在当前批次发布完成 30 分钟后自动进行下一批次的发布。同时,由于第 2 批次和第 2 批次内实例个数为两台,因此选择批次内两台实例部署间隔为 60 秒。在发布页面右侧可以对我们的发布策略配置信息进行预览。
目前支持 按内容灰度和 按比例灰度两种方式设置灰度规则。按请求内容进行灰度支持将请求内容符合指定灰度规则条件的流量作为灰度流量,进入到灰度实例中,例如,选择用户 ID 模 100 小于等于 40 的流量作为灰度流量进入灰度实例进行处理,而用户 ID 模 100 大于 40 的仍然进入非灰度实例进行处理,如图 1 所示。而按流量比例进行灰度是指,将指定比例的请求流量作为灰度流量进入灰度实例进行处理,例如指定 40% 的流量作为灰度流量,如图 2 所示。
(图1)
(图2)
按请求内容进行灰度可以进行下面指定参数的配置,来决定有哪些请求内容特征的流量将作为灰度流量进入灰度实例中。
按比例灰度即设置 流量比例,然后请求流量会按配置的比例被转发到当前的灰度分组中进行处理。
配置好发布配置后,即可开始进行灰度发布,EDAS 将先在指定的灰度分组中部署新版本应用,可在进入 变更详情页面查看部署进度和状态。如果在灰度发布时,发现新版本有问题,还可以终止变更并对应用进行回滚。
在灰度的发布过程中,可对应用进行监控,以监控灰度流量是否符合预期,同时可以对应用状态进行新老版本的对比。在当前批次的灰度流量验证完成后,在变更详情页面单击开始下一批,完成后续分批发布。如果在验证过程中,发现新版本应用有问题,可以在变更详情页面右上角单击立即回滚。在弹出的立即回滚对话框确认回滚的影响,然后单击回滚。
关于如何监控灰度流量,可以参考 EDAS文档《监控灰度流量》。
灰度发布后,在基本信息页面查看部署包是否为新部署的应用版本。在实例部署信息页面查看应用实例的运行状态是否为运行正常。
本章我们介绍了如何对 EDAS Kubernetes 集群上的 Spring Cloud 应用进行灰度发布,在灰度发布过程中,我们可以灵活地配置发布策略、灰度规则以及在发布过程中对流量及应用状态进行监控,并且提供了终止回滚等操作,最大程度地保证应用能够平滑地进行版本升级。接下来的文章中,我们将详细介绍在发布过程中如何对应用进行监控。
“ 阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。