IDP 平台架构回顾:核心组件与故障域定义
在深入故障排查演练之前,必须对平台工程 IDP(Internal Developer Platform)的架构建立统一认知。本章将拆解 IDP 的四大核心组件,并基于组件间的依赖关系定义故障域,为后续的容器镜像依赖故障定位奠定基础。
2.1 四大核心组件及其职责
一个典型的平台工程 IDP 由以下四个关键组件构成,它们共同支撑起从代码提交到生产运行的完整链路:
| 组件 | 核心职责 | 典型技术选型 | 故障影响范围 |
|---|---|---|---|
| 开发者门户 | 提供自助服务界面、环境管理、API 目录、文档与治理策略 | Backstage, Port, Cortex | 开发者体验、环境创建、服务注册 |
| CI/CD 流水线 | 代码构建、单元测试、安全扫描、制品打包与部署编排 | GitLab CI, Jenkins, Argo Workflows | 构建失败、部署阻塞、版本回退 |
| 镜像仓库 | 存储容器镜像、管理镜像版本、提供拉取/推送接口 | Harbor, Docker Registry, ECR | 镜像拉取失败、依赖缺失、部署超时 |
| Kubernetes 集群 | 运行容器化应用、管理资源调度、提供服务发现与弹性伸缩 | Kubernetes, OpenShift, Rancher | Pod 启动失败、服务不可用、资源争抢 |
关键认知: 镜像仓库是 IDP 架构中的“依赖枢纽”。CI/CD 流水线将构建产物推送到镜像仓库,Kubernetes 集群从镜像仓库拉取镜像启动 Pod。一旦镜像仓库出现故障,上下游组件将同时受到影响,形成典型的级联故障。
2.2 组件间依赖关系与数据流
下图展示了 IDP 核心组件之间的数据流向与依赖关系,重点关注容器镜像的生命周期:
2.3 故障域定义与划分原则
故障域(Failure Domain)是指系统中一组共享相同故障风险的组件集合。在 IDP 场景下,我们基于依赖链和资源边界进行划分:
- 依赖链故障域: 以镜像仓库为中心,向上游 CI/CD 流水线、向下游 Kubernetes 集群辐射。镜像仓库不可用将导致构建产物无法推送、Pod 无法拉取镜像启动。
- 资源边界故障域: Kubernetes 集群内的节点故障、网络分区、存储故障。这类故障通常影响局部工作负载,但可能因镜像拉取失败而扩大。
- 配置故障域: 开发者门户中的环境配置、镜像标签策略、RBAC 权限错误。配置错误往往导致镜像拉取被拒绝或部署到错误环境。
本次演练聚焦: 容器镜像依赖故障属于依赖链故障域。我们将模拟镜像仓库中基础镜像被删除、镜像标签被覆盖、镜像仓库证书过期三种典型故障场景,观察故障如何沿依赖链传播并影响 CI/CD 流水线和 Kubernetes 集群。
2.4 故障域隔离策略概览
针对上述故障域,IDP 平台工程团队应建立以下隔离策略:
| 故障域 | 隔离策略 | 预期效果 |
|---|---|---|
| 镜像仓库故障 | 多区域镜像仓库同步、本地缓存代理、镜像拉取重试与回退 | 单点故障不影响全局部署 |
| CI/CD 流水线故障 | 流水线状态持久化、构建产物异地备份、流水线版本控制 | 故障后可恢复构建状态 |
| Kubernetes 集群故障 | 多集群部署、Pod 反亲和、镜像拉取策略(ImagePullPolicy)配置 | 故障集群不影响其他集群 |
| 配置错误故障 | 配置变更审批、自动化校验、不可变镜像标签策略 | 阻止错误配置传播到生产 |
常见误区: 很多团队只关注 Kubernetes 集群本身的故障域(如节点宕机、Pod 崩溃),却忽略了镜像仓库作为“依赖源头”的故障风险。在后续演练中,你将看到镜像仓库的一个小故障如何导致整个部署链路瘫痪。
2.5 故障域隔离演练的边界定义
本次演练将严格限定在以下边界内:
- 演练范围: 镜像仓库与 CI/CD 流水线、Kubernetes 集群之间的镜像依赖链路。
- 不涉及: 开发者门户本身的 UI 故障、Kubernetes 集群内部应用逻辑故障、网络基础设施故障。
- 故障注入方式: 通过修改镜像仓库中的镜像标签、删除基础镜像、模拟证书过期来触发故障。
- 验证指标: 流水线构建成功率、Pod 启动时间、镜像拉取错误日志。