Module 03 · Managing Applications with Kubernetes
Rolling Updates滚动更新(Rolling Updates)详解
定义与优势
看完本视频,您将能够:
- 解释什么是滚动更新及其工作原理。
- 列出应用滚动更新前的准备步骤。
- 演示如何回滚滚动更新。
什么是滚动更新?
滚动更新是一种自动化且受控的更新机制,用于在 Pods 之间逐步部署应用程序的变更。
- 特点:
- 自动化更新,按计划进行。
- 跨 Pods 推送受控的应用程序变更。
- 适用于 Deployment 等带有 Pod 模板的工作负载。
- 允许根据需要进行回滚(rollback)。
应用滚动更新前的准备步骤
为应用程序启用滚动更新,您需要进行以下准备:
1.添加探测器(Probes)
- 向 Deployment 中添加 (存活探针)和 (就绪探针)。
- 这样可以确保 Deployment 被正确标记为就绪(ready)。
2.定义滚动更新策略
在 YAML 文件中添加 rollingUpdate 策略:

| 策略属性 | 含义 | 示例值 | 目的 |
|---|---|---|---|
maxUnavailable |
在更新过程中最多允许处于不可用状态的 Pods 数量(可以是百分比或绝对值)。 | 50% (至少 50% Pod 始终可用) | 确保服务持续可用性。 |
maxSurge |
在更新过程中最多可以超出所需副本数量的新 Pods 数量(可以是百分比或绝对值)。 | 2 (在 10 个 Pod 基础上最多增加 2 个) | 控制资源消耗和更新速度。 |
| 零停机 | 将 maxUnavailable 设置为 0。 |
N/A | 确保在任何时间点所有旧 Pod 至少有一个新 Pod 替换。 |
| 完全复制 | 将 maxSurge 设置为 100%。 |
N/A | 在移除原始 Pod 集合之前,先创建一套完整的副本(双倍 Pod 数量)。 |
minReadySeconds |
Pods 在被视为可用(ready)之前应保持就绪状态的最小秒数。 | N/A | 在滚动到下一个 Pod 之前等待几秒钟,确保稳定性。 |
滚动更新演示
场景:零停机更新
- 初始状态: ReplicaSet 中有 3 个 Pods,显示信息为 "Hello World!"。
- 新需求: 应用程序需要更新到新版本,显示信息为 "Hello World v2"。
- 目标: 零停机(no downtime)。
步骤
- 构建和上传新镜像
- 将新软件 Dockerize。
- 构建、标记并将新镜像上传到 Docker Hub(例如:
hello-kubernetes-upcar/hello-kubernetes:2.0)。
📝 注意:这些是简单的 Docker 命令,与 Kubernetes 无关。
- 应用新镜像到 Deployment
- 使用
set image命令将 Deployment 的镜像标志设置为 Docker Hub 上更新后的标签。 - 命令输出确认镜像已更新。
- 验证滚动更新状态
- 使用
rollout status命令查看更新状态。 - API 输出显示
deployment hello-kubernetes successfully rolled out。
- 最终验证
- 访问 URL,您将看到新消息 "Hello World v2"。
回滚滚动更新演示
当部署出现错误或客户改变主意时,回滚很容易在 Kubernetes 中实现。
步骤
- 执行回滚
- 对
rollout使用undo命令。
- 验证状态
- 使用
get pods命令确认:- 原有的更新后的 Pods 被终止(terminated)。
- 作为回滚的一部分,3 个新 Pods 被创建。
- 最终验证
- 再次访问站点,您将看到原始消息("Hello World!")。
滚动更新策略对比
1.一次性更新 (All-at-once Rollout)

- 特点: 所有 v1 对象必须在 v2 对象激活之前被移除。
- 过程:
- v1 应用(3 个 Pods)运行。
- 部署 v2,新 Pods 创建。
- v1 Pods 标记为删除并移除 → 用户访问被阻塞(Blocked)。
- v1 Pods 移除后,v2 Pods 激活 → 用户访问恢复。
- 注意: 部署和 Pod 更新之间存在时间延迟(Time Lag)。
2.一次性回滚 (All-at-once Rollback)

- 特点: 所有 v2 对象必须在 v1 对象激活之前被移除。
- 过程:
- v2 应用(3 个 Pods)运行。
- 部署 v1,新 Pods 创建。
- v2 Pods 标记为删除并移除 → 用户访问被阻塞(Blocked)。
- v2 Pods 移除后,v1 Pods 激活 → 用户访问恢复。
3.逐个更新 (One-at-a-time Rollout)

- 特点: 更新是交错进行(staggered),用户访问不中断。
- 过程:
- v1 应用(3 个 Pods)运行。
- 创建第 1 个 v2 Pod。
- 第 1 个 v1 Pod 标记为删除并移除 → 第 1 个 v2 Pod 激活。
- 创建第 2 个 v2 Pod。
- 第 2 个 v1 Pod 标记为删除并移除 → 第 2 个 v2 Pod 激活。
- 创建第 3 个 v2 Pod。
- 第 3 个 v1 Pod 标记为删除并移除 → 第 3 个 v2 Pod 激活。
4.逐个回滚 (One-at-a-time Rollback)

- 特点: 回滚是交错进行,用户访问不中断。
- 过程:
- v2 应用(3 个 Pods)运行。
- 部署 v1,创建第 1 个 v1 Pod。
- 第 1 个 v2 Pod 标记为删除并移除 → 第 1 个 v1 Pod 激活。
- 创建第 2 个 v1 Pod。
- 第 2 个 v2 Pod 标记为删除并移除 → 第 2 个 v1 Pod 激活。
- 创建第 3 个 v1 Pod。
- 第 3 个 v2 Pod 标记为删除并移除 → 第 3 个 v1 Pod 激活。
总结
- 滚动更新以受控和自动化的方式推出应用程序变更。
- 它们在不造成明显中断的情况下发布变更。
- 当应用程序需要还原时,滚动更新可以回滚变更。
- 滚动更新和回滚可以使用**一次性(All-at-once)和逐个(One-at-a-time)**策略执行。