K8S学习之基础十七:k8s的蓝绿部署

news2025/3/9 13:37:43

蓝绿部署概述

​ 蓝绿部署中,一共有两套系统,一套是正在提供服务的系统,一套是准备发布的系统。两套系统都是功能完善、正在运行的系统,只是版本和对外服务情况不同。

​ 开发新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。 这时候,一共有两套系统在运行(蓝绿自定义),正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。
在这里插入图片描述

蓝色系统不对外提供服务,用来做什么呢?

​ 用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。(注意,两套系统没有耦合的时候才能百分百保证不干扰)**

蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统:

在这里插入图片描述

切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。

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

蓝绿部署的优缺点

优点:

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

缺点:

  1. 成本高,需要两套环境,开销大
  2. 如果新版本有问题会影响全网用户

蓝绿部署示例

  1. 创建service,关联到myapp上

    vi blue-green-service.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-v1
    spec:
      replicas: 10
      selector:
        matchLabels:
          app: myapp
          version: v1
      template:
        metadata:
          labels:
            app: myapp
            version: v1
        spec:
          containers:
          - name: myapp
            image: 172.16.80.140/myapp/myapp:v1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
    
  2. 创建pod,使用版本 myapp:v1,作为蓝版本

    vi blue.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-v1
    spec:
      replicas: 10
      selector:
        matchLabels:
          app: myapp
          version: v1
      template:
        metadata:
          labels:
            app: myapp
            version: v1
        spec:
          containers:
          - name: myapp
            image: 172.16.80.140/myapp/myapp:v1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
    

    在这里插入图片描述

  3. 浏览器访问集群主机ip:30080,结果均为蓝色,即v1版本
    在这里插入图片描述

  4. 创建pod,使用版本 myapp:v2,作为绿版本

    vi green.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-v2
    spec:
      replicas: 10
      selector:
        matchLabels:
          app: myapp
          version: v2
      template:
        metadata:
          labels:
            app: myapp
            version: v2
        spec:
          containers:
          - name: myapp
            image: 172.16.80.140/myapp/myapp:v2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
    

    在这里插入图片描述

浏览器访问主机ip:30080,结果为蓝色或绿色,即v1和v2版本都在使用
5. 访问集群主机ip:30080,会发现蓝绿不定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6. 使用命令查看路由 ipvsadm,service路由到了所有的pod

ipvsadm
TCP  mast01:31180 rr
TCP  mast01:30080 rr
  -> 10.244.140.76:http           Masq    1      0          0         
  -> 10.244.140.77:http           Masq    1      0          0         
  -> 10.244.140.78:http           Masq    1      0          0         
  -> 10.244.140.79:http           Masq    1      0          0         
  -> 10.244.140.80:http           Masq    1      0          0         
  -> 10.244.140.81:http           Masq    1      0          0         
  -> 10.244.140.82:http           Masq    1      0          0         
  -> 10.244.140.83:http           Masq    1      0          0         
  -> 10.244.140.84:http           Masq    1      0          0         
  -> 10.244.140.85:http           Masq    1      0          0         
  -> 10.244.196.140:http          Masq    1      0          0         
  -> 10.244.196.141:http          Masq    1      0          0         
  -> 10.244.196.142:http          Masq    1      0          0         
  -> 10.244.196.143:http          Masq    1      0          0         
  -> 10.244.196.144:http          Masq    1      0          0         
  -> 10.244.196.145:http          Masq    1      0          0         
  -> 10.244.196.146:http          Masq    1      0          0         
  -> 10.244.196.147:http          Masq    1      0          0         
  -> 10.244.196.148:http          Masq    1      0          0         
  -> 10.244.196.149:http          Masq    1      0          0         
TCP  mast01:31180 rr
TCP  mast01:https rr

在这里插入图片描述
在这里插入图片描述
7. 如果测试业务一切正常,就说明v2版本也满足需要,接下来就可以停掉v1版本了

kubectl delete -f blue.yaml
kubectl get pods

在这里插入图片描述
浏览器访问也只有绿色了,即v2版本
8. 如果运行一段时间v2版本有问题,还可以直接按以上方法回退到v1版本

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

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

相关文章

【网络】TCP常考知识点详解

TCP报文结构 TCP报文由**首部(Header)和数据(Data)**两部分组成。首部包括固定部分(20字节)和可选选项(最多40字节),总长度最大为60字节。 1. 首部固定部分 源端口&…

LeetCode1137 第N个泰波那契数

泰波那契数列求解:从递归到迭代的优化之路 在算法的世界里,数列问题常常是我们锻炼思维、提升编程能力的重要途径。今天,让我们一同深入探讨泰波那契数列这一有趣的话题。 泰波那契数列的定义 泰波那契序列 Tn 有着独特的定义方式&#xf…

六十天前端强化训练之第十四天之深入理解JavaScript异步编程

欢迎来到编程星辰海的博客讲解 目录 一、异步编程的本质与必要性 1.1 单线程的JavaScript运行时 1.2 阻塞与非阻塞的微观区别 1.3 异步操作的性能代价 二、事件循环机制深度解析 2.1 浏览器环境的事件循环架构 核心组件详解: 2.2 执行顺序实战分析 2.3 Nod…

利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统

化工园区作为化工产业的重要聚集地,其安全问题一直是社会关注的焦点。传统的人工监控方式效率低下且容易出现疏漏,已经难以满足日益增长的安全管理需求。 基于EasyCVR视频汇聚平台构建的化工园区视频AI智能化应用方案,能够有效解决这些问题&…

【VUE2】第三期——样式冲突、组件通信、异步更新

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …

深度学习分类回归(衣帽数据集)

一、步骤 1 加载数据集fashion_minst 2 搭建class NeuralNetwork模型 3 设置损失函数,优化器 4 编写评估函数 5 编写训练函数 6 开始训练 7 绘制损失,准确率曲线 二、代码 导包,打印版本号: import matplotlib as mpl im…

在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持

由于移动端GPU规模有限,厂商并没有实现完整的OpenGL特性,而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台,最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备&#xff…

基于Spring Boot的学院商铺管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

os-copilot安装和使用体验测评

简介: OS Copilot是阿里云基于大模型构建的Linux系统智能助手,支持自然语言问答、命令执行和系统运维调优。本文介绍其产品优势、功能及使用方法,并分享个人开发者在云服务器资源管理中的实际应用体验。通过-t/-f/管道功能,OS Cop…

Geo3D建筑材质切换+屋顶纹理

一、简介 基于Threejs开发封装建筑渲染管线,利用简单二维建筑矢量面轮廓程序化生成3D建筑,支持材质一键切换,支持多样化建筑墙面材质和屋顶材质,支持建筑透明,支持地形高程适配,支持按空间范围裁剪挖洞等。…

【GPT入门】第9课 思维树概念与原理

【GPT入门】第9课 思维树概念与原理 1.思维树概念与原理2. 算24游戏的方法 1.思维树概念与原理 思维树(Tree of Thought,ToT )是一种大模型推理框架,旨在解决更加复杂的多步骤推理任务,让大模型能够探索多种可能的解决…

栈概念和结构

文章目录 1. 栈的概念2. 栈的分类3. 栈的实现(数组栈)3.1 接口设计(Stack.h)3.2 接口实现(Stack.c)1)初始化销毁2)栈顶插入删除3)栈顶元素、空栈、大小 3.3 完整代码Stac…

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframework.b…

VS Code连接服务器教程

VS Code是什么 VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由微软推出的免费、开源、跨平台的代码编辑神器。VS Code 支持 所有主流操作系统&#xff0c;拥有强大的功能和灵活的扩展性。 官网&#xff1a;https://code.visualstudio.com/插件市场&#xff1…

Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...

问题描述 3月6日&#xff0c;在使用Windsuf 时&#xff0c;遇到以下网络连接错误&#xff1a; [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…

docker中kibana启动后,通过浏览器访问,出现server is not ready yet

问题&#xff1a;当我在浏览器访问kibana时&#xff0c;浏览器给我报了server is not ready yet. 在网上试了很多方法&#xff0c;都未能解决&#xff0c;下面是我的方法&#xff1a; 查看kibana日志&#xff1a; docker logs -f kibana从控制台打印的日志可以发现&#xff…

更多文章请查看

更多文章知识请移步至下面链接&#xff0c;期待你的关注 如需查看新文章&#xff0c;请前往&#xff1a; 博主知识库https://www.yuque.com/xinzaigeek

(十 九)趣学设计模式 之 中介者模式!

目录 一、 啥是中介者模式&#xff1f;二、 为什么要用中介者模式&#xff1f;三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…

博弈论算法

一、减法游戏 初始有一个数 n。 两个玩家轮流操作&#xff0c;每次可以减去 1 到 9 之间的任意整数。 将数减到 0 的玩家获胜。 可以发现规律&#xff1a; 减法游戏只需要判断当前数取模是否为0&#xff0c;即可快速判断胜负。 例题&#xff1a; Leetcode 292. Nim 游戏 …

【网络】HTTP协议、HTTPS协议

HTTP与HTTPS HTTP协议概述 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;工作在OSI顶层应用层&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信,B/S模式 无状态&#xff1a;每次请求独立&#xff0c;服务器不保存客户端状态&#xff08;通…