滚动发布
在一套旧环境中有若干个副本,先添加一个新版本的服务,然后停一个老版本的服务,一点点向新版本滚动,直到完成全部升级。如果环境中有10台机器,只需要新增1台机器,就可以滚动起来了
优点:节省机器,平滑过渡
缺点:
蓝绿发布
环境维度上,蓝老绿新。核心是部署两套环境,两套环境的机器配置都一样,老环境部署老版本,新环境部署新版本,以整套环境为基本单位来进行流量分发,比如旧80%,新20%,然后逐步增加新环境的流量。
优点:抗压能力强,出现问题可以随时切回老环境
缺点:耗费资源
金丝雀发布
先部署少量新版本服务,然后采用流量的控制的方式,逐步验证,扩大范围,适用于迭代版本,而不是大版本更新。
金丝雀发布有时候会与灰度发布代表一个意思,总体来说都是小范围尝试,然后逐步扩大。但细说的话有用法层面的区别,金丝雀发布只是站在整体流量的维度进行分配,没有细分用户特征。金丝雀发布可以被视为灰度发布的一种实现方式,但灰度发布的范围更广,涵盖了更多逐步发布的策略。
灰度发布
区分用户群体特征,从所有用户中选出一部分进行灰度验证,然后逐步扩大。
1 | apiVersion: networking.k8s.io/v1 |
1 | apiVersion: networking.k8s.io/v1 |
更新上面的Ingress之后,我们在请求中加入不同的Header值,再次访问域名,有以下情况
canary-by-header
的设置,按照低优先级的canary-weight
设置,将请求按照权重分发给新旧版本。补充:
如果想要自定义Request Header中custom-key的value值,可以设置
1 | nginx.ingress.kubernetes.io/canary-by-header-value: custom-value |
这样也可以把符合该规则的请求发送到指定的Ingress。
基于用户请求的流量控制,不只可以在Request Header中添加键值,也可以在cookie中添加,具体的用法和canary-by-header类似:
1 | nginx.ingress.kubernetes.io/canary-by-cookie: custom-key |