Deployment 是更高阶的资源, ReplicatioinController 和 ReplicaSet 是更底层的概念.

Deployment 依赖 ReplicaSet:

image.png

9.3.1 创建一个 Deployment

创建一个 Deployment Manifest

image.png

创建 Deployment 资源

删除所有 ReplicationController:

  1. $ kubectl delete rc --all

创建 Deployment:

  • --record 记录历史版本号
  1. $ kubectl create -f kubia-deployment-v1.yaml --record

展示 Deployment 滚动过程中的状态

专门用于查看部署状态的命令:

  1. $ kubectl rollout status deployment kubia

image.png

了解 Deployment 如何创建 ReplicaSet 以及 pod

image.png

  • NAME 中的数字是 pod 模板的 hash

通过 Service 访问 pod

9.3.2 升级 Deployment

修改 Deployment 的 pod 模板中的 tag.

不同的 Deployment 升级策略

  • RollingUpdate: 执行滚动更新 (默认)
  • Recreate: 删除所有旧 pod, 再创建新 pod

演示如何减慢滚动升级速度

  • miniReadySeconds 属性

image.png

触发滚动升级

在另一个终端中运行 curl 循环:

image.png

指定新镜像:

  • nodejs 是 Deployment 中 pod 模板指定的名称

image.png

image.png

Deployment 的优点

image.png

9.3.3 回滚 Deployment

创建 v3 版本的应用程序

引入一个 bug 来测试回滚.

部署 v3 版本

image.png

观察升级过程:

image.png

cur 返回错误:

image.png

回滚升级

取消最后一次部署:

  • 可以在滚动升级过程中使用

image.png

显示 Deployment 的滚动升级历史

历史版本信息就是旧的 ReplicaSet.

查看历史:

image.png

回滚到一个特定的 Deployment 版本

需要指定版本号, 上图中 REVISION 列:

image.png

  • 不应该手动删除 ReplicaSet

image.png

  • revisionHistoryLimit 属性用于限制历史版本数

9.3.4 控制滚动升级速率

介绍滚动升级策略的 maxSurge 和 maxUnavailable 属性

决定一次替换多少个 pod:

image.png

含义:

image.png

数量变化:

image.png

了解 maxUnavailable 属性

  • maxSurge=1
  • maxUnavailable=1

image.png

注意, maxUnavailable 的值用于计算至少要保持的 pod 个数, 实际上不可用的 pod 可以超过 maxUnavailable

9.3.5 暂停滚动升级

暂停期间可以查看业务是否正常.

暂停滚动升级

使用 v4 pod 滚动升级, 并暂停:

image.png

恢复滚动升级

image.png

使用暂停功能来停止滚动升级

  • 阻止更新 Deployment 而自动触发的滚动升级过程
  • 在恢复部署之前, 撤销命令不会撤销它

9.3.6 阻止出错版本的滚动升级

了解 minReadySeconds 的用处

  • 指定新创建的 pod 至少要成功运行多久之后, 才能将其视为可用
  • maxUnavailable
  • 就绪探针

pod 变为就绪态后, 那么应该持续运行 minReadySeconds 时间才继续滚动升级.

所以可以达到减缓滚动升级的目的.

配置就绪探针来阻止全部 v3 版本的滚动部署

image.png
image.png

使用 kubectl apply 升级 Deployment

  • 不需要更改的字段, 不要在配置写明

image.png

查看升级过程:

image.png

并没有请求切换到 v3:

image.png

列出 pod:

image.png

就绪探针如何阻止出错版本的滚动升级

就绪探针失败的 pod 会从 Service 的 endpoint 中移除:

  • curl 不会访问到不健康的 pod

image.png

为滚动升级配置 deadline

查看部署状态:

  • ProgressDeadlineExceeded
  • progressDeadlineSeconds: 指定超时时间

image.png

取消出错版本的滚动升级

取消滚动升级:

image.png