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    #观察更新状态
相关推荐
alden_ygq24 分钟前
Kubernetes容器运行时:Containerd vs Docker
docker·容器·kubernetes
努力搬砖 ing31 分钟前
Docker疑难杂症解决指南
docker·容器·eureka
张青贤4 小时前
K8s中的containerPort与port、targetPort、nodePort的关系:
云原生·容器·kubernetes
云攀登者-望正茂5 小时前
AKS 支持 Kata Container容器沙盒 -预览阶段
容器·azure
撸码到无法自拔8 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
小马爱打代码10 小时前
K8S - GitLab CI 自动化构建镜像入门
ci/cd·kubernetes·gitlab
zhojiew10 小时前
istio in action之服务网格和istio组件
云原生·istio
hi,编程哥12 小时前
Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题
docker·容器·kubernetes
How_doyou_do13 小时前
项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
运维·docker·容器
代码的奴隶(艾伦·耶格尔)13 小时前
微服务!!
微服务·云原生·架构