Kubernetes中怎么利用Deloyment实现滚动更新


本篇文章为大家展示了Kubernetes中怎么利用Deloyment实现滚动更新,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。当kubernetes集群中的某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动并提供服务。如果业务集群规模较大时,这个工作就变成了一个挑战,而且先全部了停止,再逐步升级的方式会导致服务较长时间不可用。kubernetes提供了滚动更新(rolling-update)的方式来解决上述问题。简单来说,滚动更新就是针对多实例服务的一种不中断服 香港云主机务的更新升级方式。一般情况下,对于多实例服务,滚动更新采用对各个实例逐个进行单独更新而非同一时刻对所有实例进行全部更新的方式。对于k8s集群来说,rolling update就是指一次仅更新一个或者一组pod,而不是在同一时刻将一个Deployment管理的所有pod shutdown,避免业务中断。新版本的Kubernetes推荐用Deployment替代ReplicationController,在Deployment这个概念下在保持Pod副本数上实际发挥作用的是隐藏在背后的Replica Set。使用kubectl rolling-update命令的方式,主要是针对使用RC创建的pods。
先来看下面一个示例,创建一个包含4个nginx副本的RC nginx-demo-v1-rc.yml:创建一个service,nginx-demo-svc.yml内容如下:创建rc和service:创建完成以后,可以通过访问任一Pod的环境变量查看NGX_DEMO_VER的值,为v1现在我们创建一个nginx-demo-v2-rc.yml的文件,来升级现有的pod:执行更新操作:需要注意的是,在执行滚动升级时,两个版本的yml文件区别:RC的名字不能与旧的RC名字相同在selector中应至少有一个label与旧的RC的label不同,以标识其为新的RC。我们可以通过如下操作来查看更新的完整过程:当所有旧的pod被新的Pod替换完成以后,更新完成。使用kubectl rolling-update实现滚动更新的不足:rolling-update的逻辑是由kubectl发出N条命令到APIServer完成的,很可能因为网络原因导致update中断需要创建一个新的rc,名字与要更新的rc不能一样回滚还需要执行rolling-update,只是用老的版本替换新的版本service执行的rolling-update在集群中没有记录,后续无法跟踪rolling-update历史现如今,RC的方式已经被Deployment替代。kubernetes的Deployment是一个更高级别的抽象。Deployment会创建一个Replica Set,用来保证Deployment中的Pod的副本数。要rolling-update deployment中的Pod,只需要修改Deployment自己的yml文件并应用即可。这个修改会创建一个新的Replica Set,在增加这个新RS的pod数的同时,减少旧RS的pod,直至完全升级。而这一切都发生在Server端,并不需要kubectl参与。创建一个Deployment yml文件nginx-demo-dm.yml:创建该deployment:然后我们可以直接修改该deployment文件,如下 :一共就改了两个地方,将version改为了v2,将nginx镜像从1.14改到了1.15,执行如下操作应用更改:这个时候,我们可以通过执行kubectl get rs来查看到rs的变化,以确认是否在执行升级。也可以通过kubectl describe deployment nginx-demo来查看详细的rolling-update的过程。还可以通过kubectl rollout status deployment/nginx-demo来查看更新状态。除了使用apply方式来应用更改以外,还有另外一种方式可以直接升级。就是通过kubectl edit nginx-demo-dm.yml来编辑deployment文件,保存以后,不需要执行apply,就会自动完成升级。我们可以注意到,在执行deployment的操作时,使用了一个–record参数,这个参数是用来告诉apiserver记录update的历史。可以通过如下命令来查看update历史:查看指定revision的详细信息:需要说明的是,在升级完成以后,旧的RS也不会被删除,这些信息都会存储到server端,以方便回滚。
deployment下的pod的回滚操作相当简单,直接执行rollout undo即可将deployment回滚到record中记录的上一个revision:执行如下操作,回滚到指定版本:上述内容就是Kubernetes中怎么利用Deloyment实现滚动更新,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注开发云行业资讯频道。

相关推荐: 基于Harbor如何搭建Docker私有镜像仓库

这篇文章主要讲解了“基于Harbor如何搭建Docker私有镜像仓库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Harbor如何搭建Docker私有镜像仓库”吧!什么是 harbor?第一次使用这个的时候…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/27 14:19
Next 07/27 14:19

相关推荐