# 更新 Deployment

返回 Deployment

# 执行更新

TIP

当且仅当 Deployment 的 Pod template(.spec.template)字段中的内容发生变更时(例如标签、容器的镜像被改变),Deployment 的发布更新(rollout)将被触发。Deployment 中其他字段的变化(例如修改 .spec.replicas 字段)将不会触发 Deployment 的发布更新(rollout)

本文提供了两种途径对 Deployment 执行发布更新(rollout):

  • 使用 kubectl 更新 Deployment
  • 使用 Kuboard 更新 Deployment
  1. 进入 Deployment 查看界面,如下图所示:

    Kubernetes-教程-更新Deployment

  2. 点击上图中的 调整镜像标签 按钮

    将新版本字段修改为 1.9.1,并点击 确定 按钮,如下图所示:

    Kubernetes-教程-更新Deployment-版本

  3. 等待 Kubernetes 完成应用的滚动更新:

    更新过程中,截图如下:

    Kubernetes-教程-更新Deployment-开始更新

    完成更新后,截图如下:

    Kubernetes-教程-更新Deployment-更新完成

# 覆盖更新 Rollover (更新过程中再更新)

每创建一个 Deployment,Deployment Controller 都为其创建一个 ReplicaSet,并设定其副本数为期望的 Pod 数( .spec.replicas 字段)。如果 Deployment 被更新,旧的 ReplicaSet 将被 Scale down,新建的 ReplicaSet 将被 Scale up;直到最后新旧两个 ReplicaSet,一个副本数为 .spec.replias,另一个副本数为 0。这个过程称为 rollout。

当 Deployment 的 rollout 正在进行中的时候,如果您再次更新 Deployment 的信息,此时 Deployment 将再创建一个新的 ReplicaSet 并开始将其 scale up,将先前正在 scale up 的 ReplicaSet 也作为一个旧的 ReplicaSet,并开始将其 scale down。

例如:

  • 假设您创建了一个 Deployment 有 5 个 nginx:1.7.9 的副本;
  • 您立刻更新该 Deployment 使得其 .spec.replicas 为 5,容器镜像为 nginx:1.9.1,而此时只有 3 个 nginx:1.7.9 的副本已创建;
  • 此时,Deployment Controller 将立刻开始 kill 已经创建的 3 个 nginx:1.7.9 的 Pod,并开始创建 nginx:1.9.1 的 Pod。Deployment Controller 不会等到 5 个 nginx:1.7.9 的 Pod 都创建完之后在开始新的更新

返回 Deployment

更新时间: 2021-04-05 13:09:28