2. K8s 核心概念回顾:Pod、Deployment、Service、Ingress、ConfigMap、Secret 的核心作用与关系

在深入自动化回滚与故障排查之前,必须对 Kubernetes 的核心抽象层有清晰的认知。这些对象构成了应用从部署、暴露到配置管理的完整链路。任何一个环节的配置错误,都可能导致回滚触发或故障扩散。

2.1 核心对象一览

下表总结了六个核心对象的作用域与职责,这是后续排查的“坐标系”:

对象 API 组 / 版本 作用域 核心职责 与回滚的关联
Pod v1 Namespaced 最小调度单元,运行容器 回滚最终影响 Pod 版本;Pod 异常是回滚触发信号
Deployment apps/v1 Namespaced 声明式更新与回滚,管理 ReplicaSet 回滚操作的主要执行者;保留历史版本
Service v1 Namespaced 提供稳定的网络端点,负载均衡 回滚期间需保持端点可达,避免流量中断
Ingress networking.k8s.io/v1 Namespaced 七层路由,域名/路径分发 回滚后需确保路由规则与新 Pod 版本匹配
ConfigMap v1 Namespaced 存储非机密配置数据 配置错误导致故障;回滚时需检查配置版本一致性
Secret v1 Namespaced 存储敏感数据(密码、、证书) Secret 变更可能引发认证失败;回滚需谨慎处理
排查提示: 在故障场景中,80% 的“回滚后仍然异常”问题,根源在于 ConfigMap 或 Secret 未随 Deployment 一起回滚,导致新 Pod 使用了旧配置。

2.2 对象关系与数据流

下图展示了从用户请求到 Pod 容器的完整路径,以及配置对象的挂载关系。理解这张图,就能快速定位故障发生在哪一层。

K8s 核心对象关系与数据流 用户 / Client Ingress Service Deployment Pod (v1) 容器 A 容器 B (Sidecar) ConfigMap Secret HTTP(s) 路由转发 标签选择器 管理 ReplicaSet 挂载 / 环境变量 挂载 / 环境变量 📌 故障排查关键路径: 1. 用户请求 → Ingress 路由 → Service 负载均衡 → Pod 容器 2. 配置变更 → ConfigMap/Secret 更新 → Pod 重新挂载(需重建或重启)

2.3 各对象在回滚场景中的角色

2.3.1 Pod:回滚的最终作用单元

  • 不可变基础设施: Pod 一旦创建,不应直接修改;回滚通过替换整个 Pod 实现。
  • 健康检查: livenessProbe 和 readinessProbe 是回滚自动触发的重要信号源。
  • 故障表现: CrashLoopBackOff、ImagePullBackOff、OOMKilled 等状态直接驱动回滚决策。

2.3.2 Deployment:回滚的执行引擎

  • 版本管理: 每次更新都会生成一个新的 ReplicaSet,并保留历史版本(默认保留 10 个)。
  • 回滚命令: kubectl rollout undo deployment/<name> --to-revision=<N>
  • 回滚策略: 支持 Recreate(重建)和 RollingUpdate(滚动更新),后者是生产默认策略。
回滚护栏关键点: Deployment 的 revisionHistoryLimit 字段决定了可回滚的版本数量。如果设置过小(如 1),将无法回滚到较旧版本。建议生产环境设置为 5~10。

2.3.3 Service:流量稳定器

  • 标签选择器: Service 通过 selector 匹配 Pod 标签。回滚后新 Pod 的标签必须与 Service 匹配,否则流量中断。
  • Session Affinity: 如果启用了会话保持,回滚可能导致用户会话丢失,需在回滚策略中考虑。

2.3.4 Ingress:七层路由网关

  • 路由规则: Ingress 将外部请求路由到内部 Service。回滚后需确认后端 Service 名称和端口未变。
  • TLS 证书: 证书信息通常存储在 Secret 中,回滚 Secret 可能导致 HTTPS 中断。

2.3.5 ConfigMap & Secret:配置与敏感数据

  • 独立于 Deployment 的生命周期: ConfigMap/Secret 的更新不会自动触发 Pod 重启。需要手动触发滚动更新或使用工具(如 Reloader)。
  • 回滚陷阱: 如果只回滚 Deployment 而不回滚 ConfigMap/Secret,Pod 可能使用旧配置启动,导致“回滚后仍然异常”。
  • 挂载方式: 环境变量方式(envFrom)在 Pod 启动时注入;卷挂载方式(volumes)支持热更新(但需应用支持监听文件变化)。

2.4 对象关系总结

下图以分层视角展示这些对象在集群中的组织关系,帮助理解故障隔离边界:

K8s 对象分层架构 Ingress 七层路由、TLS 终止、域名分发 Service 四层负载均衡、稳定 ClusterIP、DNS 解析 Deployment 声明式更新、回滚、ReplicaSet 管理 Pod 容器运行时、IP 地址、存储卷、健康检查 ConfigMap Secret 配置注入

2.5 常见故障模式与对象关联

故障现象 可能涉及的对象 排查方向
Pod 一直处于 Pending Pod、Deployment 资源不足、PVC 未就绪、节点污点
Pod 反复重启(CrashLoopBackOff) Pod、ConfigMap、Secret 配置错误、环境变量缺失、镜像拉取失败
服务无法访问(Connection Refused) Service、Pod 标签选择器不匹配、Pod 未就绪、端口错误
外部域名访问超时 Ingress、Service、Secret 路由规则错误、TLS 证书过期、后端 Service 不存在
回滚后应用仍异常 Deployment、ConfigMap、Secret 配置未回滚、数据库 schema 不兼容、缓存未刷新
⚠️ 回滚护栏核心原则: Deployment、ConfigMap、Secret 三者必须保持版本一致性。建议在 CI/CD 流水线中为每次发布生成唯一的版本标签,并同时应用到这三个对象上,确保回滚时能整体切换。