Deployment 是 Kubernetes v1.2 引入的新概念,引入的目的是为了更好的解决 Pod 的编排问题。为此,Deployment 在内部使用了 Replica Set 来实现目的,无论从 Deployment 的作用与目的、它的 YAML 定义,还是从它的具体命令操作来看,都可以把它看做 RC 的一次升级两者的相似度超过 90%。
Deplyment 相对于 RC 的嘴个最大升级时可以随时知道当前 Pod “部署” 的进度。实际上由于一个 Pod 的创建、调度、绑定节点以及在目标 Node 上启动对应的容器这一完整过程需要一定的时间,所以期待系统启动 N 个 Pod 副本的目标状态,实际上是一个连续变化的 “部署过程” 导致的最终状态。
Deployment 的典型使用场景有以下几个。
- 创建一个 Deployment 对象来生成对应的 Replica Set 并完成 Pod 副本的创建过程。
- 检查 Deployment 的状态来部署动作是否完成(Pod 副本的数量是否达到预期的值)。
- 更新 Deployment 以创建新的 Pod(比如镜像升级)。
- 如果当前 Deployment 不稳定,则回滚到一个早先的 Deployment 版本。
- 暂停 Deployment 以便于下一次性修改多个 PotTemplateSpec 的配置项,之后再回复 Deployment,进行新的发布。
- 扩展 Deployment 以应对高负载。
- 查看 Deployment 的状态,以此作为发布是否完成的指标。
- 清理不在需要的旧版本 ReplicaSets。
Deployment 的定义与 Replica Set 的定义很类似,除了 API