什么是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
对于版本而言,方便我们更新/回退/查看版本 等。