kubernetes deployment金丝雀/灰度发布

发布时间 2023-03-22 21:11:49作者: 若-飞

1.金丝雀发布介绍

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B

蓝绿发布是部署一套新版本的环境,待充分测试验证以后再发布,这样比较消耗资源,所以可以先更新一部分pod或者一定比例的pod,新版本的pod运行一段时间后,如果没有报错,那么就可以逐步扩大新版本的pod的数量,并逐步完成更新。

所以可以先更新一部分pod或者一定比例的pod,新版本的pod运行一段时间后,如果没有报错,那么就可以逐步扩大新版本的pod的数量,并逐步完成更新

 

本文演示通过控制deployment部分更新进行金丝雀测试

2.准备工作

测试前已经有部署erp服务:

qiteck@server:~$ sudo kubectl get pods -l app=erp
NAME                   READY   STATUS    RESTARTS   AGE
erp-7845bd57cc-qblwn   1/1     Running   0          25h
erp-7845bd57cc-r92cp   1/1     Running   0          25h

它当前版本是:erp:1.6.1.0,等会新编译一个版本

3.编译新版本

sudo docker build -t erp:1.6.1.1 -f Dockerfile .

这样就有新的版本erp:1.6.1.1

4.触发更新并且暂停rollout

sudo kubectl set image deployment erp erp=erp:1.6.1.1 && kubectl rollout pause deployment erp

原本是2个副本的,然后起来一个新副本了,老副本也没有消失:

qiteck@server:/var/app/mage-erp/cicd/deploy/k8s/gateway$ sudo kubectl get pods -l app=erp -o wide
NAME                   READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
erp-6bfd6bcff8-b9dkd   1/1     Running   0          41m   10.244.1.213   server   <none>           <none>
erp-6bfd6bcff8-crfv5   1/1     Running   0          42m   10.244.1.212   server   <none>           <none>
erp-7845bd57cc-r92cp   1/1     Running   0          86s   10.244.1.214   server   <none>           <none>

实现了新老版本一起运行的效果,这样就可以对新版本进行测试了,这就是金丝雀发布了。

5.恢复rollout

sudo kubectl rollout resume deployment erp

把老的替换了:

最后会滚动更新为都是新版本

6.取消rollout

设置回之前的image即可把新的image的pod给取消:

sudo kubectl set image deployment erp erp=1.6.1.0

最后会滚动更新为都是老版本

7.查看历史创建的ReplicaSet

sudo kubectl get rs --sort-by=.metadata.creationTimestamp -o wide -l app=erp
按时间排序

qiteck@server:/var/app/mage-erp/cicd/deploy/k8s/gateway$ sudo kubectl get rs --sort-by=.metadata.creationTimestamp -o wide -l app=erp
NAME             DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                                              SELECTOR
erp-bdd746d78    0         0         0       66d     erp          erp:1.6.0.1     app=erp,pod-template-hash=bdd746d78
erp-6ff85c8bc5   0         0         0       66d     erp          erp:1.6.0.2     app=erp,pod-template-hash=6ff85c8bc5
erp-54b846c97f   0         0         0       14d     erp          erp:1.6.0.3     app=erp,pod-template-hash=54b846c97f
erp-7745d6d9fc   0         0         0       14d     erp          erp:1.6.0.4     app=erp,pod-template-hash=7745d6d9fc
erp-5d564666b    0         0         0       7d      erp          erp:1.6.0.5     app=erp,pod-template-hash=5d564666b
erp-664848fb75   0         0         0       7d      erp          erp:1.6.0.6     app=erp,pod-template-hash=664848fb75
erp-dbd96c74d    0         0         0       5d22h   erp          erp:1.6.0.7     app=erp,pod-template-hash=dbd96c74d
erp-67fddbc8cc   0         0         0       5d22h   erp          erp:1.6.0.8     app=erp,pod-template-hash=67fddbc8cc
erp-7584f58fcc   0         0         0       51m     erp          erp:1.6.0.9     app=erp,pod-template-hash=7584f58fcc
erp-6bfd6bcff8   0         0         0       51m     erp          erp:1.6.1.0     app=erp,pod-template-hash=6bfd6bcff8
erp-7845bd57cc   2         2         2       11m     erp          erp:1.6.1.1     app=erp,pod-template-hash=7845bd57cc

金丝雀发布已经演示完成了。