基于Clusternet与OCM打造新一代开放的多集群管理平台
背景
随着5G、物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘。“新基建”战略的实施,工业互联网、车联网/自动驾驶、智慧交通、云游戏及VR/AR等标杆应用引领产业融合,企业上云常态化,催生出分布式云,混合云,边缘云等概念。Gartner预计到2025年,超过50%的组织将在其选择的地点使用分布式云选项,从而实现业务模型转型。企业生成的75%的数据将在传统数据中心或云之外的,更接近最终用户的边缘创建和处理。
云计算行业正在迎来了新一轮的增长,国内外厂商和开源社区率先行动,分别发布并开源了Open Cluster Management(OCM)项目和Clusternet项目,统一管理多云多集群下的Kubernetes应用,将云原生下沉实现云边端一体化。基于OCM与Clusternet打造新一代开放的多集群管理系统,管理从中心到边缘,从机房到终端的“集群网络”。
Clusternet
Clusternet(Cluster Internet)是腾讯开源的多集群和应用管理软件,无论集群是运行在公有云、私有云、混合云还是边缘云上,Clusternet都可以让您像在本地运行一样管理/访问它们,用Kubernetes API集中部署和协调多集群的应用程序和服务。通过Addon插件方式,用户可以一键安装、运维及集成,轻松地管理数以百万计的Kubernetes集群,就像访问Internet一样自由便捷。
Clusternet面向未来混合云、分布式云和边缘计算场景设计,支持海量集群的接入和管理,灵活的集群注册能力可以适应各种复杂网络条件下的集群管理需求,通过兼容云原生的Kubernetes API简化用户的管理和运维成本,加快用户业务的云原生转型。
Clusternet为用户提供:
一站式管理各类Kubernetes集群
Clusternet支持Pull模式和Push模式管理集群。即使集群运行在VPC内网中、边缘或防火墙后时,Clusternet仍可建立网络隧道连接管理集群。
支持跨集群的服务发现及服务互访
在无专网通道的情况下,仍可提供跨集群的访问路由。
完全兼容原生Kubernetes API
完全兼容Kubernetes的标准API,比如:Deployment,StatefulSet,DaemonSet,同时也包括用户自定义的CRD等,用户从单集群应用升级到多集群只需做简单的配置,无需学习复杂的多集群API。
支持部署Helm Chart、Kubernetes原生的应用以及自定义的CRD
支持Helm chart类型应用,包括Chart的分发、差异化配置、状态的汇聚等,和原生Kubernetes API的能力一致。
丰富、灵活的配置管理
提供了多种类型的配置策略,用户可灵活的搭配这些配置来实现复杂的业务场景,比如多集群灰度发布。
Addon能力,架构简单
采用了Aggregated ApiServer的方式,且不依赖额外的存储,架构简单,便于部署,大大降低了运维复杂度。
便捷接入
Clusternet提供了完善的对接能力,支持kubectl plugin[1]以及client-go[2],方便业务一键接入,具备管理多集群的能力。
OCM(Open Cluster Management)
OCM(Open Cluster Management)是一个社区驱动的项目,专注于Kubernetes应用的多集群和多云场景。OCM旨在简化部署在混合环境下的多Kubernetes集群的管理工作,为Kubernetes生态圈不同管理工具拓展多集群管理能力。OCM总结了多集群管理所需的基础概念,采用了hub-agent的架构,定义了多项多集群管理的原语和基础组件来达到多集群管理的要求:
·通过ManagedCluster API定义被管理的集群,同时OCM会安装名为Klusterlet的agent在每个集群里来完成集群注册,生命周期管理等功能。
·通过Placement API定义如何将配置或工作负载调度到哪些集群中。调度结果会存放在PlacementDecision API中。其他的配置管理和应用部署工具可以通过PlacementDecision决定哪些集群需要进行配置和应用部署。
·通过ManifestWork API定义分发到某个集群的配置和资源信息。
·通过ManagedClusterSet API对集群进行分组,并提供用户访问集群的界限。
·通过ManagedClusterAddon API定义管理探针如何部署到多个集群中以及其如何与hub端的控制面进行安全可靠的通信。
·通过利用OCM的API原语,简化了开源多集群管理项目的部署和运维,拓展许多Kubernetes的单集群管理工具的多集群管理能力。例如:
·简化submariner等多集群网络解决方案的管理。利用OCM的插件管理功能将submariner的部署和配置集中到统一的管理平台上。
·为应用部署工具(KubeVela,ArgoCD等)提供丰富的多集群负责调度策略和可靠的资源分发引擎。
·拓展现有的Kubernetes单集群安全策略治理工具(Open Policy Agent,Falco等)使其具有多集群安全策略治理的能力。
OCM还通过内置的两个管理插件分别用来进行应用部署和安全策略管理。其中应用部署插件采用了订阅者模式,可以通过定义订阅通道(Channel)从不同的源获取应用部署的资源信息。
Clusternet与OCM结合迸发更强大能力
通过上文介绍可以看出,Clusternet有着强大的集群接入和管理能力,支持各种复杂场景下的海量集群注册和管理,满足对未来混合云、分布式云和边缘计算的平台管理需求。同时,OCM有着成熟的多集群应用管理能力,通过多项多集群管理的原语和基础组件,实现各种Kubernetes项目和应用的多集群发布和管理。二者结合实现优势互补,强强联合,提供更为强大的多集群和应用治理能力。
如何将OCM与Clusternet的能力相结合,来自Redhat的社区开发者(github:skeeey[3])实现了clusternet-addon[4],基于OCM的Addon-Framework[5],展示了OCM可以借助于Clusternet提供的强大集群管理能力,实现通过RBAC对子集群进行访问、通过Push模式分发应用到多个子集群中等。OCM社区将与Clusternet社区紧密合作,将与Clusternet项目的集成作为一个子项目持续推进。
感兴趣的同学可以查看clusternet-addon[6]了解更多信息,或持续关注OCM和Clusternet项目社区获取最新的动态。
参与社区
OCM与Clusternet项目是Red Hat红帽软件,Tencent腾讯云与合作伙伴开源的重要项目,二者的结合展现了下一代开放的多集群管理平台的强大能力和无与伦比的扩展性,为未来各种新技术、新业态和新服务提供了坚实的平台基础和无限的可能性。
Clusternet项目已发布v0.3.0版本,支持多集群和应用管理的多种特性,随着Clusternet的不断迭代,未来将为用户提供更加完备和强大的能力。
OCM项目和kubernetes生态系统紧密结合,实现了kubernetes sig-multicluster的多个设计方案,包括KEP-2149 Cluster ID[7]
和KEP-1645 Multi-Cluster Services API中关于clusterset的概念[8]。也在和其他开发者在社区共同推动Work API[9])的开发。
OCM与Clusternet项目仍在快速的开发迭代,欢迎行业公司和社区开发者们共同参与,交流学习,共建未来更加开放,充满无限可能的云世界。
链接
-OCM项目地址:https://github.com/open-cluster-management-io
-OCM官网地址:https://open-cluster-management.io
-Clusternet项目地址:https://github.com/clusternet/clusternet
参考资料
[1]kubectl plugin:【https://github.com/clusternet/kubectl-clusternet】
[2]client-go:【https://github.com/clusternet/clusternet/blob/main/examples/clientgo/READEME.md】
[3]skeeey:【https://github.com/skeeey】
[4]clusternet-addon:【https://github.com/skeeey/clusternet-addon】
[5]Addon-Framework:【https://github.com/open-cluster-management/addon-framework】
[6]clusternet-addon:【https://github.com/skeeey/clusternet-addon】
[7]KEP-2149 Cluster ID:【https://github.com/kubernetes/enhancements/tree/master/keps/sig-multicluster/2149-clusterid】
[8]clusterset的概念:【https://github.com/kubernetes/enhancements/tree/master/keps/sig-multicluster/1645-multi-cluster-services-api】
[9]Work API:【https://github.com/kubernetes-sigs/work-api】