灰度发布、蓝绿发布、金丝雀发布等,本质上没有区别,都是版本渐进式发布+流量管理,所以也不要去纠结自己的发布方式到底算哪一种。硬要说,灰度发布是渐进式发布的统称,蓝绿发布和金丝雀发布是渐进式发布的具体方式,详细区别,在于蓝绿发布强调蓝绿环境(即新版和旧版服务)的平等性,流量拆分粒度较粗;金丝雀发布拥有更细粒度的流量拆分。
原理分析
灰度发布两个核心点:流量管理、发布流程管理。先来分析流量管理,不算Istio等组件新引入的流量管理策略,仅以Kubernetes本身的组件来看。一个常见的后端服务具有如下网络拓扑结构:ingress作为流量入口、转发到Service、Service转发到Deployment下辖的RS管理的Pod(严格来说,Service背后就直接是Pod了,但此处为方便说明控制关系,将Deployment和RS也加入了其中)。
这个结构有三种拆分流量的方式:按Service拆、按Deployment拆、按RS拆,如下
下面依次说明如何进行管理
-
按Service拆
- 发布新应用的Deployment、Service资源
- 利用Nginx Ingress Controll