kubernetes deployment金丝雀/灰度发布
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
金丝雀发布已经演示完成了。