k8s初探(5)-kubernetes Deployment(1)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

什么是deployment

我们已经初步了解了podreplicaset,我们可以思考这样一个问题,我怎么管理我的replicaset中的pod更新,首先来看下我们一般的更新部署计划,我们抽象出来,大概可以分为以下几步

我们假设线上已经有了一个拥有三副本的ReplicaSet,我们由于更新了镜像,所以我们得更新一下正在运行的pod,我们想想,我们应当如何更新呢?

假设我们已有架构如下

当我们需要更新时候,可以先将负载均衡取消掉,例如,我们想更新Pod B,我们可以将其负载均衡给拿掉

然后删除Pod B,根据replicaSet基本原理,删除Pod后,由于阈值个数不足,所以kubernetes得创建新的,可以理解为

然后再将负载均衡建立到Pod B上,并且将Pod A的负载均衡给拿掉,这样再更新Pod A就不会影响正在执行的用户了。

扫描二维码关注公众号,回复: 14218610 查看本文章

这几个操作步骤,若是让我们手动输入,多多少少有点难为我们,好在,kubernetes提供了我们一个新的资源deployment,正好就解决上面问题的。正如k8s官网所言,将replicaset交由deployment管理,你就安安心心的吧。

其概念可以理解为如下图

deployment 操作

介绍了那么多,我们先来看一下deployment提供的描述文档,根据后续查就可以了

为了更好的模拟deployment,我们尝试写一个2个web服务

web程序1

我们将其打包成镜像 juejinpdudoweb:v1

web程序2

我们将其打包成镜像 juejinpdudoweb:v2

查看镜像

创建deployment

创建deployment

使用apply创建之后,我们可以deploymentrs以及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即可,无需关注和直接操作replicasetdeployment对于版本而言,方便我们更新/回退/查看版本 等。

猜你喜欢

转载自juejin.im/post/7104488718915862565