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    #观察更新状态
相关推荐
张忠琳5 分钟前
【client-go v0.36.1】LeaderElection 深度分析(上篇)— 模块定位、结构、LeaderElector 核心逻辑
云原生·kubernetes·client-go·leaderelection
牛奶咖啡1342 分钟前
k8s容器编排技术实践——K8s中服务发现ingress、ingress controller 应用实践
kubernetes·服务发现·ingress·ingress-nginx·部署ingress-nginx·部署ingress的三种方法·ingress的服务发现原理
l1t1 小时前
DeepSeek总结的使用 Docker 对 PostgreSQL 进行 Beta 测试
docker·postgresql·容器
张忠琳2 小时前
【client-go v0.36.1】tools/cache 深度分析(中篇)— 辅助组件逐行解析
云原生·kubernetes·cache·informer·client-go
暮云星影6 小时前
个人总结 docker 常用命令
docker·容器
张忠琳7 小时前
【client-go v0.36.1】WorkQueue 深度分析(下篇)— 限流队列、限流器、指标、并行化
云原生·kubernetes·informer·workqueue·client-go
极客先躯7 小时前
高级java每日一道面试题-2026年01月19日-实战篇[Docker]-如何配置镜像仓库的垃圾回收 (GC)?
java·运维·docker·容器
日取其半万世不竭8 小时前
low-memory-server-swap-20260601
docker·容器·https
暮云星影8 小时前
个人总结 docker搭建PDF操作工具
docker·容器·pdf
zhoupenghui1688 小时前
AI大模型应用部署之Flask框架使用
运维·python·docker·容器·flask·flask框架