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 模型无法提供全局服务发现。

典型痛点: 当集群 A 的数据库主库故障,期望将流量切换到集群 B 的从库时,应用无法通过原生 Service 自动感知集群 B 的端点变化。

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 来实现。

单集群资源模型局限性示意 集群 A(主集群) Deployment StatefulSet Service A Pod 副本 控制平面故障 / 网络分区 所有副本不可用 集群 B(备用集群) Deployment StatefulSet Service B Pod 副本 Service 无法跨集群发现 副本无法跨集群分布 资源控制器无跨集群协调能力 单集群故障导致所有资源不可用,备用集群无法自动接管

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 从单集群到多集群:资源模型演进方向

针对上述局限性,多集群资源模型需要在以下维度进行扩展:

  1. 全局服务发现: 将 Service 的 DNS 解析范围扩展到多集群,支持跨集群端点聚合。
  2. 跨集群调度策略: 使 Deployment/StatefulSet 的副本能够分布到多个集群,并支持故障转移。
  3. 有状态资源抽象: 解耦 Pod 身份与集群,实现 StatefulSet 的跨集群迁移和存储同步。
  4. 统一控制平面: 引入多集群资源控制器,协调跨集群的资源生命周期。
资源模型演进:从单集群到多集群 单集群资源模型 Service / Deployment / StatefulSet 集群边界 = 故障域边界 资源标识与集群绑定 演进 多集群资源模型 全局服务发现 / 跨集群调度 跨集群故障转移 / 状态同步 统一控制平面协调 打破集群边界,实现资源跨集群高可用
关键认知: 不要试图在单集群内通过增加节点或优化调度来弥补上述局限性。多集群高可用的核心在于资源模型的跨集群扩展,而非单集群的垂直优化。后续章节将逐一介绍如何通过多集群资源抽象(如 ClusterSet、Work 对象、ServiceExport)来解决这些问题。