2. K8s 核心概念回顾:Pod、Deployment、Service、Namespace、ConfigMap、Secret 的核心作用与关系
在深入自动化发布流水线与回滚策略之前,必须牢固掌握 Kubernetes 的六大核心原语。它们是构建、部署、暴露和配置应用的基石。理解这些对象的作用与相互关系,是设计可靠回滚机制的前提。
2.1 六大核心概念速览
| 概念 | API 版本(稳定) | 核心作用 | 是否可回滚 |
|---|---|---|---|
| Pod | v1 | 最小调度单元,封装一个或多个容器、存储、网络 | 否(由上层控制器管理) |
| Deployment | apps/v1 | 声明式管理无状态应用的副本、更新策略与回滚 | 是(核心回滚对象) |
| Service | v1 | 提供稳定的网络端点,将流量负载均衡到一组 Pod | 否(通常不直接回滚) |
| Namespace | v1 | 虚拟集群,用于资源隔离与多租户管理 | 否 |
| ConfigMap | v1 | 将非机密配置数据与容器镜像解耦 | 否(但版本可追溯) |
| Secret | v1 | 存储敏感数据(密码、、证书),Base64 编码 | 否(但版本可追溯) |
关键认知: 在自动化发布流水线中,Deployment 是回滚策略的直接执行者;ConfigMap 和 Secret 的版本变更往往是触发回滚的间接原因;Service 和 Namespace 提供稳定的访问边界与隔离环境。
2.2 核心对象关系图
下图展示了六大对象在集群中的层级关系与协作流程。理解这张图,就能理解 K8s 应用部署的完整骨架。
2.3 各对象核心作用详解
2.3.1 Pod —— 原子调度单元
- 定义: K8s 中最小的可部署计算单元,包含一个或多个共享网络/存储的容器。
- 生命周期: Pod 是“有生死的”,不会自愈。通常由控制器(如 Deployment)创建和管理。
- 与回滚的关系: 回滚操作不直接作用于 Pod,而是通过更新 Deployment 的 PodTemplate 触发 ReplicaSet 的版本切换。
2.3.2 Deployment —— 发布与回滚的核心
- 声明式更新: 定义期望状态(副本数、镜像版本、资源限制),控制器持续调和。
- 滚动更新策略: 支持
maxSurge(最大超出副本数)和maxUnavailable(最大不可用副本数)控制更新速率。 - 回滚能力: 内部维护 Revision 历史,通过
kubectl rollout undo或 CI/CD 触发回滚到指定 Revision。
回滚关键字段:
spec:
revisionHistoryLimit: 10 # 保留的历史版本数(默认 10)
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 更新时最多允许超出 25% 的副本
maxUnavailable: 25% # 更新时最多允许 25% 的副本不可用
2.3.3 Service —— 稳定的网络入口
- 作用: 为一组动态变化的 Pod 提供固定的虚拟 IP(ClusterIP)和 DNS 名称。
- 类型: ClusterIP(集群内访问)、NodePort(节点端口映射)、LoadBalancer(云负载均衡器)。
- 与回滚的关系: Service 本身不参与回滚,但其
selector必须与 Deployment 的 Pod 标签一致,否则回滚后流量无法到达新 Pod。
2.3.4 Namespace —— 多租户隔离
- 作用: 将集群划分为多个虚拟集群,实现资源配额、网络策略、权限控制的隔离。
- 典型场景:
dev、staging、prod各占一个 Namespace,避免相互干扰。 - 与回滚的关系: 回滚操作通常限定在特定 Namespace 内,避免影响其他环境。
2.3.5 ConfigMap 与 Secret —— 配置与敏感数据管理
| 特性 | ConfigMap | Secret |
|---|---|---|
| 数据格式 | 明文键值对或文件 | Base64 编码(etcd 中建议加密) |
| 注入方式 | 环境变量 / 挂载卷 | 环境变量 / 挂载卷 |
| 更新触发 | Pod 不会自动重启,需手动或使用工具(如 Reloader) | 同 ConfigMap |
| 回滚影响 | 配置错误是回滚的常见诱因;回滚 Deployment 时需确认 ConfigMap 版本是否匹配 | 证书过期或密钥轮换失败时,需回滚 Secret 版本 |
常见陷阱: 回滚 Deployment 时,如果新版本的 Pod 引用了旧版本的 ConfigMap/Secret,可能导致配置不一致。建议在 CI/CD 流水线中将 ConfigMap/Secret 的版本与 Deployment 的镜像版本绑定,或使用不可变 ConfigMap(
immutable: true)。
2.4 对象协作流程(发布与回滚视角)
下图从一次完整的发布与回滚流程出发,展示六个对象如何协同工作。
2.5 总结:回滚视角下的核心关系
- Deployment 是回滚的“方向盘”:所有回滚操作最终都体现为 Deployment 的 Revision 切换。
- Pod 是回滚的“执行结果”:回滚是否成功,看新 Pod 是否健康并接管流量。
- Service 是回滚的“流量开关”:只要 Pod 标签不变,Service 自动跟随,无需额外操作。
- ConfigMap/Secret 是回滚的“隐形依赖”:回滚 Deployment 时,必须确保引用的配置版本也回滚,否则可能引入配置漂移。
- Namespace 是回滚的“安全边界”:回滚操作应限定在目标 Namespace,避免误操作影响其他环境。
最佳实践: 在自动化流水线中,建议将 ConfigMap/Secret 的版本号编码到 Deployment 的 Annotation 中(如
config-version: v1.2.3),回滚时通过版本比对确保配置一致性。