K8s滚动更新是 Kubernetes 在不中断整体服务的前提下,逐步用新版本 Pod 替换旧版本 Pod 的发布方式。它通常由 Deployment 完成,核心不是简单“自动更新”,而是通过副本批次、就绪探针、最大不可用数量和回滚记录,把一次发布控制在可观察、可暂停、可恢复的范围内。

滚动更新适合解决什么问题
传统发布经常一次性停止旧进程、启动新进程。如果应用启动慢、依赖不稳定或新版本有缺陷,就可能造成大面积不可用。Kubernetes 滚动更新的价值在于:
- 保留一部分旧版本继续提供服务
- 逐批启动新版本并等待就绪
- 发现异常时停止推进或回滚
- 避免所有实例同时重启造成流量尖峰
它特别适合无状态 Web 服务、API 服务、后台服务和可水平扩展的业务组件。对于有状态数据库、队列或需要强顺序迁移的系统,仍要结合更严格的发布方案。
Deployment如何完成滚动更新
Deployment 会维护期望状态。当镜像版本、环境变量、模板标签等 Pod 模板字段变化时,Kubernetes 会创建新的 ReplicaSet,并逐步扩容新 ReplicaSet、缩容旧 ReplicaSet。
| 参数 | 作用 | 生产建议 |
|---|---|---|
| replicas | 应用副本数 | 关键服务至少多个副本 |
| maxUnavailable | 更新时最多不可用副本 | 核心服务不要设置过大 |
| maxSurge | 更新时可额外创建副本 | 结合资源余量设置 |
| readinessProbe | 判断新Pod是否可接流量 | 必须配置且贴近业务健康 |
| progressDeadlineSeconds | 发布超时时间 | 避免卡住无人发现 |
滚动更新能否安全,往往取决于就绪探针是否准确。如果探针只检查进程存活,而不检查依赖、端口和关键初始化状态,Kubernetes 可能把一个“看似启动、实际不可用”的 Pod 加入流量。
推荐的发布检查流程
一次生产滚动更新建议按以下顺序执行:
- 确认镜像版本:版本号应对应代码提交、构建流水线和变更单。
- 确认资源余量:如果 maxSurge 会额外创建副本,集群必须有足够 CPU 和内存。
- 确认探针有效:readinessProbe 要能反映业务是否可接流量。
- 小流量观察:先让少量新 Pod Ready,观察日志、错误率和延迟。
- 持续推进:指标稳定后再完成全部替换。
- 保留回滚路径:发布记录、镜像版本和配置变更必须可追溯。

回滚应该怎么做
Kubernetes 支持把 Deployment 回滚到历史版本,但前提是你保留了足够清晰的版本记录。回滚不是“撤销一切”,它通常只恢复 Pod 模板层面的变更,例如镜像、环境变量和部分配置引用。
回滚前要先判断问题类型:
- 如果是新镜像代码缺陷,回滚 Deployment 通常有效。
- 如果是数据库结构变更,单纯回滚应用可能不够。
- 如果是外部配置变更,需要同步恢复配置中心或 Secret。
- 如果是依赖服务异常,回滚本服务未必解决。
因此企业级发布不能只依赖 Kubernetes 回滚命令,还要把数据库迁移、配置变更、网关策略和灰度规则纳入统一发布流程。
常见风险点
资源不足导致新Pod无法调度
如果 maxSurge 设置较高,但集群资源不足,新 Pod 会 Pending,发布停在中间状态。生产集群应结合资源水位和调度策略设置发布参数。
探针配置过于宽松
只检查容器进程存在,并不代表业务可用。对 API 服务来说,探针至少应覆盖端口、依赖初始化和关键健康状态。
配置和镜像同时变化
一次发布同时改镜像、环境变量、网关和数据库,问题出现后很难定位。建议高风险变更分阶段执行。
缺少发布观测
滚动更新期间必须观察错误率、响应时间、重启次数、Pod 事件和业务指标。只看 kubectl 返回成功是不够的。
企业如何把滚动更新平台化
当团队数量增多后,手工执行滚动更新会带来权限、审计和一致性问题。企业更适合把发布策略沉淀到平台中:
- 固化不同应用等级的发布模板
- 对生产发布设置审批和审计
- 自动接入日志、指标和告警
- 支持暂停、继续、回滚和灰度
- 与镜像扫描、制品库、配置中心联动
灵雀云 ACP 这类企业级容器平台的价值,就在于把 Kubernetes 原生能力和企业发布治理结合起来,让滚动更新不只是命令行操作,而是可管控的生产交付流程。
滚动更新要先定义可接受风险
K8s 滚动更新可以降低发布中断概率,但不是自动保证零风险。发布前要明确业务是否允许短暂不可用、是否有足够副本、是否能并行启动新旧版本、数据库变更是否兼容、失败后能否快速回滚。没有这些前提,滚动更新也可能扩大事故。
建议重点检查:
- maxUnavailable:同时不可用副本数是否在业务可接受范围内。
- maxSurge:额外创建副本是否会造成资源不足。
- readinessProbe:新 Pod 未准备好前不应接收流量。
- 版本兼容性:新旧版本并存期间协议、数据和配置是否兼容。
- 回滚路径:镜像版本、配置和数据库变更是否可回退。
滚动更新的安全边界来自发布策略、健康检查和版本兼容,而不是 Kubernetes 自动替换 Pod 这个动作本身。
发布后要观察哪些信号
更新完成后不要只看 rollout status 成功。还要观察错误率、延迟、重启次数、CPU/内存、业务指标、Ingress 5xx、日志异常和用户反馈。对于核心服务,建议保留发布观察窗口,在窗口内不继续叠加新的变更。
如果关键指标恶化,应先暂停发布或回滚,再排查原因。生产发布的原则是先控制影响面,再定位根因。
结语
K8s滚动更新的关键不是“能不能自动替换 Pod”,而是发布过程是否可控、健康检查是否准确、回滚路径是否清晰。对于生产系统,建议把滚动更新和监控、流水线、权限审批、配置治理结合起来,形成标准发布体系。
FAQ
K8s滚动更新会不会中断服务?
配置合理时通常不会整体中断,但如果副本数过少、探针错误或应用启动慢,仍可能出现短暂不可用。关键服务建议至少多副本部署,并设置合理的 maxUnavailable。
滚动更新和灰度发布有什么区别?
滚动更新按副本批次替换版本,灰度发布更强调按用户、流量比例或路由规则逐步放量。滚动更新是基础发布机制,灰度发布通常还需要网关、服务网格或发布平台配合。
回滚能解决所有发布问题吗?
不能。Deployment 回滚主要恢复工作负载模板。如果问题来自数据库变更、外部配置、缓存数据或依赖服务,还需要配套回滚方案。
生产环境最重要的滚动更新配置是什么?
readinessProbe、资源限制、maxUnavailable、maxSurge 和发布观测最关键。没有准确探针和监控,滚动更新就很难真正降低风险。
转载请注明出处:https://www.cloudnative-tech.com/p/7293/