K8S之实现业务的蓝绿部署

如何实现蓝绿部署

  • 什么是蓝绿部署?
  • 蓝绿部署的优势和缺点
    • 优点
    • 缺点
  • 通过k8s实现线上业务的蓝绿部署

什么是蓝绿部署?

部署两套系统:一套是正在提供服务系统,标记为 “绿色” ;另一套是准备发布的系统,标记为 “蓝色”。
两套系统都是功能完善的、正在运行的系统,只是系统版本和对外服务情况不同。
要用开发的新版本替换线上的旧版本,除了已上线运行的系统之外,再搭建一个使用新版本代码的全新系统。这时候,一共有两套系统在运行,正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。
在这里插入图片描述
蓝色系统 用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。(ps. 两套系统没有耦合的时候才能百分百保证不干扰)

蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统。
在这里插入图片描述
切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。

当确信对外提供服务的蓝色系统工作正常,不对外提供服务的绿色系统已经不再需要的时候,蓝色系统正式成为对外提供服务系统,成为新的绿色系统。 原先的绿色系统可以销毁,将资源释放出来,用于部署下一个蓝色系统。

蓝绿部署的优势和缺点

优点

  • 更新过程无需停机,风险较少
  • 回滚方便,只需要更改路由或者切换DNS服务器,效率较高

缺点

  • 成本较高,需要部署两套环境。
  • 在非隔离的机器(Docker、VM)上操作时,可能会导致蓝绿环境被摧毁风险
  • 负载均衡器/反向代理/路由/DNS处理不当,将导致流量没有切换过来情况出现

通过k8s实现线上业务的蓝绿部署

方式:创建deployment,然后更新应用程序的service以指向对应deployment部署的应用

实践说明:将项目老版本(v1)代码和新版本(v2)代码做成不同的镜像。
实践步骤:

1、创建绿色部署环境(基于v1版本做的镜像)

通过deployment来创建运行pod

vim  green.yaml

编写Deployment资源文件

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-v1namespace: blue-green
spec:replicas: 3selector:matchLabels:app: myappversion: v1template:metadata:labels:app: myappversion: v1spec:containers:- name: myappimage: janakiramm/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

使用kubectl命令创建部署

1.1、先创建命名空间

kubectl create ns blue-green

1.2、创建资源服务

kubectl apply -f green.yaml

查看pod运行情况

kubectl get pods -n blue-green

在这里插入图片描述

kubectl get pods -n blue-green --show-labels

在这里插入图片描述

1.3、创建前端Service

编写Service资源文件

vim service-blue-green.yaml 
apiVersion: v1
kind: Service
metadata:name: myapp-blue-greennamespace: blue-greenlabels:app: myapp
spec:type: NodePortports:- port: 80nodePort: 30062name: httpselector:app: myappversion: v1

更新服务

kubectl apply -f service-blue-green.yaml

查看Service

kubectl get svc -n blue-green

在这里插入图片描述

在浏览器访问 “ http://k8s-master1节点的IP:30062 ” 显示如下:
在这里插入图片描述

2、创建蓝色部署环境(基于v2版本做的镜像,即新上线的环境,要替代绿色环境)

通过deployment来创建运行pod

vim  blue.yaml

编写Deployment资源文件

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-v2namespace: blue-green
spec:replicas: 3selector:matchLabels:app: myappversion: v2template:metadata:labels:app: myappversion: v2spec:containers:- name: myappimage: janakiramm/myapp:v2imagePullPolicy: IfNotPresentports:- containerPort: 80

使用kubectl命令创建部署

kubectl apply -f blue.yaml

验证部署是否成功

kubectl get pods -n blue-green

在这里插入图片描述

修改 service-blue-green.yaml 配置文件(即修改标签),让其匹配到蓝程序(即升级之后的版本)

vim service-blue-green.yaml
apiVersion: v1
kind: Service
metadata:name: myapp-blue-greennamespace: blue-greenlabels:app: myapp
spec:type: NodePortports:- port: 80nodePort: 30062name: httpselector:app: myappversion: v2 # 修改此处,由 v1 改为 v2

更新服务

kubectl apply -f service-blue-green.yaml

查看Service

kubectl get svc -n blue-green

在这里插入图片描述

在浏览器访问 “ http://k8s-master1节点的IP:30062 ” 显示如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除指定的数

删除指定的数 题目描述:解法思路:解法代码:运行结果: 题目描述: 先输入10个整数存放在数组中,再输入⼀个整数n,删除数组中所有等于n的数字,数组中剩余的数组保证数组的最前面&#…

向爬虫而生---Redis 探究篇6<Redis的Bigkey问题介绍>

前言: 随着数据规模的增长,Redis的BigKey问题也开始显现。 BigKey问题主要指的是存储了大量数据的key,这可能给Redis的性能和可用性带来负面影响。当一个key的数据量过大时,会占用宝贵的内存资源,拖慢Redis的响应速度。此外,存储和恢复这些BigKey也会变得困难和耗时,增…

SpringBoot项目如何添加全局接口上下文

1. 定义Spring Boot应用的路由 首先,确保您的Spring Boot应用有一个统一的路由前缀。例如,可以在application.properties或application.yml配置文件中使用server.servlet.context-path属性来定义所有请求的基础路径。 # application.properties server…

vue基础教程(4)——深入理解vue项目各目录

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 总览2. node_modules3.public4.src5.assets6.components7.router8.stores9.views10.App.vue11.main.js12.index.html 专栏简介 本系列文章由浅入深,从基础知识到实战…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

AD20软件使用指南:拼板操作与Gerber文件生成详解

文章目录 一、前言二、拼板1.创建新的PCB,用于放置拼板文件2.放置拼板阵列3.设置阵列信息4.V割拼板,放置工艺边和定位孔和光点5.完成拼板 三、生成Gerber文件1.输出Gerber文件2.选择单位和格式3.选择输出的图层4.生成Gerber文件5.生成钻孔文件 四、上传嘉…

01.AJAX 概念和 axios 使用

01.AJAX 概念和 axios 使用 1. 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿…

使用Pandas 玩转透视表(pivot_table)

也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为 pivot_table。虽然pivot_table非常有用,但是我发现为了格式化输出我所需要的内容,经常需要记住它的使用语法。所以,本文将重点…

腾讯云学生服务器多少钱?怎么申请?

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

微信小程序(五十一)页面背景(全屏)

注释很详细,直接上代码 上一篇 新增内容: 1.页面背景的基本写法 2.去除默认上标题实习全屏背景 3. 背景适配细节 源码: index.wxss page{/* 背景链接 */background-image: url(https://pic3.zhimg.com/v2-a76bafdecdacebcc89b5d4f351a53e6a_…

python 截取字符串string.split

目录 作用语法只要第一个值获得第3个值遍历 作用 根据某个符号对数据进行截取 从而获得自己想要的内容 语法 使用’string.split’ 方法 对字符串’123/abc/BPYC’ 以 ‘/’ 进行截取 string "123/abc/BPYC" substring string.split("/") print(subs…

【目标分类图像增强方法】

图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理: 几何变换: 旋转(Rotation&#…

【排序】435. 无重叠区间

435. 无重叠区间 方法概述 整体解决方案分为两个部分: eraseOverlapIntervals(int[][] intervals):这是主要方法,用于计算并返回需要移除的区间数量。intervalSchedule(int[][] intvs):这个辅助方法用于通过贪心算法计算出最大…

【SEO 初学者指南】搜索引擎的工作原理:抓取、索引、排名

了解搜索引擎的工作原理,从抓取和索引到排名和惩罚,以及优化和故障排除技巧。 搜索引擎是如何工作的? 搜索引擎通过抓取、索引和排名互联网内容来工作。首先,爬虫通过网络爬虫发现在线内容。然后,索引分析内容并将其…

Spring核心原理

目录 IOCxml配置创建对象xml配置注入属性自动装配引入外部属性文件注解创建对象注解注入属性 AOP方式一 : 通过JDK接口实现方式二 : 通过AspectJ实现AOP JdbcTemplateSpring事务管理整合Mybatis实现一实现二 WebFlux函数式编程 Spring是一个开放源代码的JavaEE设计层面框架&…

C++:拷贝构造函数

1.概念 在现实生活中,可能存在一个与你一样的自己,我们称之为双胞胎。那在创建对象的时候,可否创建一个与已存在对象一模一样的新对象呢?答案是可以的,这就要通过拷贝构造函数来实现了。 拷贝构造函数:只有…

微服务基础

目录 一、单体架构 二、分布式架构 三、微服务 四、微服务结构 五、SpringCloud 六、服务拆分 七、远程调用 一、单体架构 单体架构就是将业务的所有功能都集中在一个项目中进行开发,并打成一个包进行部署。 他的优点很明显,就是架构简单&#xff…

C++的类和对象(四):拷贝构造函数

目录 拷贝构造函数 特性 自定义类型的传值传参和传引用传参对比 赋值运算符重载 拷贝构造函数 基本概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在创建一个已存在对象一模一样的新对象时…

MySQL运维实战之备份和恢复(8.4)xtrabackup恢复全量备份

作者:俊达 恢复全量备份大致可以分成以下几步:解压备份文件、prepare备份文件、将数据copy到目标实例相关目录、启动数据库实例。 解压文件 如果备份时使用了xbstream,需要先解压备份文件。 我们备份时使用了–streamxbstream和gzip压缩&am…

数据结构:AVL树

目录 1、AVL树的概念 2、二叉搜索树的功能与实现 1、AVL树节点定义 2、AVL树的插入 3、AVL树的旋转操作 1、左旋 2、右旋 3、左右旋 4、右左旋 3、AVL树完整代码实现 1、AVL树的概念 在前面的文章中,我们学过了二叉搜索树,二叉搜索树虽可以缩短查…