ITPub博客

首页 > 数据库 > 数据库开发技术 > k8s更新策略-系列文章第一篇:蓝绿发布

k8s更新策略-系列文章第一篇:蓝绿发布

原创 数据库开发技术 作者:DevOps和k8s全栈技术 时间:2021-11-08 08:00:00 0 删除 编辑

 

10.1 什么是蓝绿部署?

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

开发新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。这时候,一共有两套系统在运行,正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。

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

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

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

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

 

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

 

10.2 蓝绿部署的优势和缺点

优点:

1、更新过程无需停机,风险较少

2、回滚方便,只需要更改路由或者切换DNS服务器,效率较高

缺点:

1、成本较高,需要部署两套环境。如果新版本中基础服务出现问题,会瞬间影响全网用户;如果新版本有问题也会影响全网用户。

2、需要部署两套机器,费用开销大

3、在非隔离的机器(Docker、VM)上操作时,可能会导致蓝绿环境被摧毁风险

4、负载均衡器/反向代理/路由/DNS处理不当,将导致流量没有切换过来情况出现

 

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

 

下面实验需要的镜像包在课件,把镜像压缩包上传到k8s的各个工作节点,docker load -i解压:

[root@xianchaonode2 ~]# docker load -i myapp-lan.tar.gz

[root@xianchaonode1 ~]# docker load -i myapp-lv.tar.gz

 

Kubernetes不支持内置的蓝绿部署。目前最好的方式是创建新的deployment,然后更新应用程序的service以指向新的deployment部署的应用

 

1.创建蓝色部署环境(新上线的环境,要替代绿色环境)

 

下面步骤在k8s的控制节点操作:

 

[root@xianchaomaster1 ~]# kubectl create ns blue-green

 

[root@xianchaomaster1 ~]# cat  lan.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: myapp-v1

  namespace:blue-green

spec:

  replicas: 3

  selector:

   matchLabels:

    app: myapp

    version: v1

  template:

   metadata:

    labels:

     app: myapp

     version: v1

   spec:

    containers:

    - name: myapp

      image:janakiramm/myapp:v1

     imagePullPolicy: IfNotPresent

      ports:

      - containerPort: 80

然后可以使用kubectl命令创建部署。

[root@xianchaomaster1~]# kubectl apply -f lan.yaml

 

验证部署是否成功:

[root@xianchaomaster1~]# kubectl get pods -n blue-green

 

显示如下:

NAME                        READY   STATUS   RESTARTS   AGE

myapp-v1-67fd9fc9c8-tsl92   1/1    Running   0          53s

myapp-v1-67fd9fc9c8-24tbp   1/1    Running   0          53s

myapp-v1-67fd9fc9c8-cw59c   1/1    Running   0          53s

 

2.创建绿色部署环境(原来的部署环境)

[root@xianchaomaster1 ~]# cat  lv.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: myapp-v2

  namespace:blue-green

spec:

  replicas: 3

  selector:

   matchLabels:

    app: myapp

    version: v2

  template:

   metadata:

    labels:

     app: myapp

     version: v2

   spec:

    containers:

    - name: myapp

      image:janakiramm/myapp:v2

     imagePullPolicy: IfNotPresent

      ports:

      -containerPort: 80

 

可以使用kubectl命令创建部署。

[root@xianchaomaster1~]# kubectl apply -f lv.yaml

 

创建前端service

[root@xianchaomaster1 ~]# cat service_lanlv.yaml

apiVersion: v1

kind: Service

metadata:

  name: myapp-lan

  namespace:blue-green

  labels:

    app: myapp

    version: v2

spec:

  type: NodePort

  ports:

  - port: 80

    nodePort: 30062

    name: http

  selector:

    app: myapp

version: v2

 

更新服务:

[root@xianchaomaster1~]# kubectl apply -f service_lanlv.yaml

 

在浏览器访问http://k8s-master节点ip:30062 显示如下:


 


修改service_lanlv.yaml 配置文件,修改标签,让其匹配到蓝程序(升级之后的程序)

[root@xianchaomaster1 ~]# cat service_lanlv.yaml

apiVersion: v1

kind: Service

metadata:

  name: myapp-lan

  namespace:blue-green

  labels:

    app: myapp

    version: v1

spec:

  type: NodePort

  ports:

  - port: 80

    nodePort: 30062

    name: http

  selector:

    app: myapp

    version: v1

 

更新资源清单文件:

[root@xianchaomaster1~]# kubectl apply -f service_lanlv.yaml

在浏览器访问http://k8s-master节点ip:30062 显示如下:


E
ND

微信公众号



作者微信:luckylucky421302



精彩文章推荐

K8s 常见问题

k8s超详细解读

K8s 超详细总结!

K8S 常见面试题总结

k8s控制器Deployment详细介绍:资源清单编写技巧

k8s安装隐患如何优化?从以下维度分享

使用k3s部署轻量Kubernetes集群快速教程

基于Jenkins和k8s构建企业级DevOps容器云平台

k8s原生的CI/CD工具tekton

K8S二次开发-自定义CRD资源

基于Jenkins+git+harbor+Helm+k8s+Istio构建DevOps流水线

基于k8s+Prometheus+Alertmanager+Grafana构建企业级监控告警系统

k8s开启临时容器ephemeral进行debug调试



           

                   点亮,服务器10年不宕机

 点击阅读原文 | 了解更多

原文作者:DevOps和k8s全栈技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
云计算架构师、阿里云开发者社区专家博主、腾讯云架构师北京同盟成员、Linux基金会开源软件学园2023、2024年度优秀讲师,在中国计算机学会(CCF)任职人工智能与模式识别委员和计算机应用委员、中国科普作家协会会员,清华大学出版社出版的畅销书《Kubernetes从入门到DevOps企业应用实战》作者。

注册时间:2017-10-15

  • 博文量
    127
  • 访问量
    61685