K8s 滚动更新
Deployment特性事件和状态查看保存更新版本记录,支持回滚到指定版本可以实现多种自动更新方案暂停和启动,支持每次升级必要的暂停,以便是否继续以下的更新说白就是基于Pod的滚动更新高级支持,特性都是针对更新而言Deployment更新更新的是Pod模板下的内容,比如镜像文件,标签、存储等等,而怎么更新就由Deployment控制器完成更新策略:滚动更新和重新创建更新和回滚方式:yaml文件和命
Deployment特性
- 事件和状态查看
- 保存更新版本记录,支持回滚到指定版本
- 可以实现多种自动更新方案
- 暂停和启动,支持每次升级必要的暂停,以便是否继续以下的更新
说白就是基于Pod的滚动更新高级支持,特性都是针对更新而言
Deployment更新
更新的是Pod模板下的内容,比如镜像文件,标签、存储等等,而怎么更新就由Deployment控制器完成
- 更新策略:滚动更新和重新创建
- 更新和回滚方式:yaml文件和命令行
- 暂停更新方案:符合现实使用的更新方案
更新策略
- 滚动更新(默认):新旧版本交替更新,好处就是可以实现理论上的无中断更新
- 重新创建:旧版本全部删除,根据模板重新创建Pod,坏处是业务会出现中断
Deployment更新操作还是要基于replicaset控制器,但是更新过程是要基于2个控制器进行替换,旧版本减少,新版本就增加
滚动更新的2个字段说明
- 需要确保可用Pod数,以保证客户端能正常请求服务,而这个范围数由2个字段控制
- maxSurge:更新中最高可以超出的副本总数(包含新旧副本),可以以数值或者百分比,假如定义的是3副本,maxSurge=1,3+1=4
- maxUnavailable:更新中可用的副本数(包含新旧副本),可以以数值或者百分比,假如定义的是3副本,maxUnavailable=1,3-1=2
maxSurge和maxUnavailable默认为25%
maxSurge和maxUnavailbale可以为0,但是不能同时为0
查看depolyment默认的更新信息
隐含的意思其实就是每次以四分之一进行更新交替新旧版本,这个最小化的实现平滑过度更新
更新方式
命令行更新Pod模本信息
- kubectl set :可以直接写成赋值的方式替换内容,常见的有image,只支持部分内容
- kubectl set image deployment/nginx nginx=nginx:1.19.7
- 最后nginx=nginx:1.19.7,代表的是镜像名=替换的镜像
- kubectl set image deployment/nginx nginx=nginx:1.19.7
- kubectl patch :以json格式替换内容
- kubectl patch deployment nginx --patch={“spec”: {“template”: {“spec”: {“containers”: [{“name”: “nginx”,“image”: “nginx:1.19.6”}]}}}}
yaml格式转成json格式:点击访问
yaml文件更新
- kubectl apply -f nginx-deploymnet.yaml --record
record是可以记录历史版本的执行命令
查看历史版本,首次为版本1, CHANGE-CAUSE就是加上record结果,方便查看更新的信息
kubectl rollout history deployment nginx
spec.revisionHistoryLimit:历史版本记录,默认记录5个历史记录,多的会被覆盖
kubectl rollout status deployment/nginx --revision=2
#查看更新状态
回滚方式
kubectl rollout undo deployment nginx --to-revision=2
REVISION发生了改变,原本的2回滚后变成4,累计追加修订版本号
暂停更新方案
用途主要是在第一批更新Pod新旧更新中,启动暂停,暂停期间可以通过测试新的四分之一应用是否正常,再考虑下面的全部更新,可以通过maxSurge和maxSurge精准控制第一批数量
Deployment 处于暂停状态时,PodTemplateSpec 的任何修改都不会触发新的上线
kubectl set image deployment/nginx nginx=nginx:1.19.7 && kubectl rollout pause deployment/nginx
#一般都是要更新后立即暂停,可以通过&&完成,也可以通过字段修改间隔时间
#字段spec.minReadySeconds,默认为0,可以改个几秒,方便操作暂停
查看历史记录,提示一个副本在更新中,后续已经被暂停了
恢复运行
kubectl rollout resume deployment/nginx
遗留问题
如果我暂停的时候发现有问题后,怎么直接不更新了呢,或者回滚,测试好像不行,还是先要更新完,再进行回滚
暂停过程中进行回滚,不行,官网暂时没有看到说明
参考:书籍:kubernetes进阶实战-马永亮
参考:https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
更多推荐
所有评论(0)