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 容器的完整路径,以及配置对象的挂载关系。理解这张图,就能快速定位故障发生在哪一层。
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 对象关系总结
下图以分层视角展示这些对象在集群中的组织关系,帮助理解故障隔离边界:
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 流水线中为每次发布生成唯一的版本标签,并同时应用到这三个对象上,确保回滚时能整体切换。