2. Kubernetes Deployment 基础回顾:Deployment、ReplicaSet、Pod 的关系与滚动更新机制

在深入镜像安全水位与容量巡检之前,必须彻底理解 Deployment、ReplicaSet、Pod 这三层控制结构的关系,以及滚动更新(Rolling Update)的核心流程。这是后续所有巡检策略和风险判断的基础。

2.1 三层控制模型:Deployment → ReplicaSet → Pod

Kubernetes 通过“声明式控制器”实现应用的生命周期管理。Deployment 并不直接管理 Pod,而是通过 ReplicaSet 间接控制 Pod 的副本数量与版本。

资源对象 职责 关键属性
Deployment 声明期望状态(副本数、镜像版本、更新策略);驱动版本变更与回滚 replicas、strategy.type、revisionHistoryLimit
ReplicaSet 确保指定数量的 Pod 副本始终运行;每个版本对应一个 RS replicas、selector.matchLabels、template
Pod 运行容器实例;承载镜像、资源请求、安全上下文 containers[].image、securityContext、resources
巡检视角要点: 镜像安全水位检查的对象是 Pod 模板中的 image 字段;容量巡检的对象是 Pod 的 resources.requests 与 limits。Deployment 的更新会创建新的 ReplicaSet,因此巡检必须覆盖新旧两个 RS 中的 Pod。
Deployment、ReplicaSet、Pod 三层控制关系与滚动更新状态 Deployment → ReplicaSet → Pod 三层控制与滚动更新 Deployment ReplicaSet (v1) — 旧版本 ReplicaSet (v2) — 新版本 Pod (旧镜像) Pod (旧镜像) Pod (旧镜像) Pod (新镜像) Pod (新镜像) Pod (新镜像) 滚动更新进行中:旧 RS 逐步缩容,新 RS 逐步扩容 巡检需同时检查新旧 Pod 的镜像安全水位与资源容量 更新完成后旧 RS 保留(受 revisionHistoryLimit 控制),Pod 全部迁移至新 RS

2.2 滚动更新机制详解

滚动更新是 Deployment 的默认更新策略(strategy.type: RollingUpdate)。它通过逐步替换旧版本 Pod 来保证服务不中断。

2.2.1 核心参数

参数 默认值 含义 对巡检的影响
maxSurge 25% 更新期间允许超出期望副本数的最大 Pod 数量(值或百分比) 可能导致集群资源瞬时超用,容量巡检需考虑峰值
maxUnavailable 25% 更新期间允许不可用 Pod 的最大数量 影响服务容错水位,安全巡检需确认旧 Pod 是否被过快销毁

2.2.2 滚动更新流程(以 4 副本、maxSurge=25%、maxUnavailable=25% 为例)

  1. 创建新 RS:Deployment 控制器根据新模板创建 ReplicaSet (v2),初始副本数为 0。
  2. 扩容新 RS:允许超出期望副本数 25%(即 1 个 Pod),新 RS 扩容 1 个 Pod。
  3. 缩容旧 RS:允许不可用 Pod 为 25%(即 1 个 Pod),旧 RS 缩容 1 个 Pod。
  4. 逐步迭代:重复步骤 2-3,直到新 RS 达到期望副本数(4 个),旧 RS 缩容至 0。
  5. 保留旧 RS:旧 RS 保留(副本数为 0),用于回滚。
巡检提示: 在滚动更新过程中,集群中同时存在新旧两个版本的 Pod。镜像安全水位巡检必须同时扫描两个版本的镜像摘要;容量巡检必须考虑 maxSurge 带来的资源峰值。

2.3 回滚机制与版本历史

Deployment 每次更新都会生成一个新的 ReplicaSet 版本。通过 kubectl rollout undo 可以回滚到上一个或指定版本。

  • 版本存储:旧 ReplicaSet 保留在集群中,受 revisionHistoryLimit(默认 10)限制。
  • 回滚触发:回滚时,Deployment 将 .spec.template 重置为历史版本,再次触发滚动更新。
  • 巡检风险:回滚后镜像版本可能降级到旧版本,导致安全水位重新暴露。巡检系统应记录每次回滚事件并重新评估镜像安全。
滚动更新流程与版本历史管理 滚动更新流程与版本历史管理 1. 修改 Pod 模板 2. 创建新 ReplicaSet 3. 逐步扩容/缩容 4. 完成 版本历史(revisionHistoryLimit=10) RS v1 (旧镜像) RS v2 (旧镜像) RS v3 (当前) RS v4 (回滚目标) … 回滚触发新滚动更新

2.4 关键巡检启示

安全水位巡检: 滚动更新期间新旧镜像并存,必须同时检查两个版本的镜像摘要、漏洞扫描结果与签名状态。回滚操作可能导致旧漏洞镜像重新上线,巡检系统应触发重新评估。
容量巡检: maxSurge 会导致瞬时资源占用超出期望值,容量巡检应使用 kubectl describe deployment 或 Metrics API 监控实际 Pod 数量峰值,并与节点剩余资源做对比。