当前位置: 首页 > article >正文

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

蓝绿部署概述

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

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

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

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

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

在这里插入图片描述

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

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

蓝绿部署的优缺点

优点:

  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.kler.cn/a/576943.html

相关文章:

  • 分布式光伏发电的发展现状与前景
  • 【多模态感知的神经科学启示】
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(二)
  • deepin安装rust
  • 2025-03-08 学习记录--C/C++-PTA 习题10-2 递归求阶乘和
  • docker指令整理
  • 图片分类实战:食物分类问题(含半监督)
  • 【统计至简】【入门测试3】协方差矩阵的Cholesky分解
  • Qwen架构与Llama架构的核心区别
  • Sass进阶之路:@forward 的可见性控制与变量覆盖
  • Linux 配置静态 IP
  • spring websocket 介绍
  • create_react_agent(model, tools) 和 graph_builder.add_conditional_edges 的联系和区别
  • 基于Django的协同过滤算法养老新闻推荐系统的设计与实现
  • 初识Linux(13) 由基础IO知识简易封装stdio.h中的FILE
  • Unity AI 技术浅析(二)
  • 【时时三省】(C语言基础)赋值语句
  • 大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景
  • c#面试题整理
  • QT登录系统界面