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 核心组件之间的数据流向与依赖关系,重点关注容器镜像的生命周期:

IDP 核心组件依赖关系与镜像流 IDP 核心组件依赖关系与镜像流 开发者门户 自助服务 / 环境管理 CI/CD 流水线 构建 / 扫描 / 打包 镜像仓库 存储 / 版本管理 Kubernetes 集群 调度 / 运行 触发构建 推送镜像 拉取镜像 环境配置 / 部署策略 故障域 F1:镜像依赖链路(CI/CD → 镜像仓库 → Kubernetes)—— 本次演练核心关注域

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 启动时间、镜像拉取错误日志。