K8s 滚动更新

Deployment特性

  • 事件和状态查看
  • 保存更新版本记录,支持回滚到指定版本
  • 可以实现多种自动更新方案
  • 暂停和启动,支持每次升级必要的暂停,以便是否继续以下的更新

说白就是基于Pod的滚动更新高级支持,特性都是针对更新而言

Deployment更新

更新的是Pod模板下的内容,比如镜像文件,标签、存储等等,而怎么更新就由Deployment控制器完成

  • 更新策略:滚动更新和重新创建
  • 更新和回滚方式:yaml文件和命令行
  • 暂停更新方案:符合现实使用的更新方案

更新策略

  • 滚动更新(默认):新旧版本交替更新,好处就是可以实现理论上的无中断更新
  • 重新创建:旧版本全部删除,根据模板重新创建Pod,坏处是业务会出现中断

Deployment更新操作还是要基于replicaset控制器,但是更新过程是要基于2个控制器进行替换,旧版本减少,新版本就增加
在这里插入图片描述滚动更新的2个字段说明

  • 需要确保可用Pod数,以保证客户端能正常请求服务,而这个范围数由2个字段控制
    • maxSurge:更新中最高可以超出的副本总数(包含新旧副本),可以以数值或者百分比,假如定义的是3副本,maxSurge=1,3+1=4
    • maxSurge:更新中可用的副本数(包含新旧副本),可以以数值或者百分比,假如定义的是3副本,maxUnavailable=1,3-1=2

maxSurge和maxSurge默认为25%
maxSurge和maxSurge可以为0,但是不能同时为0
在这里插入图片描述

查看depolyment默认的更新信息
在这里插入图片描述

隐含的意思其实就是每次以四分之一进行更新交替新旧版本,这个最小化的实现平滑过度更新

更新方式

命令行更新Pod模本信息

  • kubectl set :可以直接写成赋值的方式替换内容,常见的有image,只支持部分内容
    • kubectl set image deployment/nginx nginx=nginx:1.19.7
      • 最后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/

猜你喜欢

转载自blog.csdn.net/yangshihuz/article/details/113858821