1.Deployment的升级

示例:滚动升级busybox-deployment容器

apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox: 1.7 # 查看busybox容器副本数量
kubectl get pods # 使用以下命令更新busybox到1.9版
kubectl set image deployment/busybox-deployment busybox=busybox:1.9
或者kubectl edit编辑bosybox的deployment文件将image 1.7改为1.9,修改后会自
动出发Pod滚动升级 # 查看更新过程
kubectl rollout status deployment/busybox-deployment

Deployment的更新策略包括:

1)Recreate:设置spec.strategy.type=Recreate,表示在更新Pod时会先杀掉所有正好运行的Pod,然后创建新的Pod

2)RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Pod会以滚动升级的方式逐个更新,此为默认值,其中

spec.strategy.rollingUpdate.maxUnavilable指定更新过程中不可用状态的Pod的数量上限,如设置为30%,则更新过程中确保运行的Pod总数至少占Pod期望副本总数的70%。

spec.strategy.rollingUpdate.maxSurge:用于指定更新过程中Pod总数超过Pod期望副本数部分的最大值,如设为30%,则新的ReplicaSet可以在滚动更新开始时立即进行副本扩容,只需保证新旧ReplicaSet的Pod副本数之和不超过期望副本数的130%即可,一旦旧的Pod被杀掉,新的ReplicaSet就会进一步扩容。

 2.Deployment的回滚

# 使用kubectl rollout history命令查看deployment部署记录
kubectl rollout history deployment/nginx-deployment # 查看特定版本的详细信息,加上revision=<N>参数
kubectl rollout history deployment/nginx-deployment --revision=3 # 回滚到ngin-deploymment上一个部署版本
kubectl rollout undo deployment/nginx-deployment # 使用--to-revision回滚到指定部署版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

3.暂停和恢复Deployment的部署操作

对于一次复杂的Deployment配置修改,为了避免频繁触发Deployment的更新操作,可先暂停Deployment的更新操作,待修改完成后再恢复

# 通过kubectl rollout pause命令暂定deployment更新操作
kubectl rollout pause deployment/nginx-deployment # 做更新image版本和容器资源操作
kubectl set image deployment/nginx-deployment nginx=nginx:1.10.1
kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=768Mi # 恢复Deployment的部署操作
kubectl rollout resume deployment/nginx-deployment

 4.RC的滚动升级

使用kubectl rolling-update命令进行RC的滚动升级,升级时系统要求新的RC与旧的RC必须在相同的namespace里

# 使用nginx-rc-rollout-v1.17.yaml升级到1.17版,旧版本时1.15版
apiVersion: v1
kind: ReplicatonController
metadata:
name: nginx-rc-v1.17 # RC的name不能与旧版本相同
labels:
name: nginx-rc
version: v1.17
spec:
replicas: 1
selector: # selector中至少有一个version与旧版中的不同
name: nginx-rc
version: v1.17
template:
metadata:
labels:
name: nginx-rc
version: v1.17
spec:
containers:
- name: nginx
image: nginx:1.17
ports:
- containerPort: 80 # 执行命令滚动升级nginx-rc
kubectl rolling-update nginx-rc -f nginx-rc-rollout-v1.17.yaml
或者
# 直接使用命令更新
kubectl rolling-update nginx-rc --image=nginx:1.17
注:使用命令升级后新RC仍使用旧RC的name # 如果在更新过程中发现配置有误,则可中断更新,执行以下命令回滚
kubectl rolling-update nginx-rc --image=nginx:1.17 --rollback

RC的滚动升级不具有Deployment在应用版本升级过程中的历史记录、新旧版本数量的精细控制等功能。

5.DaemonSet的更新策略

DaemonSet包含两种升级策略:

1)OnDelete:默认的升级策略,使用此策略,在创建好新的DaemonSet配置之后,新的Pod并不会被自动创建,直到用户手动删除旧Pod才会出发新建操作

2)RollingUpdate:使用此策略更新时,旧版的Pod将被自动杀掉,然后自动创建新版的Pod,整改过程与普通Deployment的滚动升级一样可控,但回滚时不能通过kubectl rollback命令完成,必须通过再次提交旧版本配置的方式实现

要启用DaemonSet的滚动更新特性,必须将其spec.updateStrategy.type设置为RollingUpdate。
还可以设置spec.updateStrategy.rollingUpdate.maxUnavailable(默认值为1)和spec.minReadySeconds(默认值为0)

6.StatefulSet的更新策略

更新策略向Deployment和DaemonSet的策略看齐,也可使用RollingUpdate、Paritioned和OnDelete策略。

最新文章

  1. 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json
  2. 再次推荐一款逼真的HTML5下雪效果
  3. DateTime与DateTime?赋值问题以及null类型的如何赋值问题
  4. svn1.8 server client eclipse 插件 配置 完全教程
  5. 25个增强iOS应用程序性能的提示和技巧(初级篇)
  6. uva 1368 DNA Consensus String
  7. win2003下全自动快速安装php+mysql套件
  8. 3.7 嵌入式SQL
  9. 数据库事务 及ACID
  10. 【HDOJ】4333 Revolving Digits
  11. 如何创建phpinfo查看php信息?
  12. go与json
  13. Windows 下如何安装配置Snort视频教程
  14. 开源项目之Android Afinal框架
  15. transaction manager has disabled its support for remote/network transactions. 该伙伴事务管理器已经禁止了它对远程/网络事务
  16. UVa10129,Play On Words
  17. 在linux系统中I/O 调度的选择
  18. Python optparser库详解
  19. C# 如何在PDF文档中创建表格
  20. [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix

热门文章

  1. day07-MyBatis的关联映射01
  2. ABP微服务系列学习-对接前端界面
  3. wwise 音频引擎介绍
  4. react 03 组件传值
  5. 【Direct3D 12】什么是Direct3D 12
  6. 在使用IDEA提交git代码时,如何修改提交者的名字
  7. Django 之RestFramework
  8. CentOS 7.4使用yum源安装MySQL 5.7.20
  9. git remote prune origin删除本地有但在远程库已经不存在的分支
  10. 「SOL」网络流flow (模拟赛)