原理:
(1)部署旧版本(先将副本数设置为3,随着新版本的创建,将副本逐渐调低到0)
(2)部署新版本(先将副本数设置为1,随着新版本的稳定,将副本逐渐调高到3)
(3)修改副本数量
将旧的副本数量手动修改从3-0,与此同时,将新的副本数量从1-3。
deployment实现灰度发布:
AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。
灰度/金丝雀(Canary)部署简介:
金丝雀发布也叫灰度发布,是指在黑与白之间,能够平滑度过的一种发布方式,恢复发布是增量发布的一种类型,灰度发布是在原有版本可用的情况下,同时部署一个新版本应用作为"金丝雀"(小白鼠),测试新版本的性能和表现,以保障整个体系稳定的情况下,尽早发现,调整问题。
"金丝雀"的由来: 17世纪,英国矿工工人发现,金丝雀对瓦斯这种气体十分敏感,空气哪怕有极其微量的瓦斯,金丝雀也会停止歌唱,而当瓦斯超过一定限度时,虽然人类毫无察觉,金丝雀却早已毒发身亡,当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为"瓦斯检测指标",以便在危险情况下紧急撤离。
- 实现机制:
- 1.部署当前版本,使用多副本;(最开始是3个副本)
- 2.部署service,匹配一个label标签;
- 3.部署新版本(使用deployment名称,但是label标签和之前保持一致),新版本runing之后service会自动匹配label并将pod添加service的endpoints接收客户端请求;(最开始)
- 4.灰度版本测试没有问题,将灰度版本的pod副本数逐渐增加为生产数量;
- 5.将旧版本pod逐渐调低至为0,此时数流量将全部转发至新版本;
灰度发布实战案例:
(1)部署旧版本(先将副本数设置为3,随着新版本的创建,将副本逐渐调低到0)
cat 01-old.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: baimei-old
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: myweb
image: harbor.baimei.com/baimei-apps/apps:v1
---
kind: Service
apiVersion: v1
metadata:
name: baimei-web-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
selector:
app: web
kubectl apply -f 01-old.yaml
(2)部署新版本(先将副本数设置为1,随着新版本的稳定,将副本逐渐调高到3)
cat 02-new.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: baimei-new
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: myweb
image: harbor.baimei.com/baimei-apps/apps:v2
kubectl apply -f 02-new.yaml
(3)修改副本数量
将旧的副本数量手动修改从3-0,与此同时,将新的副本数量从1-3。
kubectl edit deployments 01-old.yaml
kubectl edit deployments 02-new.yaml
(4)测试访问
while true ; do sleep 0.5;curl 10.0.0.233:30080; done
这样发布,不影响业务访问的。
欢迎来撩 : 汇总all