作者:David Eads(@deads2k)、王泽锋(@kevin-wangzefeng)
目前的用户会知道,KubeFed[1]是对多个 Kubernetes 集群集中管理的早期解决方案——但随着自 2020 年以来社区参与该项目的速度放缓,它现在已经到了 EOL,许多人正在寻找替代方案。今天,我们有两个 CNCF 项目为 KubeFed 提出的问题提供了现代答案。Karmada[2]和Open Cluster Management(OCM)[3]拥有活跃的社区支持,他们将迎接挑战,管理混合和多云计算环境中的集群。
Kubernetes SIG KubeFed[4]项目允许用户从一个托管集群中的一组应用程序接口协调多个 Kubernetes 集群的配置。Federation v1 可以将服务分发到多个 Kubernetes 集群,但是不能处理其他类型的对象。该项目已被 Kubernetes-SIG 归档,从未成为核心功能。KubeFed v2 很快取代了 v1,并被世界各地的运营人员使用。它允许单个 Kubernetes 集群将多种对象部署到多个其他 Kubernetes 集群。KubeFed v2 还允许“控制平面”主集群管理其他集群,包括它们的资源和策略。
更广泛采用 KubeFed 的障碍:
考虑到推广 CRD 的困难和可扩展性的限制,KubeFed 项目中缺少解决这些问题的路线图或有意义的开发。让我们来看看两个被全球用户迅速采用的替代方案。
Karmada(Kubernetes Armada)是一个 Kubernetes 管理系统,使你能够跨多个 Kubernetes 集群和云运行你的云原生应用程序,而无需更改你的应用程序。通过使用 Kubernetes 原生的 API 和提供高级调度功能,Karmada 实现了真正开放的、多云端的 Kubernetes。
Karmada 旨在为多云和混合云场景中的多集群应用管理提供交钥匙自动化,具有集中式多云管理、高可用性、故障恢复和流量调度等关键功能。
作为Federation[5](v1)和KubeFed[6](v2)的天然继承者,Karmada 从这两个版本中继承了很多概念。例如:
更多细节请参考Karmada 概念[7]。
KubeFed 中的大部分功能都在 Karmada 中进行了改造。此外,Karmada 还提供了额外的功能,如更强大的调度策略、聚合 Kubernetes API,定制资源解释器、多集群服务发现、多集群入口等。
Open Cluster Management(OCM)提供了一个框架,使 Kubernetes 生态系统中的任何功能都能够跨多个集群和云提供商进行协调。内置原语允许理解集群清单、集群工作负载放置和集群工作负载分布。OCM 的中心代理模型允许新类型的代理行为被容易地注入到被管理的集群中。新行为可以进一步配置集群或收集关于集群的信息(如可观测性数据或搜索索引)。该项目还提供了两种现成的多集群功能:应用交付、编排和基于策略的治理。
这两个项目都准备好应对跨混合云和多云环境管理集群的挑战,但在解决这个问题时,它们有不同的理念。Karmada 提供更完整的全栈端到端解决方案。OCM 提供了一个强大的模块化框架和 API,使其他 Kubernetes 生态系统项目能够与之集成,以释放多集群功能。
在未来,将会有很多 Karmada 和 OCM 可以互补的使用案例。Kubernetes SIG-Multicluster 社区中的两个项目维护者之间已经有了一个正在进行的合作,以标准化 Work API,这是一个在集群之间分发 Kubernetes 对象的项目。
Kubernetes 社区正在拼命寻找 KubeFed 的替代品。今天,我们探讨了两个激动人心的项目 Karmada 和 Open Cluster Management,这两个项目都增强了多集群管理的规模和功能,远远超过了 KubeFed 提供的功能。我们呼吁 Kubernetes 社区尝试这两个项目,让我们继续朝着多集群的未来前进。
[1]
KubeFed: https://github.com/kubernetes-sigs/kubefed
[2]
Karmada: https://karmada.io/
[3]
Open Cluster Management(OCM): https://open-cluster-management.io/
[4]
KubeFed: https://github.com/kubernetes-sigs/kubefed
[5]
Federation: https://github.com/kubernetes-retired/federation
[6]
KubeFed: https://github.com/kubernetes-sigs/kubefed
[7]
Karmada 概念: https://karmada.io/docs/core-concepts/concepts
[8]
与 ArgoCD 集成: https://karmada.io/docs/userguide/cicd/working-with-argocd
[9]
与 Flux 集成: https://karmada.io/docs/userguide/cicd/working-with-flux
[10]
推和拉集群管理模式: https://karmada.io/docs/userguide/clustermanager/cluster-registration
[11]
“Hub-spoke”架构: https://open-cluster-management.io/concepts/architecture/#hub-spoke-architecture
[12]
Placement API: https://open-cluster-management.io/concepts/placement/
[13]
ManifestWork API: https://open-cluster-management.io/concepts/manifestwork/
[14]
Addon 框架: https://open-cluster-management.io/concepts/addon/
[15]
GitHub: https://github.com/kubernetes-sigs/kubefed
[16]
关于归档的讨论: https://groups.google.com/g/kubernetes-sig-multicluster/c/lciAVj-_ShE/m/-UMPGjFnBgAJ
[17]
主要概念: https://karmada.io/docs/core-concepts/concepts
[18]
GitHub: https://github.com/karmada-io/karmada
[19]
主要概念: https://open-cluster-management.io/concepts/
[20]
GitHub: https://github.com/open-cluster-management-io
[21]
GitHub: https://github.com/kubernetes-sigs/work-api
[22]
GitHub: https://github.com/kubernetes/community/blob/master/sig-multicluster/