news 2026/9/1 5:30:40

【Kubernetes从入门到精通】第88篇:多集群管理实战——从单集群到联邦集群的进化之路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Kubernetes从入门到精通】第88篇:多集群管理实战——从单集群到联邦集群的进化之路

上一篇【第87篇】微服务应用K8s化改造实战——从传统部署到云原生
下一篇【第89篇】K8s + AI/ML——在K8s上运行机器学习工作负载


摘要

单集群玩得再溜,也架不住业务真上规模——一个集群挂了全公司停摆、一个地域延迟高用户骂街、被一家云厂商锁死不敢动。这时候就得"多集群"。

但多集群不是"再装一个K8s"那么简单:应用怎么同时发到几个集群?一个集群挂了流量怎么切走?配置怎么保持一致?这篇把多集群的核心动机、KubeFed v2的联邦模型、以及Karmada等现代方案一次讲清,顺便聊聊跨集群服务发现和流量调度这些真正难的活。


一、为什么需要多集群:单集群的三道天花板

先说清楚,不是炫技才上多集群,是单集群真有物理天花板:

【单集群的天花板】 1. 故障域单一 一个控制平面挂 → 整个集群失联(哪怕节点都活着) 一次etcd脑裂 → 全集群写入瘫痪 2. 地域延迟 集群在华东, 华南用户访问绕半圈 合规要求数据不出境(数据主权) 3. 厂商锁定 全在A云, 想迁B云? 重来一遍 某云region故障 → 业务全断

由此引出多集群的三大驱动力:

要点:多集群通常不是"为了技术",而是为了隔离故障域、贴近用户、不绑定单一厂商。先把动机想清楚,再选方案,不然容易为联邦而联邦。

驱动力典型场景架构形态
高可用/灾备主集群挂了切备用同城双活 / 异地灾备
低延迟用户分散多地域多地域就近接入
混合云/多云不绑定厂商、用便宜资源自有IDC + 公有云

二、KubeFed v2:联邦控制面长啥样

KubeFed(Kubernetes Federation v2)是社区早期的联邦方案,思路很清晰:再起一个"联邦控制面",它去管你底下的一堆成员集群

【KubeFed 架构】 ┌─────────────────────────────┐ │ 联邦控制面 (Federation) │ │ ┌───────────────────────┐ │ │ │ federated-apiserver │ │ │ │ federated-controller │ │ │ └───────────────────────┘ │ └───────┬───────────┬─────────┘ │ │ ┌─────▼───┐ ┌────▼─────┐ │ 集群A │ │ 集群B │ ← 普通K8s集群, 各自独立 │(华东) │ │(华北) │ └─────────┘ └──────────┘

核心概念三个:

  • FederatedTypeConfig:告诉联邦"我要管哪些资源类型"(Deployment/Service/ConfigMap…)。不配置的就不联邦。
  • FederatedResource(如FederatedDeployment):在普通Deployment外面套一层,描述"这个Deployment要发到哪些集群、各发几份"。
  • Placement / ReplicaSchedulingPreference:决定分发策略——发到哪几个集群、副本怎么分配。

一个FederatedDeployment长这样:

apiVersion:types.kubefed.io/v1beta1kind:FederatedDeploymentmetadata:name:order-servicenamespace:shopspec:template:# 这就是普通的Deployment specmetadata:labels:{app:order-service}spec:replicas:6template:spec:containers:-name:order-serviceimage:registry.example.com/order-service:1.5.0placement:clusters:-name:cluster-east# 发到华东-name:cluster-north# 发到华北overrides:-clusterName:cluster-eastclusterOverrides:-path:/spec/replicasvalue:4# 华东放4副本-clusterName:cluster-northclusterOverrides:-path:/spec/replicasvalue:2# 华北放2副本(用户少)

要点:KubeFed的优雅之处在于**“声明一次,多集群落地”**——你只写一份FederatedDeployment,联邦控制器帮你把真正的Deployment同步到每个成员集群,还能按集群差异化覆盖副本数、镜像等。


三、副本怎么分:ReplicaSchedulingPreference

光指定"发到哪"不够,副本怎么切也讲究。RSP(ReplicaSchedulingPreference)支持按权重、按集群容量动态分配:

apiVersion:scheduling.kubefed.io/v1alpha1kind:ReplicaSchedulingPreferencemetadata:name:order-servicenamespace:shopspec:targetKind:FederatedDeploymenttotalReplicas:10clusters:cluster-east:weight:3# 华东权重3cluster-north:weight:1# 华北权重1# 结果: 华东 7.5→8, 华北 2.5→2 (按权重近似)

这比手工写固定副本数灵活:集群扩缩容后权重自动再平衡。


四、KubeFed的尴尬与现代替代:Karmada

说实话,KubeFed v2到后来社区基本停滞了——它侵入式地要求你改YAML(写FederatedXxx),而且跨集群服务发现、流量治理这种硬骨头它没解决好。于是出现了更现代的方案,代表是Karmada

【Karmada 思路: 更接近"多集群的K8s"】 Karmada 控制面 ├── karmada-apiserver (兼容K8s API!) ├── karmada-scheduler (把资源调度到成员集群) └── karmada-controller 关键差别: 你写的还是原生 Deployment/Service YAML! 只是通过 "PropagationPolicy" 决定发到哪些集群 → 不用学一套新API, 迁移成本低
# 原生Deployment照写, 另外配一个分发策略apiVersion:policy.karmada.io/v1alpha1kind:PropagationPolicymetadata:name:order-propnamespace:shopspec:resourceSelectors:-apiVersion:apps/v1kind:Deploymentname:order-serviceplacement:clusterAffinity:clusterNames:[cluster-east,cluster-north]spreadConstraints:-spreadByField:clustermaxGroups:2# 至少分到2个集群

要点:Karmada相比KubeFed最大的进步是**“API兼容”**——你继续写原生K8s YAML,用一份PropagationPolicy描述分发意图,不用把每个资源都改写成Federated类型。这也是它现在更受欢迎的原因。


五、真正难的活:跨集群服务发现与流量

联邦把"资源分发"解决了,但用户访问时的问题是:我该打到哪个集群?集群A挂了怎么切到B?

【跨集群流量调度】 用户 │ ▼ 全局负载均衡(GSLB / DNS 按地域) │ ├── 华东用户 → 集群A Ingress └── 华北用户 → 集群B Ingress 集群间: - 服务发现: 各集群独立Service, 靠外部GSLB分流 - 数据同步: 数据库主从/多活(不在K8s职责内) - 故障切换: 健康检查失败 → DNS/Anycast切走

主流做法分两层:

  • 南北向(用户→集群):靠云厂商GSLB、DNS按地域解析、或Cloudflare/Alb等做全局流量管理。集群挂了就把解析切走。
  • 东西向(集群↔集群):如果集群间要互相调用,用Cilium Cluster Mesh或Submariner(第050篇讲过的多集群网络)打通Pod网络,让A集群的Pod能直接访问B集群的Service。

要点:多集群的"难"不在分发,在状态与流量。无状态服务好办(分发+GSLB),有状态服务(数据库)的多活/主从才是噩梦——这部分通常不在K8s层解决,而靠数据库自身的主从复制。


六、多集群可观测性

多个集群,监控也不能各看各的。常见两种思路:

方案做法适合
全局Prometheus各集群remote-write到中心Prometheus集群数不多、网络稳
Thanos / Cortex各集群Prometheus本地存,全局查询层聚合大规模、长期存储
多集群Grafana一个Grafana配多个数据源轻量统一看板
# 各成员集群的Prometheus加remoteWrite(示例)global:remote_write:-url:http://thanos-receiver.federation.svc:19291/api/v1/receive

七、选型建议

你的处境推荐
只是灾备用,平时一个主一个备主备 + Velero定期备份(第082篇),别上联邦
多地域低延迟,无状态服务多GSLB分流 + Karmada分发
混合云不想绑定厂商Karmada + 各云原生CSI/CNI
集群间要Pod直连调用Cilium Cluster Mesh / Submariner(第050篇)
只是想统一管理kubectlkubectl context 切换 + 轻量面板即可

要点:很多团队一上来就上联邦,结果90%的集群从来不会切换,纯增加复杂度。先问"真有多集群故障切换需求吗",没有就主备+备份够了,别为联邦而联邦。


本篇小结

多集群是单集群撞上故障域、地域延迟、厂商锁定三道天花板后的必然选择。KubeFed v2用"联邦控制面+一套Federated资源"实现了声明一次多集群落地,但侵入式API和跨集群服务治理短板让它逐渐边缘化;Karmada用"原生YAML + PropagationPolicy"的兼容思路成了更主流的现代方案。

但要记住:分发容易,流量和状态难。无状态服务靠GSLB分流+联邦分发即可,有状态服务多活才是硬骨头。别为了联邦而联邦——没真实切换需求,主备+Velero备份往往更省心。下篇换个"重"话题:在K8s上跑AI/ML工作负载。


上一篇【第87篇】微服务应用K8s化改造实战——从传统部署到云原生
下一篇【第89篇】K8s + AI/ML——在K8s上运行机器学习工作负载


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 5:27:30

三步拆解法:快速看懂复杂电路原理图的底层思维与实战技巧

你有没有过这样的经历:面对一张密密麻麻、线条交错、符号林立的电路原理图,感觉就像在看天书?明明想修个设备、做个DIY,或者只是想理解一个模块的工作原理,却被这张图挡在了门外。你可能会想,这得是电子工程…

作者头像 李华
网站建设 2026/9/1 5:27:17

微调嵌入模型:解决RAG系统语义鸿沟,提升领域知识库检索精度

如果你正在构建一个企业级的RAG(检索增强生成)知识库,是否遇到过这样的困境:用户问“如何配置SSL证书”,但你的知识库文档里写的是“HTTPS加密设置指南”?明明意思相同,却因为词汇差异&#xff…

作者头像 李华
网站建设 2026/9/1 5:27:13

2024百度数据面试题复盘:真题拆解与作答思路

2024年百度数据面试题复盘:从真题拆解到作答思路,这份清单帮你少走弯路年初帮几位朋友做百度数据岗的模拟面试辅导,发现一个共性问题:简历上项目写得很满,一到现场却被同一个类型的问题卡住——不是不会做,…

作者头像 李华
网站建设 2026/9/1 5:26:13

建议收藏|盘点2026年好评如潮的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。最新测评显示,2026年AI论文写作工具正在颠覆传统写作方式,覆盖选题构思、文献综述、内容生成、格式排版等全流程场景,实测提速超300%,高效搞定论文不再是梦。 一、全流程王者&#xff…

作者头像 李华
网站建设 2026/9/1 5:24:04

TabNSM:面向表格数据的神经稀疏混合器架构解析与实战

如果你正在处理表格数据(Tabular Data),比如金融风控、医疗诊断、电商推荐,你大概率遇到过这样的困境:传统的梯度提升树(如 XGBoost、LightGBM)效果稳定但模型复杂、可解释性差;而深…

作者头像 李华
网站建设 2026/9/1 5:22:53

大模型降价引发杰文斯悖论,开发者成本策略如何调整?

随着大模型逐步进入生产环境,一个过去只出现在经济学教材里的概念——杰文斯悖论(Jevons Paradox),开始频繁出现在 AI 技术讨论中。GPT 5.6 价格调整后,用户调用量出现了约 13.8 倍的增长,不少团队第一次真…

作者头像 李华