3.3 Deployment

一个 ReplicaSet 对象,其实就是由副本数目的定义和一个 Pod 模板组成的。不难发现,它的定义其实是 Deployment 的一个子集。Deployment 控制器实际操纵的正是这样的 ReplicaSet 对象,而不是 Pod 对象。

Deployment

Deployment 与 ReplicaSet 以及 Pod 的关系是怎样的呢?Deployment 与它的 ReplicaSet 以及 Pod 的关系,实际上是一种“层层控制”的关系。ReplicaSet 负责通过“控制器模式”,保证系统中 Pod 的个数永远等于指定的个数(比如,3 个)。这也正是 Deployment 只允许容器的 restartPolicy=Always 的主要原因:只有在容器能保证自己始终是 Running 状态的前提下,ReplicaSet 调整 Pod 的个数才有意义。而在此基础上,Deployment 同样通过“控制器模式”,来操作 ReplicaSet 的个数和属性,进而实现“水平扩展 / 收缩”和“滚动更新”这两个编排动作。

Rollout

通过 Deployment 重新部署 Flask 应用:

  1. kubectl apply -f deployments/hello-deployment.yaml
  2. kubectl get deployment
  3. kubectl describe deployment/hello

升级Flask 应用,查看滚动升级的过程:

  1. kubectl apply -f deployments/hello-deployment.yaml
  2. kubectl get deployment