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

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

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 显示如下:

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 开发者 容器
"Kubernetes的生死抉择:揭秘Pod容器重启策略如何决定应用命运的惊天大戏"
【8月更文挑战第20天】Kubernetes (k8s) 是一个强大的容器编排平台,其中Pod是最小的运行单元。Pod的重启策略确保服务连续性,主要有Always(总是重启)、OnFailure(失败时重启)和Never(从不重启)。默认策略为Always。根据不同场景,如Web服务、批处理作业或一次性任务,可以选择合适的策略。K8s还支持健康检查等高级机制来控制容器重启。合理配置这些策略对维护应用稳定性至关重要。
317 4
|
11月前
|
存储 运维 Kubernetes
K8s业务迁移最佳实践: 灵活管理资源备份与调整策略,实现高效简便的应用恢复
在当今快速变化的云原生领域,Kubernetes(K8s)集群的运维面临着诸多挑战,其中灾备与业务迁移尤为关键。ACK备份中心支持丰富的资源调整策略,在数据恢复阶段即可自动适配目标集群环境,确保业务无缝重启。
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
281 1
|
11月前
|
Kubernetes 监控 Java
如何设置 Kubernetes的垃圾回收策略为定期
如何设置 Kubernetes的垃圾回收策略为定期
|
11月前
|
Kubernetes Java 调度
Kubernetes中的Pod垃圾回收策略是什么
Kubernetes中的Pod垃圾回收策略是什么
|
Kubernetes 安全 API
Kubernetes系统安全-授权策略(authorization policy)
文章主要介绍了Kubernetes系统中的授权策略,包括授权模块的概述、RBAC授权模块的详细说明以及如何创建和管理角色(Role)和集群角色(ClusterRole)。
143 0
Kubernetes系统安全-授权策略(authorization policy)
|
Kubernetes Cloud Native 应用服务中间件
Kubernetes 自动伸缩策略:优化资源利用率
【8月更文第29天】在现代云原生环境中,应用的流量往往具有不可预测性。为了应对这种变化,Kubernetes 提供了多种自动伸缩机制来动态调整应用实例的数量和每个实例分配的资源。本文将深入探讨两种主要的自动伸缩工具:水平 Pod 自动伸缩器 (HPA) 和垂直 Pod 伸缩器 (VPA),并提供实际的应用示例。
341 1
|
Kubernetes 持续交付 容器
在K8S中,镜像的拉取策略有哪些?
在K8S中,镜像的拉取策略有哪些?
|
存储 Kubernetes 调度
在K8S中,影响Pod调度策略的有哪些?
在K8S中,影响Pod调度策略的有哪些?
|
Kubernetes 监控 测试技术
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?

热门文章

最新文章

推荐镜像

更多