3. 资源模型基础:Kubernetes 资源模型在单集群中的局限性
Kubernetes 原生资源模型(Pod、Service、Deployment、StatefulSet)在设计之初主要面向单一集群内的应用编排。当业务规模扩展到多集群、跨地域或混合云场景时,这些核心资源在单集群中的固有局限性会逐渐暴露,成为高可用架构的瓶颈。理解这些局限性,是设计多集群资源模型的前提。
3.1 核心资源单集群能力回顾
下表总结了四种核心资源在单集群内的职责与默认行为:
| 资源类型 | 核心职责 | 单集群默认行为 | 高可用依赖 |
|---|---|---|---|
| Pod | 最小调度单元,运行容器 | 绑定到单一节点,IP 随 Pod 重建变化 | 依赖控制器重建,无跨节点亲和性保证 |
| Service | 提供稳定的网络端点抽象 | ClusterIP 仅在集群内可达,DNS 解析范围限于集群 | 依赖 kube-proxy 实现节点级负载均衡 |
| Deployment | 管理无状态工作负载的声明式更新 | ReplicaSet 分布在同一集群的节点上 | 无法跨集群分布副本,集群故障即整体不可用 |
| StatefulSet | 管理有状态工作负载,提供稳定标识和存储 | Pod 名称和 PVC 绑定到集群内,迁移困难 | 跨集群数据同步和身份保持无原生支持 |
3.2 单集群资源模型的四大局限性
3.2.1 网络命名空间隔离:Service 无法跨集群发现
单集群中 Service 的 ClusterIP 和 DNS 记录(<service>.<namespace>.svc.cluster.local)仅在当前集群内有效。集群 A 的 Pod 无法直接通过 Service 名称访问集群 B 中的服务。这意味着跨集群的服务调用必须依赖外部负载均衡器、Ingress 网关或服务网格的跨集群能力,原生 Service 模型无法提供全局服务发现。
3.2.2 调度域限制:Deployment 副本无法跨集群分布
Deployment 的 ReplicaSet 控制器仅能在单个集群内的节点间调度 Pod。即使集群拥有充足的资源,所有副本仍集中在同一集群内。一旦该集群的控制平面或网络出现故障,所有副本将同时失联,无法实现跨集群的故障转移。
3.2.3 有状态身份绑定:StatefulSet 无法跨集群迁移
StatefulSet 为每个 Pod 分配稳定的网络标识(pod-name.service-name)和持久化存储(PVC)。这些标识和存储卷与集群内的节点及存储后端强绑定。当集群整体故障时,StatefulSet 无法在另一个集群中重建具有相同身份和数据的 Pod,导致有状态服务(如数据库、消息队列)的跨集群高可用难以实现。
3.2.4 控制平面单点:资源控制器无跨集群协调
Kubernetes 控制平面组件(kube-controller-manager、kube-scheduler)仅管理本集群内的资源。Deployment 控制器、StatefulSet 控制器等不具备跨集群协调副本分布、状态同步或流量切换的能力。所有跨集群的资源编排都需要外部工具或 Operator 来实现。
3.3 局限性带来的高可用风险矩阵
下表将上述局限性映射到具体的高可用风险场景:
| 局限性 | 故障场景 | 影响范围 | 恢复难度 |
|---|---|---|---|
| Service 跨集群不可见 | 集群 A 网络中断,集群 B 服务健康但无法被集群 A 客户端发现 | 跨集群服务调用中断 | 高(需手动更新 DNS 或 LB 配置) |
| Deployment 副本集中 | 集群 A 控制平面宕机,所有副本同时失联 | 无状态服务完全不可用 | 中(需在集群 B 重新部署) |
| StatefulSet 身份绑定 | 集群 A 存储后端故障,Pod 无法迁移到集群 B | 有状态服务数据丢失或不可用 | 极高(需跨集群数据恢复) |
| 控制器无跨集群协调 | 集群 A 故障后,无法自动在集群 B 创建替代资源 | 所有工作负载 | 高(依赖人工或外部工具) |
3.4 局限性根因分析
单集群资源模型的局限性根源于 Kubernetes 架构的两个基本假设:
- 集群边界即故障域边界: 控制平面、etcd、网络、存储均以集群为单位部署,集群故障意味着所有资源不可用。
- 资源标识与集群绑定: Pod IP、Service ClusterIP、PVC 名称等标识在集群内唯一,跨集群无法复用或解析。
3.5 从单集群到多集群:资源模型演进方向
针对上述局限性,多集群资源模型需要在以下维度进行扩展:
- 全局服务发现: 将 Service 的 DNS 解析范围扩展到多集群,支持跨集群端点聚合。
- 跨集群调度策略: 使 Deployment/StatefulSet 的副本能够分布到多个集群,并支持故障转移。
- 有状态资源抽象: 解耦 Pod 身份与集群,实现 StatefulSet 的跨集群迁移和存储同步。
- 统一控制平面: 引入多集群资源控制器,协调跨集群的资源生命周期。