k8s的三种发布方式

三种常见的发布方式

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。而最为常见三种发布方式分别为:蓝绿发布,灰度发布和滚动发布。

三种发布方式的最终目的都是为了减小或避免对应用项目更新时,对客户使用的影响。

蓝绿发布

首先将所有的应用服务集群为蓝绿两组,首先将绿组的集群从负载均衡中移除,蓝组则继续对用户提供服务。此时移除的绿组进行服务的升级,等升级完毕后,再从新将绿组接入到负载均衡中为用户提供服务。

再把蓝组进行移除,进行服务升级,升级完毕后再接入到负载均衡的集群中。此时整个项目集群得进行升级完毕,我们将此称为蓝绿发布

蓝绿发布的特点:

1.一旦出现问题,问题的影响范围很大

2.发布策略简单

3.基于现在的云计算和微服务,用户无感知。

缺点:

在发布升级的过程之中,只有一部分集群在对外提供服务,可能会是集群的负载能力下降,相应变慢,需要注意给集群增加负载能力(一般来说没什么特殊需要)

短时间内可能会浪费一定的资源成本

金丝雀发布(灰度发布):

先发布一个试用版(测试服)

deployment控制器创建的服务,才可以使用这种发布方式,滚动更新,暂停。发布的过程中,只有一部分的pod先升级,其他的pod还是处于老的版本。只有一部分用户可以访问新的版本,绝大多数用户还是在老版本。确定问题之后,再把剩下的老版本,升级成新版本,把暂停取消,继续发布。如果有问题可以立即回滚。暂停不是回滚,一旦取消暂停只能全部升级完毕之后,再回滚。

灰度发布 特点:

1.自动化要求比较高,对运维人员的要求很高。

2.方便发现问题及时解决。影响范围比较小

3.用户无感知,可以实现一个平滑过渡。比较节约资源。

4.发布策略比较复杂。

5.不易回滚,必须等到全部发布成功之后才能回滚。

滚动更新

滚动发布就是刚刚我们在k8s中使用的项目服务更新方式。滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本

特点

  • 用户无感知,平滑过渡;

  • 节约资源。

缺点

  • 部署时间慢,取决于每阶段更新时间;

  • 发布策略较复杂;

  • 无法确定OK的环境,不易回滚。

三种方式的对比总结

  • 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。

  • 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。

  • 滚动发布:按批次停止老版本实例,启动新版本实例。

灰度发布演示

复制代码
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
   
kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort  #先创建资源并创建3个副本
 
kubectl set image deployment nginx nginx=nginx:1.16 && kubectl rollout pause deployment nginx      #更新并暂停
 
kubectl rollout status deployment nginx    #观察更新状态
相关推荐
运维行者_8 分钟前
深入解析 Docker 监控:核心指标完整清单
运维·服务器·网络·数据库·docker·容器·eureka
礼拜天没时间.12 分钟前
容器网络配置——从互联到自定义桥接
运维·网络·docker·容器·centos
中草药z1 小时前
【Linux】拆解 Linux 容器化核心:Namespace 隔离 + cgroups 资源控制,附 LXC 容器生命周期实战
运维·docker·容器·虚拟化·namespace·lxc·cgroups
懒神降世2 小时前
基于iVentoy的PXE服务器的部署实战指南
运维·服务器·开发语言·云原生·vmware·openeuler·iventoy
江畔何人初2 小时前
LVM中物理卷、物理区块、卷组、逻辑卷的概念以及它们之间的关系
linux·运维·云原生·容器·kubernetes
彷徨的蜗牛2 小时前
架构进阶:微服务拆分的“生死线”
微服务·云原生·架构
egzosn2 小时前
Eureka 的介绍和使用
云原生·eureka
canjun_wen2 小时前
Nacos基础入门 03,Nacos vs Eureka vs Consul:主流服务注册中心深度对比测评
云原生·eureka·consul
liu****3 小时前
4.镜像仓库详解
c++·docker·云原生·容器·kubernetes·镜像\
程序员阿明3 小时前
docker 搭建iotdb集群2版本的
docker·容器·iotdb