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 应用部署的完整骨架。

K8s 六大核心概念关系图 K8s 六大核心概念关系图 Namespace (虚拟集群边界) Deployment 声明式更新 · 滚动升级 · 回滚 Pod (副本集) 容器 · 存储卷 · 网络 IP Service ClusterIP · 负载均衡 · 服务发现 ConfigMap 非机密配置(环境变量/文件) Secret 敏感数据(密码/证书/) 管理副本 选择器匹配 注入配置 注入敏感数据 说明 • Deployment 通过 ReplicaSet 管理 Pod 版本 • Service 通过 Label Selector 绑定 Pod • ConfigMap/Secret 挂载到 Pod 后,更新需滚动重启

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 对象协作流程(发布与回滚视角)

下图从一次完整的发布与回滚流程出发,展示六个对象如何协同工作。

发布与回滚流程中的对象协作 发布与回滚流程中的对象协作 1. 配置准备 ConfigMap / Secret 创建或更新配置版本 2. 发布 Deployment 更新镜像/配置 → 滚动升级 3. 运行 Pod (新版本) 承载业务流量 4. 暴露 Service 负载均衡到新 Pod 回滚触发 kubectl rollout undo 回滚到上一 Revision 关键协作关系 回滚时,Deployment 自动将 PodTemplate 恢复为历史版本,新 Pod 重新挂载对应版本的 ConfigMap/Secret,Service 自动将流量切换到新 Pod。

2.5 总结:回滚视角下的核心关系

  • Deployment 是回滚的“方向盘”:所有回滚操作最终都体现为 Deployment 的 Revision 切换。
  • Pod 是回滚的“执行结果”:回滚是否成功,看新 Pod 是否健康并接管流量。
  • Service 是回滚的“流量开关”:只要 Pod 标签不变,Service 自动跟随,无需额外操作。
  • ConfigMap/Secret 是回滚的“隐形依赖”:回滚 Deployment 时,必须确保引用的配置版本也回滚,否则可能引入配置漂移。
  • Namespace 是回滚的“安全边界”:回滚操作应限定在目标 Namespace,避免误操作影响其他环境。
最佳实践: 在自动化流水线中,建议将 ConfigMap/Secret 的版本号编码到 Deployment 的 Annotation 中(如 config-version: v1.2.3),回滚时通过版本比对确保配置一致性。