51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

使用 K8S 的deployment实现灰度发布案例以及原理

原理:

(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

这样发布,不影响业务访问的。

赞(1)
未经允许不得转载:工具盒子 » 使用 K8S 的deployment实现灰度发布案例以及原理