Kubernetes 集群中通过 Deployment 实现灰度发布

随着互联网和移动互联网的快速发展,快速迭代和频繁上线的需求越来越高,因此,在实现产品发布时,如何灵活地实现版本的发布和回滚,就成为了业务开发和 DevOps 的重要课题。 Kubernetes 集群作为目前业内使用最广泛的容器化集群管理工具之一,在容器应用部署、更新、扩容等方面有着很强的支持能力。而通过 Deployment 实现灰度发布,也是 Kubernetes 集群中的一种常见的技术方案。

什么是灰度发布

灰度发布(Gray Release)又称灰度测试、灰度上线,是指在软件的发布阶段,将用户分成不同的群体进行测试或者发布。具体而言,就是将业务流量在产品的不同版本之间、不同分组和不同时间上进行分配和控制,以达到在不影响大规模用户的前提下实现业务运转的目标。这其中包含了很多的技术方案,其中通过 Kubernetes 集群中的 Deployment 实现灰度发布是目前较为流行的一种方案。

Kubernetes Deployment 简介

Deployment 是 Kubernetes 用来进行容器化应用的一种资源对象,它与 ReplicaSet 一起协作,实现了容器应用的部署、缩容、扩容等操作。在 Deployment 中,我们可以定义应用所需的 Pod 副本数、容器镜像、网络配置等等参数。当 Deployment 更新时,ReplicaSet 会自动执行滚动升级,按照配置更新一部分 Pod,直到所有 Pod 更新完成,从而实现灰度发布。

Kubernetes Deployment 中的灰度发布

在 Kubernetes 集群中,我们可以通过 Deployment 进行灰度发布。例如,一个应用有两个版本:版本 A 和版本 B。在灰度发布中,我们将流量分配到两种版本上,假设需要将流量由 100% 逐渐调整到 50% 的比例上,具体步骤如下:

  1. Creaet deployment and Ready RBAC:
  1. 创建 service:
  1. 创建 Ingress:
  1. 配置灰度发布策略:

在以上的配置中,我们通过添加了 canary-mode、canary-weight、canary-by-header-value 等 Annotation,来实现容器应用的灰度发布。其中 canary-mode 表示灰度发布模式,可以为 headers、cookie 或者 percentage。canary-weight 表示权重比例,canary-by-header-value 表示请求头中 app/version=a 的请求会被分配到 app-a 的版本中,对于请求头中没有该字段的请求,根据权重进行分配。

灰度发布的好处

灰度发布不仅可以在保证版本上线质量的同时,减小版本回退和灾难恢复时间,还可以有效降低灾难风险,确保应用的正常运转。另外,使用灰度发布,还可以通过较小的代价渐进式地提升业务运维效率,减少运维的压力,在快速迭代的应用场景下非常适用。

总结

灰度发布在实现版本的上线、更新、回滚等方面,有着很大的优势,对于业务开发和 DevOps 完全能够满足需求。通过 Kubernetes 集群中的 Deployment 实现灰度发布,不仅可以提高应用发布的质量和效率,同时也可以增加灰度发布的合法性和安全性,为业务运转带来更多的价值。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652a70c27d4982a6ebcc7071


纠错
反馈