k8s初探(5)-kubernetes Deployment(1)
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
什么是deployment
我们已经初步了解了pod和replicaset,我们可以思考这样一个问题,我怎么管理我的replicaset中的pod更新,首先来看下我们一般的更新部署计划,我们抽象出来,大概可以分为以下几步
我们假设线上已经有了一个拥有三副本的ReplicaSet,我们由于更新了镜像,所以我们得更新一下正在运行的pod,我们想想,我们应当如何更新呢?
假设我们已有架构如下
当我们需要更新时候,可以先将负载均衡取消掉,例如,我们想更新Pod B,我们可以将其负载均衡给拿掉
然后删除Pod B,根据replicaSet基本原理,删除Pod后,由于阈值个数不足,所以kubernetes得创建新的,可以理解为
然后再将负载均衡建立到Pod B上,并且将Pod A的负载均衡给拿掉,这样再更新Pod A就不会影响正在执行的用户了。
这几个操作步骤,若是让我们手动输入,多多少少有点难为我们,好在,kubernetes提供了我们一个新的资源deployment,正好就解决上面问题的。正如k8s官网所言,将replicaset交由deployment管理,你就安安心心的吧。
其概念可以理解为如下图
deployment 操作
介绍了那么多,我们先来看一下deployment提供的描述文档,根据后续查就可以了
为了更好的模拟deployment,我们尝试写一个2个web服务
web程序1
我们将其打包成镜像 juejinpdudoweb:v1
web程序2
我们将其打包成镜像 juejinpdudoweb:v2
查看镜像
创建deployment
创建deployment
使用apply创建之后,我们可以deployment和rs以及pod的具体信息
尝试请求pod:9090端口
更新deployment
更新有2种方式,第一种是执行kubectl edit修改,第二种便是执行kubectl set镜像修改
例如,我们想将该deployment镜像更新下,我们可以使用kubectl set进行更新即可
通过查询rs可得,deployment更新了一个版本的rs
查看pod
再次请求访问
回退deployment
如上所述,rs更新后,并没有删除掉,所以,我们还可以通过deployment进行回退
查看版本
我们查看第一个版本
确定无误,我们可以回退到第一个版本
我们通过比对rs可以得出结论,已经回退成功了
查看pod,再次访问网页
总结
对于无状态服务而言,我们使用replicaset进行绑定并且对外服务,可以有效解决流量分配 和 故障修复等,不过随之而来的问题便是我们如何更新replicaset管理下的pod,我们手动更新,麻烦且kubernetes负载均衡难以操作,好在kubernetes提供了deployment供我们调用且管理replicaset,作为运维而言,我们仅需管理deployment即可,无需关注和直接操作replicaset,deployment对于版本而言,方便我们更新/回退/查看版本 等。

浙公网安备 33010602011771号