蓝绿发布原理

领券网 https://m.cps3.cn/

蓝绿发布本质上是希望能优雅无误的迭代应用,以便于使应用平稳提供服务。通常是不停老版本的同时对新版本进行先发布,然后确认无误后进行流量切换,即并行部署。
Kubernetes中可以通过deployment来部署一个蓝发布,然后通过控制service,来决定使用的版本。即通过label selector 将流量转发至对应的版本。

蓝绿发布实践

构建环境

基础Kubernetes环境

需要部署一个处于健壮状态的Kubernetes,部署Kubernetes可参考
Kubernetes_v1.20.0高可用部署

准备测试文件

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

部署蓝应用

创建Kubernetes deployment

root@master01:~/mystudy# cat mybluedp.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-blue-dplabels:dp: nginx-blue-dp
spec:replicas: 1selector:matchLabels:app: nginx-bluetemplate:metadata:labels:app: nginx-bluespec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentports:- containerPort: 80volumeMounts:- mountPath: /usr/share/nginx/html/index.htmlname: nginx-pv-tplreadOnly: Truevolumes: - name: nginx-pv-tplhostPath: path: /data/nginx/blue/index.htmltype: File
root@master01:~/mystudy# kubectl apply -f mybluedp.yaml

Kubernetes暴露蓝应用

root@master01:~/mystudy# vim mysvc.yaml
---
apiVersion: v1
kind: Service
metadata:name: nginx-svclabels:svc: nginx-svc
spec:type: NodePortports:- port: 80name: nginx-svcprotocol: TCPtargetPort: 80nodePort: 80selector:app: nginx-blue
root@master01:~/mystudy# kubectl apply -f mysvc.yaml

测试蓝应用

[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

部署绿应用

创建Kubernetes deployment

root@master01:~/mystudy# vim mygreendp.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-green-dplabels:dp: nginx-green-dp
spec:replicas: 1selector:matchLabels:app: nginx-greentemplate:metadata:labels:app: nginx-greenspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentports:- containerPort: 80volumeMounts:- mountPath: /usr/share/nginx/html/index.htmlname: nginx-pv-tplreadOnly: Truevolumes: - name: nginx-pv-tplhostPath: path: /data/nginx/green/index.htmltype: File
root@master01:~/mystudy# kubectl apply -f mygreendp.yaml

蓝绿切换

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

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

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

测试绿应用

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

总结

在进行蓝绿发布的过程中,对外服务一直处于可用状态,绿版本部署成功之后,所有请求还是蓝应用,当流量切换后,立刻迭代至绿版本,若需要回滚只需要将流量切回蓝应用即可。
通常建议对外成功发布绿应用后,蓝应用保持并行一段时间,然后根据业务情况进行释放。
同时,如上手动操作,可融合进相关开源devops项目中,从而实现自动化,也可使用相关厂商现有产品,若阿里云云效、开源的CODING等。

附032.Kubernetes实现蓝绿发布相关推荐

  1. 使用阿里云容器服务Kubernetes实现蓝绿发布功能

    背景 在发布应用时,经常需要先上线一个新版本,用较小的流量去测试一下该新版本的可用性.但是Kubernetes的ingress resource 并没有实现流量控制与切分的功能,导致针对同一个域名下的 ...

  2. k8s 使用Nginx Ingress实现灰度发布和蓝绿发布

    **导语:**云原生最佳实践系列,涵盖了灰度发布.弹性伸缩.集群迁移.网络通信.应用容器化改造等等场景,针对各行业面临的应用现状,提出最佳解决方案,并提供详细操作指导,希望对您有所帮助. Ingres ...

  3. 使用k8s实现灰度发布,金丝雀,蓝绿发布

    介绍# Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发布和测试. Nginx Annotations 支持以下 ...

  4. 金丝雀发布、滚动更新、蓝绿发布到底有啥区别

    根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异.技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节. 作为技术人员,大 ...

  5. PolarisMesh系列文章——灰度发布系列(蓝绿发布)

    蓝绿发布 什么是蓝绿发布 蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行). 旧版本可以称为蓝色环境,而新版本则可称为绿色环境.一旦生产 ...

  6. 解释什么是蓝绿发布?

    蓝绿发布(Blue-green release)是一种软件部署策略,主要用于应对新版本软件在生产环境中的测试和部署.这种策略将新版本软件分为两个阶段:蓝色阶段和绿色阶段.蓝色阶段通常在开发和测试环境中 ...

  7. 掌门1对1微服务体系Solar第1弹:全链路灰度蓝绿发布智能化实践

    掌门教育自2014年正式转型在线教育以来,秉承"让教育共享智能,让学习高效快乐"的宗旨和愿景,经历云计算.大数据.人工智能.AR/VR/MR以及现今最火的5G,一直坚持用科技赋能教 ...

  8. 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操

    背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...

  9. 一文看懂ingress nginx实现灰度发布和蓝绿发布过程

    背景信息 灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版 ...

  10. K8S的灰度发布、滚动更新、蓝绿发布

    K8S灰度发布.蓝绿发布.滚动更新 一.简介 1.1灰度发布(金丝雀发布) 金丝雀发布一般是先发1台机器,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试,国内 ...

最新文章

  1. Apache配置虚拟主机,全部指向一个目录
  2. 黑马程序员--学习while、do-while、for循环、try-catch的用法
  3. python的django框架与springboot_Python系统教学|为什么Django框架在Python开发很重要?...
  4. mysql——decimal类型与decimal长度
  5. oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结
  6. Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名...
  7. python多线程编程_python之多线程编程
  8. 微型计算机原理中ADC,微机原理实验-逐比较式ADC.doc
  9. 看了这份《算法中文手册》笔记,就再也不怕字节了~
  10. 百亿级日访问量的应用如何做缓存架构设计?
  11. C++_二维数组的动态申请内存3种方法
  12. centos查询 硬盘序列号查询_关于使用java执行shell脚本获取centos的硬盘序列号和mac地址...
  13. [已实现]暴力破解路由器管理密码
  14. Mac 在当前目录打开终端
  15. js 百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
  16. linux 自启动 快捷键,linux自定义快捷键、文件打开方式、文件快捷方式、启动器及开机启动...
  17. Springboot启动流程详解
  18. Eclipse超棒的主题,你不能错过!
  19. R语言做面板VAR例子
  20. 浅谈游戏业务遭遇攻击的防护措施

热门文章

  1. SVN更新报the working copy needs to be upgraded解决办法
  2. 如何把应用程序变成.exe执行文件
  3. 前端上半年工作总结、下半年工作计划
  4. canvas设置lineWidth属性,出现线条被fill覆盖问题。
  5. cad导入mysql_CAD插入一个数据库
  6. 右键文件一直转圈卡死
  7. 网络负载均衡器(NLB)
  8. KMP复习之poj 3461 Oulipo
  9. myeclipse的激活密钥,就是一段java的代码。
  10. Adobe Photoshop 2022v23.4.2.603茶末余香增强版