2. Kubernetes Deployment 基础:Deployment 的定义、ReplicaSet 与 Pod 的关系、滚动更新与回滚机制
2.1 Deployment 的定义与核心职责
Deployment 是 Kubernetes 中最常用的工作负载 API 对象,它声明式地管理 Pod 和 ReplicaSet 的期望状态。在云原生安全场景中,Deployment 是镜像拉取策略、网络策略和访问控制策略的主要挂载点。
| 特性 | 说明 |
|---|---|
| 声明式更新 | 用户定义期望状态(副本数、镜像版本、资源限制),控制器持续调和实际状态 |
| 自愈能力 | Pod 故障时自动重建,确保运行中的副本数始终匹配期望值 |
| 版本控制 | 每次更新生成新 ReplicaSet,保留历史版本用于回滚 |
| 安全基座 | 支持配置 imagePullSecrets、securityContext、Pod 安全策略 |
安全要点:Deployment 的 spec.template.spec 字段是注入镜像拉取凭据(imagePullSecrets)、网络策略标签(podLabels)和容器安全上下文(securityContext)的唯一入口。多集群场景下,每个集群的 Deployment 必须独立配置对应的拉取密钥。
2.2 ReplicaSet 与 Pod 的层级关系
Deployment 不直接管理 Pod,而是通过 ReplicaSet 实现副本控制。三者形成清晰的拥有链:
- Deployment → 控制 ReplicaSet 的创建、更新和删除
- ReplicaSet → 确保指定数量的 Pod 副本始终运行
- Pod → 承载容器化应用的最小调度单元
安全映射:在多集群镜像拉取场景中,imagePullSecrets 配置在 Pod 模板(spec.template.spec.imagePullSecrets)中,由 ReplicaSet 继承并传递给所有 Pod 副本。修改 Deployment 的拉取凭据后,新 ReplicaSet 自动使用新凭据,旧 ReplicaSet 保留旧凭据用于回滚。
2.3 滚动更新机制
滚动更新是 Deployment 默认的更新策略,通过逐步替换旧 Pod 实现零停机发布。核心参数在 spec.strategy.rollingUpdate 中定义:
| 参数 | 默认值 | 说明 | 安全影响 |
|---|---|---|---|
maxSurge |
25% | 更新期间允许超出期望副本数的最大 Pod 数量 | 过大可能增加镜像拉取并发,导致仓库限速 |
maxUnavailable |
25% | 更新期间允许不可用 Pod 的最大数量 | 过小可能阻塞更新,影响安全补丁下发速度 |
安全风险:滚动更新期间,新旧 ReplicaSet 同时存在,可能导致两个版本的镜像拉取凭据同时生效。如果旧凭据已轮换或撤销,旧 Pod 重建时会拉取失败。建议在更新前确认所有集群的镜像拉取凭据均有效。
2.4 回滚机制
Deployment 的修订历史(revisionHistoryLimit,默认 10)允许快速回滚到任意历史版本。回滚本质上是将 Deployment 的 Pod 模板重置为历史版本,触发新的滚动更新。
回滚操作命令示例:
# 查看修订历史
kubectl rollout history deployment/my-app
# 回滚到上一个版本
kubectl rollout undo deployment/my-app
# 回滚到指定版本
kubectl rollout undo deployment/my-app --to-revision=3
| 回滚场景 | 触发条件 | 安全注意事项 |
|---|---|---|
| 镜像版本回退 | 新版本镜像拉取失败或应用崩溃 | 旧版本镜像必须仍在镜像仓库中可用 |
| 配置回退 | 环境变量、挂载卷或资源限制配置错误 | 回滚后需验证网络策略和 RBAC 是否匹配 |
| 拉取凭据回退 | 新 imagePullSecrets 无效或权限不足 | 旧凭据对应的 Secret 必须未被删除 |
多集群回滚策略:在跨集群部署中,回滚应逐集群执行,避免全局回滚导致流量中断。建议使用
kubectl rollout pause 暂停更新,确认问题范围后再决定回滚粒度。回滚后务必检查所有集群的 Pod 状态和镜像拉取日志。
2.5 关键安全配置清单
基于 Deployment、ReplicaSet 和 Pod 的关系,多集群镜像拉取安全配置需关注以下要点:
- imagePullSecrets 继承性:配置在 Pod 模板中,所有副本自动继承;修改后需触发滚动更新
- 修订历史保留:设置合理的
revisionHistoryLimit,避免历史版本过多占用 etcd 存储 - 更新策略调优:根据镜像仓库限流阈值调整
maxSurge和maxUnavailable - 回滚验证:回滚后执行
kubectl describe pod确认镜像拉取事件正常 - 跨集群一致性:每个集群的 Deployment 应独立管理,避免凭据泄露扩散