其他
还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM
1
多集群管理发展历史
多地域问题:当集群需要在异构基础设施上或者横跨更广地域进行部署。
Kubernetes 集群依赖 etcd 作为数据持久层,而 etcd 作为分布式系统对系统中各个成员之间的网络延迟上有要求,对成员的数量也有一些限制,虽然在延迟能够容忍的情况下可以通过调整心跳等参数适配,但是不能满足跨国跨洲的全球性部署需求,也不能保证规模化场景下可用区的数量,于是为了让 etcd 至少可以稳定运行,一般会按地域将 etcd 规划为多个集群。此外,以业务可用和安全性为前提,混合云架构越来越多地被用户接受。跨越云服务提供商很难部署单一 etcd 集群,随之对应的,Kubernetes 集群也被分裂为多个。当集群的数量逐渐增多,管理员疲于应对时,自然就需要一个聚合的管控系统同时管理协调多个集群。
规模性问题:当单集群规模性遇到瓶颈。
容灾/隔离性问题:当出现更多粒度的隔离和容灾需求。
2
OCM 的主要功能和架构
理解集群的定义 通过某种调度方式选择一个或多个集群 分发配置或者工作负载到一个或多个集群 治理用户对集群的访问控制 部署管理探针到多个集群中
通过 Managed Cluster API 定义被管理的集群,同时 OCM 会安装名为 Klusterlet 的 agent 在每个集群里来完成集群注册,生命周期管理等功能。
通过 Placement API 定义如何将配置或工作负载调度到哪些集群中。调度结果会存放在 Placement Decision API 中。其他的配置管理和应用部署工具可以通过 Placement Decisiono 决定哪些集群需要进行配置和应用部署。
通过 Manifest Work API 定义分发到某个集群的配置和资源信息。
通过 Managed Cluster Set AP 对集群进行分组,并提供用户访问集群的界限。
通过 Managed Cluster Addon API 定义管理探针如何部署到多个集群中以及其如何与 hub 端的控制面进行安全可靠的通信。
简化 submariner 等多集群网络解决方案的管理。利用 OCM 的插件管理功能将 submariner 的部署和配置集中到统一的管理平台上。 为应用部署工具(KubeVela, ArgoCD等)提供丰富的多集群负责调度策略和可靠的资源分发引擎。 拓展现有的 kuberenetes 单集群安全策略治理工具(Open Policy Agent,Falco 等)使其具有多集群安全策略治理的能力。
3
OCM 的主要优势
高度模块化 --- 可自由选择/剪裁的模块
更具有包容性 --- 复杂使用场景的瑞士军刀
易用性 --- 降低使用复杂性
通过 Managed Cluster Action 我们可以向被纳管的集群逐个下发原子指令,这也是作为一个中枢管控系统自动化编排各个集群最直观的做法。一个 Managed Cluster Action 可以有自己的指令类型,指令内容以及指令执行的具体状态。
通过 Managed Cluster View 我们可以主动将被纳管集群中的资源“投射”到多集群联邦中枢系统中,通过读取这些资源在中枢中的“投影”,我们可以在联邦系统中进行更动态准确的决策。
4
OCM 在蚂蚁集团的实践
无证书化:在传统的多集群联邦系统中,我们往往需要给各个集群的元数据配置上对应的集群访问证书,这也是 KubeFed v2 的集群元数据模型里的必需字段。由于 OCM 整体采用了 Pull 的架构,由部署在各个集群中的 Agent 从中枢拉取任务并不存在中枢主动访问实际集群的过程,所以每份集群的元数据都只是彻底“脱敏”的占位符。同时因为证书信息不需要进行存储所以在 OCM 方案中不存在证书被拷贝挪用的风险。
自动化集群注册:先前集群注册的流程中存在较多人工干预操作的环节拉长了协作沟通时间的同时又损失了变更灵活性,比如站点级别或者机房级别的弹性。在很多场景下人工的核验必不可少,可以充分利用 OCM 集群注册提供的审核和验证能力,并将他们集成进域内的批准流程工具,从而实现整个集群自动化的注册流程,达成以下目标 : (1) 简化集群初始化/接管流程 。 (2) 更清晰地控制管控中枢所具备的权限。
自动化集群资源安装/卸载:所谓接管主要包括两件事情 (a) 在集群中安装好管理平台所需的应用资源 (b) 将集群元数据录入管理平台。对于 (a) 可以进一步分为 Cluster 级别和 Namespace 级别的资源,而 (b) 一般对于上层管控系统是个临界操作,从元数据录入的那一刻之后产品就被认为接管了集群。在引入OCM 前,所有的准备的工作都是需要人工推动一步一步准备。通过 OCM 整个流程可以自动化,简化人工协作沟通的成本。这件事情的本质是将集群纳管梳理成一个流程化的操作,在集群元数据之上定义出状态的概念让产品中枢可以流程化地自动化接管所要做的”琐事“。在 OCM 中注册好集群之后资源的安装与卸载流程都被清晰的定义了下来。
5
OCM 在阿里云的实践
混合环境一键建站。例如,一个典型的混合环境可以是一个公共云的 ACK 集群(生产集群)加上一个被 ACK 多集群纳管的本地 Kubernetes 集群(测试集群)。在这两个环境中,应用组件的提供方往往各不相同,比如数据库组件在测试集群中可能是 MySQL,而在公共云上则是阿里云 RDS 产品。这样的混合环境下,传统的应用部署和运维都极其复杂的。而 KubeVela 则可以让用户非常容易的在一份部署计划中详细定义待部署制品、交付工作流、声明不同环境的差异化配置。这不仅免去了繁琐的人工配置流程,还能借助 Kubernetes 强大的自动化能力和确定性大幅降低发布和运维风险。
多集群微服务应用交付:云原生架构下的微服务应用,往往由多样化的组件构成,常见的比如容器组件、Helm 组件、中间件组件、云服务组件等。KubeVela 为用户提供面向微服务架构的多组件应用交付模型,借助 OCM 提供的分发策略在多集群、混合环境中进行统一的应用交付,大大降低运维和管理微服务应用的难度。
6
加入社区
GitHub 地址 (https://github.com/open-cluster-management-io)
通过视频了解 OCM (https://www.youtube.com/channel/UC7xxOh2jBM5Jfwt3fsBzOZw)
来社区周会认识大家 (https://docs.google.com/document/d/1CPXPOEybBwFbJx9F03QytSzsFQImQxeEtm8UjhqYPNg)
在 Kubernetes Slack 频道 # open-cluster-mgmt 自由交流 (https://slack.k8s.io/)
加入邮件组浏览关键讨论 (https://groups.google.com/g/open-cluster-management)
访问社区官网获取更多信息 (https://open-cluster-management.io/)