蓝P 蓝绿发布原理发布实践构建环境基础环境需要部署架构

蓝绿发布原理

蓝绿发布本质上是希望能优雅无误的迭代应用,以便于使应用平稳提供服务。通常是不停老版本的同时对新版本进行先发布,然后确认无误后进行流量切换,即并行部署。

中可以通过来部署一个蓝发布,然后通过控制,来决定使用的版本。即通过 将流量转发至对应的版本。

蓝绿发布实践构建环境基础环境

需要部署一个处于健壮状态的蓝P,部署可参考

蓝P_仙人魔之仙界战役29无cd无限蓝p闪版_傲斗凌天2.62无cd无限蓝p闪版

附034..21.0高可用部署架构二

准备测试文件

root@master01:~/mystudy# mkdir -p /data/nginx/blue
root@master01:~/mystudy# mkdir -p /data/nginx/green
root@master01:~/mystudy# echo myblue > /data/nginx/blue/index.html
root@master01:~/mystudy# echo mygreen > /data/nginx/green/index.html

部署蓝应用创建

傲斗凌天2.62无cd无限蓝p闪版_仙人魔之仙界战役29无cd无限蓝p闪版_蓝P

root@master01:~/mystudy# vim mybluedp.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-blue-dp
  labels:
    dp: nginx-blue-dp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-blue
  template:
    metadata:
      labels:
        app: nginx-blue
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html/index.html
          name: nginx-pv-tpl
          readOnly: True
      volumes: 
      - name: nginx-pv-tpl
        hostPath: 
          path: /data/nginx/blue/index.html
          type: File
root@master01:~/mystudy# kubectl apply -f mybluedp.yaml

暴露蓝应用

root@master01:~/mystudy# vim mysvc.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  labels:
    svc: nginx-svc
spec:
  type: NodePort
  ports:
  - port: 80
    name: nginx-svc
    protocol: TCP
    targetPort: 80
    nodePort: 80
  selector:
    app: nginx-blue
root@master01:~/mystudy# kubectl apply -f mysvc.yaml

测试蓝应用

傲斗凌天2.62无cd无限蓝p闪版_蓝P_仙人魔之仙界战役29无cd无限蓝p闪版

[root@client ~]# curl -X GET http://172.16.10.31                #客户端测试
myblue
[root@client ~]# while true; do curl -X GET http://172.16.10.31 ; done

部署绿应用创建

root@master01:~/mystudy# vim mygreendp.yaml   
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-green-dp
  labels:
    dp: nginx-green-dp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-green
  template:
    metadata:
      labels:
        app: nginx-green
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html/index.html
          name: nginx-pv-tpl
          readOnly: True
      volumes: 
      - name: nginx-pv-tpl
        hostPath: 
          path: /data/nginx/green/index.html
          type: File
root@master01:~/mystudy# kubectl apply -f mygreendp.yaml 

蓝绿切换

傲斗凌天2.62无cd无限蓝p闪版_仙人魔之仙界战役29无cd无限蓝p闪版_蓝P

提示:部署绿应用后,若不进行流量切换,可保持蓝应用对外服务,同时观察绿应用是否部署运行正常。

root@master01:~/mystudy# kubectl edit svc nginx-svc 
……
apiVersion: v1
kind: Service
……
spec: 
……
  selector:
    app: nginx-green 
……

提示:通过的标签,将svc流量引向绿应用。

测试绿应用

仙人魔之仙界战役29无cd无限蓝p闪版_蓝P_傲斗凌天2.62无cd无限蓝p闪版

[root@client ~]# curl -X GET http://172.16.10.31                      
mygreen
[root@client ~]# watch curl -X GET http://172.16.10.31

001

总结

在进行蓝绿发布的过程中,对外服务一直处于可用状态,绿版本部署成功之后,所有请求还是蓝应用,当流量切换后,立刻迭代至绿版本,若需要回滚只需要将流量切回蓝应用即可。

通常建议对外成功发布绿应用后,蓝应用保持并行一段时间,然后根据业务情况进行释放。

同时,如上手动操作蓝P,可融合进相关开源项目中,从而实现自动化,也可使用相关厂商现有产品,若阿里云云效、开源的等。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发