附032.Kubernetes实现蓝绿发布
蓝绿发布原理
蓝绿发布本质上是希望能优雅无误的迭代应用,以便于使应用平稳提供服务。通常是不停老版本的同时对新版本进行先发布,然后确认无误后进行流量切换,即并行部署。
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/green
root@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-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
Kubernetes暴露蓝应用
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
测试蓝应用
[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-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
蓝绿切换
提示:部署绿应用后,若不进行流量切换,可保持蓝应用对外服务,同时观察绿应用是否部署运行正常。
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. 在 Kubernetes 中有 ...
- istio1.0 实现蓝绿发布(未完成)
istio1.0 实现蓝绿发布 环境: 192.168.0.91 master 192.168.0.92 node 第一步:安装k8s集群,参照:https://www.cnblogs.com/eff ...
- 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布
概述 如何在腾讯云 Kubernetes 集群实现蓝绿发布和灰度发布?通常要向集群额外部署其它开源工具来实现,比如 Nginx Ingress,Traefik 等,或者让业务上 Service Mes ...
- 一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点
作者 | 扬少 背景 目前,业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题.本文首先会对这些普遍的发布策略进行简单的原理解析,最后结合阿里云的云原生网关对这些发布策略进行 ...
- 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别(转)
出处:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroB ...
- 蓝 / 绿部署(Blue/Green) 金丝雀发布(Canary Release) 功能标记(Feature Flagging)
https://www.cnblogs.com/apanly/p/8784096.html 最终,我选择了 GraphQL 作为企业 API 网关 蓝 / 绿部署(Blue/Green) 金丝雀发布( ...
- Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署
渐进式交付是持续交付的下一步, 它将新版本部署到用户的一个子集,并在将其滚动到全部用户之前对其正确性和性能进行评估, 如果不匹配某些关键指标,则进行回滚. 这里有一些有趣的项目,使得渐进式交付在 Ku ...
- Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布
上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式.本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点. 1. Ingre ...
- 蓝绿部署、A/B测试以及灰度发布(金丝雀发布)
过去的10多年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用.在有关于“微服务”.“DevOps”.“Cloud-nat ...
随机推荐
- The best Fibonacci is achieved in js
The best Fibonacci is achieved in js the best realized by using js 斐波那契数列 "use strict"; /* ...
- 口罩 & 防毒面具 N95 & P100
口罩 & 防毒面具 N95 & P100 N95 口罩 < 防毒面具 P100 https://www.techritual.com/2020/01/30/210599/
- css 使用paint创建自定义css
See also: https://houdini.how/ https://github.com/una/extra.css#readme
- windows driver 简单的驱动和通信
sysmain.c #pragma once #pragma warning(disable: 4100) #include <ntifs.h> #include <ntddk.h& ...
- h5 localStorage和sessionStorage浏览器数据缓存
sessionStorage 会话数据,localStorage 没有过期时间 两个的API基本都一样的 基本的使用 // 保存一个数据 sessionStorage.setItem('key', ' ...
- c++指针练习
Pointers 在getchar处断点,断点后,调试->窗口->反汇编 查看数据 main #include <iostream> #include <Windows. ...
- Flutter: OrientationBuilder 根据方向更新UI
文档 api class _HomePageState extends State<HomePage> { @override Widget build(BuildContext cont ...
- django学习-15.ORM查询方法汇总
1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...
- CSS中Position属性static、absolute、fixed、relative
在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如下图所示 CSS中Position属性有四个可选值,它们分别是:static.absolute.fixed.rel ...
- java: 程序包javax.servlet.http不存在
下载好apache tomcat,将lib目录下的servlet-api.jar导入idea即可