Cross-Cluster Object Replication (HA) 架构指南
📅 撰写日期: 2026-03-24 | 修改日期: 2026-03-24 | ⏱️ 阅读时间: 约 12 分钟
📌 基准环境: EKS 1.32+, ArgoCD 2.13+, Flux v2.4+, Velero 1.15+
1. 概述
在生产环境中,如果依赖单个 EKS 集群,集群故障时会导致整个服务中断。Cross-Cluster Object Replication 是通过将 Kubernetes 对象(ConfigMap、Secret、RBAC、CRD、NetworkPolicy 等)一致地复制到多个集群来确保高可用性的策略。
当前状况
EKS 不提供托管的 Cross-Cluster Object Replication 功能。因此需要组合开源工具和架构模式来自行实现。本指南比较各模式的优缺点,并提供根据工作负载类型的选择标准。
本指南的范围
| 包含 | 不包含 |
|---|---|
| K8s 对象复制(ConfigMap、Secret、CRD、RBAC 等) | 应用数据复制(DB 副本) |
| 基于 GitOps 的声明式同步 | 基于服务网格的流量路由 |
| 有状态对象备份/恢复(Velero) | 存储层复制(EBS、EFS) |
| DNS 故障切换策略 | 应用级别 HA 模式 |
2. 多集群架构模式比较
实现 Cross-Cluster Object Replication 有三种核心模式。
Pattern 1: API Proxy(Push 模型)
中央路由层直接向各集群的 API Server 代理 CRUD 请求。
- 工作方式: 从中央向各集群直接 API 调用
- 优势: 轻量且直观
- 局限: 凭证安全薄弱、多集群 Watch 不可用、连接复杂度增加
Pattern 2: Multi-cluster Controller(Kubefed 系列)
中央控制器基于 Informer 的 List-Watch 监视各集群状态,并通过 CRD 同步。
- 工作方式: 中央控制器监视并同步各集群状态
- 优势: 动态集群发现、可应用 Federation 策略
- 局限: 10 个以上集群时 Watch 事件溢出、Informer 缓存大小限制、凭证明文存储风险
Kubefed 项目状态
Kubernetes SIG 已将 Kubefed(v2) 实质上置于维护模式。不建议在新项目中使用。
Pattern 3: Agent-based Pull 模型(推荐)
各集群的代理从中央源(Git 或 Hub 集群)Pull 目标状态并在本地 Reconcile。这与 kubelet 接收 Pod Spec 在本地运行的原理相同。
- 工作方式: 各集群代理独立 Pull 目标状态并本地 Reconcile
- 优势: 高扩展性、最终一致性、中央故障时本地仍可运行
- 局限: 需要在所有集群部署代理
模式综合比较
| 视角 | API Proxy | Multi-cluster Controller | Agent-based Pull |
|---|---|---|---|
| 工作方式 | 中央 → 集群 Push | 中央 Watch + CRD 同步 | 集群 → 中央 Pull |
| 扩展性 | 低(与连接数成正比) | 中(约 10 个集群) | 高(数百集群) |
| 复杂度 | 低 | 高 | 中 |
| 安全性 | 薄弱(多凭证) | 薄弱(明文存储) | 强(代理本地权限) |
| 故障隔离 | 低 | 中 | 高 |
| Drift Detection | 无 | 部分 |