附032.Kubernetes实现蓝绿发布
蓝绿发布原理
领券网 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实现蓝绿发布相关推荐
- 使用阿里云容器服务Kubernetes实现蓝绿发布功能
背景 在发布应用时,经常需要先上线一个新版本,用较小的流量去测试一下该新版本的可用性.但是Kubernetes的ingress resource 并没有实现流量控制与切分的功能,导致针对同一个域名下的 ...
- k8s 使用Nginx Ingress实现灰度发布和蓝绿发布
**导语:**云原生最佳实践系列,涵盖了灰度发布.弹性伸缩.集群迁移.网络通信.应用容器化改造等等场景,针对各行业面临的应用现状,提出最佳解决方案,并提供详细操作指导,希望对您有所帮助. Ingres ...
- 使用k8s实现灰度发布,金丝雀,蓝绿发布
介绍# Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发布和测试. Nginx Annotations 支持以下 ...
- 金丝雀发布、滚动更新、蓝绿发布到底有啥区别
根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异.技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节. 作为技术人员,大 ...
- PolarisMesh系列文章——灰度发布系列(蓝绿发布)
蓝绿发布 什么是蓝绿发布 蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行). 旧版本可以称为蓝色环境,而新版本则可称为绿色环境.一旦生产 ...
- 解释什么是蓝绿发布?
蓝绿发布(Blue-green release)是一种软件部署策略,主要用于应对新版本软件在生产环境中的测试和部署.这种策略将新版本软件分为两个阶段:蓝色阶段和绿色阶段.蓝色阶段通常在开发和测试环境中 ...
- 掌门1对1微服务体系Solar第1弹:全链路灰度蓝绿发布智能化实践
掌门教育自2014年正式转型在线教育以来,秉承"让教育共享智能,让学习高效快乐"的宗旨和愿景,经历云计算.大数据.人工智能.AR/VR/MR以及现今最火的5G,一直坚持用科技赋能教 ...
- 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操
背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...
- 一文看懂ingress nginx实现灰度发布和蓝绿发布过程
背景信息 灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版 ...
- K8S的灰度发布、滚动更新、蓝绿发布
K8S灰度发布.蓝绿发布.滚动更新 一.简介 1.1灰度发布(金丝雀发布) 金丝雀发布一般是先发1台机器,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试,国内 ...
最新文章
- Apache配置虚拟主机,全部指向一个目录
- 黑马程序员--学习while、do-while、for循环、try-catch的用法
- python的django框架与springboot_Python系统教学|为什么Django框架在Python开发很重要?...
- mysql——decimal类型与decimal长度
- oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结
- Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名...
- python多线程编程_python之多线程编程
- 微型计算机原理中ADC,微机原理实验-逐比较式ADC.doc
- 看了这份《算法中文手册》笔记,就再也不怕字节了~
- 百亿级日访问量的应用如何做缓存架构设计?
- C++_二维数组的动态申请内存3种方法
- centos查询 硬盘序列号查询_关于使用java执行shell脚本获取centos的硬盘序列号和mac地址...
- [已实现]暴力破解路由器管理密码
- Mac 在当前目录打开终端
- js 百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
- linux 自启动 快捷键,linux自定义快捷键、文件打开方式、文件快捷方式、启动器及开机启动...
- Springboot启动流程详解
- Eclipse超棒的主题,你不能错过!
- R语言做面板VAR例子
- 浅谈游戏业务遭遇攻击的防护措施