2. Kubernetes 集群管理基础:单集群 vs 多集群、集群生命周期管理挑战、声明式集群管理理念

2.1 单集群架构的局限性与多集群的必然性

在 Kubernetes 的早期实践阶段,大多数团队从单集群起步。单集群架构在开发测试、小规模生产环境中表现良好,但随着业务规模扩大、合规要求增加以及容灾需求的提升,单集群的局限性逐渐暴露。

核心认知: 单集群不是错误的选择,而是成长的起点。当集群规模超过 5000 节点、或需要跨区域部署、或必须满足数据主权隔离时,多集群架构便成为必然。
对比维度 单集群 多集群
故障域 控制平面单点,etcd 故障影响全局 故障隔离,单个集群宕机不影响其他集群
升级风险 原地升级影响所有工作负载 滚动升级,逐个集群迁移流量
资源配额 共享资源池,租户间互相干扰 物理隔离,按集群分配资源上限
网络延迟 所有 Pod 在同一网络域 可部署到不同区域,降低用户延迟
合规性 数据存储位置单一 按地域/法规要求部署独立集群
管理复杂度 低,单一 API Server 高,需要统一管理平面

多集群架构并非简单地将多个集群拼凑在一起,而是需要一套标准化的生命周期管理机制来应对以下核心挑战。

2.2 集群生命周期管理的四大挑战

手动管理一个集群已经需要大量运维精力,当集群数量增长到数十甚至上百个时,传统的手动或脚本化方式将彻底失效。以下是多集群生命周期管理中最突出的四个挑战:

  1. 创建一致性 —— 每个集群的 Kubernetes 版本、CNI 插件、存储配置、节点规格必须保持一致,否则将导致环境差异和"在我机器上能跑"的问题。
  2. 升级编排 —— 跨集群的版本升级需要规划顺序、灰度策略、回滚方案,且不能影响全局业务连续性。
  3. 扩缩容自动化 —— 工作节点组的弹性伸缩、控制平面的高可用调整,必须与集群状态联动。
  4. 回收与清理 —— 临时集群或过期环境的释放需要彻底清理云资源、DNS 记录、证书和负载均衡器,避免资源泄漏。
常见误区: 很多团队使用 Shell 脚本 + kubectl 来管理集群生命周期。这种方式在 3-5 个集群时尚可应付,一旦超过 10 个集群,脚本的维护成本、错误处理能力和状态追踪能力将急剧下降,最终成为运维瓶颈。

下图展示了多集群生命周期中从创建到回收的完整流程,以及每个阶段需要关注的关键操作:

多集群生命周期管理流程 1. 集群创建 版本/网络/存储 2. 配置注入 RBAC/监控/日志 3. 运行维护 升级/扩缩容/监控 4. 集群回收 清理资源 核心挑战:创建一致性 · 升级编排 · 扩缩容自动化 · 回收与清理 创建一致性 • 版本锁定:kubelet/kube-apiserver 版本一致 • 网络插件:CNI 配置模板化 • 节点规格:CPU/内存/磁盘标准化 升级编排 • 灰度策略:金丝雀集群先行 • 回滚方案:保留旧版本快照 • 流量切换:Ingress/DNS 逐步迁移 扩缩容自动化 • 节点组弹性:基于负载自动扩缩 • 控制平面 HA:自动修复 etcd 成员 • 状态联动:扩缩容不影响运行中 Pod 回收与清理 • 云资源释放:VM/磁盘/LB 全部删除 • DNS 记录清理:避免域名残留 • 证书吊销:TLS 证书及时撤销

2.3 声明式集群管理理念

面对上述挑战,业界逐渐形成共识:集群管理应该像应用部署一样,采用声明式(Declarative)而非命令式(Imperative)的方式。声明式管理的核心思想是:用户描述"集群应该是什么样子",系统负责"如何达到这个状态"。

类比理解: 命令式管理就像给厨师一步步指令——"先切洋葱,再热油,然后翻炒";声明式管理就像告诉厨师"我要一份宫保鸡丁"——厨师知道最终目标,自行决定烹饪步骤。Kubernetes 本身正是声明式管理的典范:你提交 Deployment YAML,控制器负责将集群调整到期望状态。

声明式集群管理在 CAPI(Cluster API)中的具体体现:

  • 集群对象(Cluster) —— 描述集群的完整规格,包括控制平面配置、网络拓扑、基础设施提供商信息。
  • 机器模板(MachineTemplate) —— 定义工作节点的镜像、规格、启动脚本等不可变配置。
  • 集群资源集(ClusterResourceSet) —— 声明集群创建后需要自动应用的附加组件(如 CNI、CSI、监控 Agent)。
  • 自动修复(Self-Healing) —— 当集群状态偏离期望状态时,CAPI 控制器自动执行修正操作。

下图展示了声明式集群管理的核心工作流:用户提交期望状态,CAPI 控制器通过 reconcile 循环驱动实际状态向期望状态收敛:

声明式集群管理核心工作流 用户 提交期望状态 YAML Kubernetes API 存储期望状态 CAPI Controller Reconcile 循环 基础设施 云/裸金属 状态反馈:实际状态 vs 期望状态 声明式管理优势 • 可版本控制:所有集群配置存储在 Git 中 • 可审计追溯:每次变更都有记录 • 自动修复:偏离期望状态时自动纠正 • 标准化交付:消除环境差异

2.4 从命令式到声明式的思维转变

对于习惯了 SSH 到节点执行命令的运维工程师来说,声明式管理需要一次思维上的跃迁。以下表格总结了两种模式的关键差异:

维度 命令式管理 声明式管理
操作方式 执行命令:kubeadm init、kubectl scale 提交 YAML:kubectl apply -f cluster.yaml
状态追踪 依赖脚本日志和人工记录 etcd 中持久化存储期望状态
错误恢复 需要人工介入排查和修复 控制器自动重试和回滚
变更回滚 手动逆向操作,容易遗漏 kubectl apply -f 旧版本.yaml 即可回滚
团队协作 依赖个人经验和文档 GitOps 工作流,代码审查驱动
实践建议: 在引入 CAPI 之前,建议团队先在单个集群上实践声明式管理理念——将所有集群配置(包括节点池、RBAC、网络策略)以 YAML 形式管理,并纳入 Git 版本控制。当团队熟悉了"期望状态驱动"的工作方式后,再过渡到 CAPI 的多集群管理将更加平滑。