Deployment当中借助于ReplicaSet进行更新的策略反映在Deployment的对象定义所需字段可使用kubectl explain deploy
,Deployment属于extension群组。在1.10版本中它被移至到apps群组。他与ReplicaSet相比增加了几个字段。
stratgy 重要字段,定义更新策略,它支持两种策略 重建式更新 Recreate
与滚动更新RollingUpdate
,如果type为RollingUpdate,那么RollingUpdate的策略还可以使用RollingUpdate来定义,如果type为Recreate,那么RollingUpdate字段无效。 默认值为RollingUpdate
stratgy.RollingUpdate控制RollingUpdate更新力度
- maxSurge 对应的更新过程当中,最多能超出目标副本数几个。有两种取值方式,为直接指定数量和百分比。在使用百分比时,在计算数据时如果不足1会补位1个。
- maxUnavailable 最多有几个副本不可用。
revisionHistoryLimit 滚动更新后,在历史当中最多保留几个历史版本,默认10。
在使用Deployment创建Pod时,Deployment会自动创建ReplicaSet,而且Deployment名称是使用Pod模板的hash值,此值是固定的。
Deployment在实现更新应用时,可以通过编辑配置文件来实现,使用kubectl apply -f更改每次变化。每次的变化通过吧变化同步至apiserver中,apiserver发现其状态与etcd不同,从而改变etcd值来实现修改其期望状态,来实现现有状态去逼近期望状态。
kubectl explain deploy
|
|
使用
kubectl apply
声明式更新、创建资源对象。
将上述资源配置清单的replicaSet数量改为3个后,可以看到数量增加为3,而对应的hash值没变化。
|
|
由于Deployment是构建在ReplicaSet之上,对Pod做扩展、缩容是很方便的。处理动态修改资源配置清单外,还可以使用kubectl patch
(打补丁)进行操作。
patch操作是对对象的JSON内容进行打补丁,-p选项值为JSON格式,其建值需以引号引起。
语法
|
|
-p 提供补丁
|
|
|
|
更新版本
在更新完成后使用 kubectl get rs 查看可看到有两个 rs版本,所不同的是,镜像版本不同和可用的数量为0,但这个对应的模板会保留,随时等待回滚。
|
|
更新版本可以使用可使用 kubectl set image
进行更新
语法
|
|
|
|
此时可以看到rs保留多个版本
|
|
使用 kubectl rollout pause可以暂停更新。
|
|
使用resume可恢复暂停操作
|
|
Deployment版本滚动的历史保留
可使用 kubectl rollout history
查看滚动历史
|
|
版本回滚
使用 kubectl rollout undo
默认是回滚至上一个版本
语法
|
|
--to-revision=n
回滚至指定版本
|
|
回滚后查询当前rs版本
|
|
Deployment回滚演示