简介: 为了让开发者、用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁、阿里云共同发起并开源了 OCM(Open Cluster Management,项目官网 (\_https://open-cluster-manageme...\_),旨在解决多集群、混合环境下资源、应用、配置、策略等对象的生命周期管理问题。目前,OCM 已向 CNCF TOC 提交 Sandbox 级别项目的孵化申请。 ?
作者:冯泳(鹿惊)
在云计算领域如果还有人没听过 Kubernetes,就好像有人不知道重庆火锅必需有辣椒。Kubernetes 已经像手机上的 Android ,笔记本上的 Windows 一样成为管理数据中心事实上的标准平台了。围绕着 Kubernetes ,开源社区构建了丰富的技术生态,无论是 CI/CD、监控运维,还是应用框架、安全反入侵,用户都能找到适合自己的项目和产品。可是,一旦将场景扩展到多集群、混合云环境时,用户能够依赖的开源技术就屈指可数,而且往往都不够成熟、全面。
?
为了让开发者、用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁、阿里云共同发起并开源了 OCM(Open Cluster Management,项目官网 (\_https://open-cluster-management.io/\_),旨在解决多集群、混合环境下资源、应用、配置、策略等对象的生命周期管理问题。目前,OCM 已向 CNCF TOC 提交 Sandbox 级别项目的孵化申请。
?
Open Cluster Management
让我们把时间拉回到几年前,当业界关注/争论的焦点还在 Kubernetes 是否生产级可用的时候,就出现了最早一批登陆“多集群联邦”技术的玩家。它们大都是体量上远超平均水准的 Kubernetes 实践先驱,从最早 Redhat 、谷歌入场做了 KubeFed v1 的尝试,再到后来携手 IBM 吸取经验又推出 KubeFed v2 。除了这些大型企业在生产实践 Kuberentes 的场景中探索多集群联邦技术,在商业市场上,各个厂商基于 Kubernetes 包装的服务产品也大多经历了从单集群产品服务到多集群形态、混合云场景进化的过程。其实,无论是企业自身还是商业用户都有共性的需求,聚焦在以下几个方面:
?
**
Kubernetes 集群依赖 etcd 作为数据持久层,而 etcd 作为分布式系统对系统中各个成员之间的网络延迟上有要求,对成员的数量也有一些限制,虽然在延迟能够容忍的情况下可以通过调整心跳等参数适配,但是不能满足跨国跨洲的全球性部署需求,也不能保证规模化场景下可用区的数量,于是为了让 etcd 至少可以稳定运行,一般会按地域将 etcd 规划为多个集群。此外,以业务可用和安全性为前提,混合云架构越来越多地被用户接受。跨越云服务提供商很难部署单一 etcd 集群,随之对应的,Kubernetes 集群也被分裂为多个。当集群的数量逐渐增多,管理员疲于应对时,自然就需要一个聚合的管控系统同时管理协调多个集群。
**
诚然,Kubernetes 开源版本有着明显的规模性瓶颈,然而更糟糕是,我们很难真正量化 Kubernetes 的规模。社区一开始提供了 kubemark 套件去验证集群的性能,可是现实很骨感,kubemark 所做的事情基于局限于在不同节点数量下反复对 Workload 进行扩缩容调度。可是实践中造成 Kubernetes 性能瓶颈的原因复杂、场景众多,kubemark 很难全面客观描述多集群的规模性,只能作为非常粗粒度下的参考方案。后来社区支持以规模性信封来多维度衡量集群容量,再之后有了更高级的集群压测套件 perf-tests。当用户更清晰地认识到规模性的问题之后,就可以根据实际场景(比如 IDC 规模、网络拓扑等)提前规划好多个 Kubernetes 集群的分布,多集群联邦的需求也随之浮出水面。
**
**
业务应用的容灾通过集群内的调度策略,将应用部署到不同粒度的基础设施可用区来实现。结合网络路由、存储、访问控制等技术,可以解决可用区失效后业务的连续性问题。但是如何解决集群级别,甚至是集群管理控制平台自身的故障呢?
?
etcd 作为分布式系统可以天然解决大部分节点失败的问题,可是不幸的是实践中 etcd 服务也还是可能出现宕机的状况,可能是管理的操作失误,也可能是出现了网路分区。为了防止 etcd 出现问题时“毁灭世界”,往往通过缩小“爆炸半径”来提供更粒度的容灾策略。比如实践上更倾向于在单个数据中心内部搭建多集群以规避脑裂问题,同时让每集群成为独立的自治系统,即使在出现网络分区或者更上层管控离线的情况下可以完整运行,至少稳定保持现场。这样自然就形成了同时管控多个 Kubernetes 集群的需求。
?
另一方面,隔离性需求也来自于集群在多租户能力上的不足,所以直接采取集群级别的隔离策略。顺带一提的好消息是 Kubernetes 的控制面公平性/多租户隔离性正在一砖一瓦建设起来,通过在 1.20 版本进入 Beta 的 API Priority And Fairness 特性,可以根据场景主动定制流量软隔离策略,而不是被动的通过类似 ACL 进行流量的惩罚限流。如果在最开始进行集群规划的时候划分为多个集群,那么隔离性的问题自然就解决了,比如我们可以根据业务给大数据分配独占集群,或者特定业务应用分配独占请集群等等。
?
OCM 旨在简化部署在混合环境下的多 Kubernetes 集群的管理工作。可以用来为 Kubernetes 生态圈不同管理工具拓展多集群管理能力。OCM 总结了多集群管理所需的基础概念,认为在多集群管理中,任何管理工具都需要具备以下几点能力:
?
?
OCM 采用了 hub-agent 的架构,包含了几项多集群管理的原语和基础组件来达到以上的要求:
?
?
?
?
?
架构如下图所示,其中 registration 负责集群注册、集群生命周期管理、管理插件的注册和生命周期管理;work 负责资源的分发;placement 负责集群负载的调度。在这之上,开发者或者 SRE 团队能够基于 OCM 提供的 API 原语在不同的场景下方便的开发和部署管理工具。
?
通过利用 OCM 的 API 原语,可以简化许多其他开源多集群管理项目的部署和运维,也可以拓展许多 Kubernetes 的单集群管理工具的多集群管理能力。例如:
?
?
OCM 还内置了两个管理插件分别用来进行应用部署和安全策略管理。其中应用部署插件采用了订阅者模式,可以通过定义订阅通道(Channel)从不同的源获取应用部署的资源信息,其架构如下图所示:
?
?
同时为了和 kubernetes 生态系统紧密结合,OCM 实现了 kubernetes sig-multicluster 的多个设计方案,包括 KEP-2149 Cluster ID 和 KEP-1645 Multi-Cluster Services API 中关于clusterset 的概念。也在和其他开发者在社区共同推动 Work API ?的开发。
?
?
?
整个 OCM 架构很像是“微内核”操作系统,OCM 的底盘提供核心能力集群元数据抽象等等服务,而其他扩展能力都是作为独立组件可拆分的进行部署。如上图所示 OCM 的整个方案里除了最核心的能力部分之外,其他上层的能力都是可以根据实际需求进行裁剪的,比如如果我们不需要复杂集群拓扑关系,那么就可以剪裁掉集群分组相关的模块,如果我们不需要通过 OCM 下发任何资源仅作为元数据使用,那么甚至可以剪裁掉整个资源下发的 Agent 组件。这也有利于引导用户逐步登陆 OCM ,在初期用户可能只需要用到很小的一部分功能,再随着场景拓展慢慢引入更多的特性组件,甚至同时支持在正在运行中的控制面上热插拔。
?
?
整个 OCM 方案在设计之初就考虑到通过集成一些第三方主流的技术方案进行一些复杂场景高级能力的建设。比如为了支持更复杂的应用资源渲染下发,OCM 支持以 Helm Chart 的形式安装应用且支持载入远程 Chart 仓库。同时也提供了 Addon 框架以支持使用方通过提供的扩展性接口定制开发自己的需求,比如 Submarine 就是基于 Addon 框架开发的多集群网络信任方案。
?
为了降低用户的使用复杂度以及迁移到 OCM 方案的简易度,OCM 提供了传统指令式的多集群联邦控制流程。值得注意的是以下提及功能尚在研发过程中,将在后续版本和大家正式见面:
?
?
?
OCM 技术已经应用到蚂蚁集团的基础设施中,作为第一步,通过运用一些类似与社区 Cluster API 的运维手段将 OCM Klusterlet 逐个部署到被管理的集群中去,从而把蚂蚁域内几十个线上线下集群的元信息统一接入到了OCM中。这些 OCM Klusterlet 为上层的产品平台提供了多集群管理运维的基础能力方便以后的功能扩展。具体来讲 OCM 第一步的落地内容包括以下方面:
?
(1) 简化集群初始化/接管流程 。(2) 更清晰地控制管控中枢所具备的权限。
?
?
通过上述工作,蚂蚁域内的数十个集群都在 OCM 的管理范围内。在双十一等大促活动中,自动创建和删除的集群也实现了自动化的接入和删除。后面也计划了与 KubeVela 等应用管理技术集成,协同完成应用,安全策略等在蚂蚁域内的云原生化管理能力。
?
?
在阿里云,OCM 项目则是 KubeVela ?面向混合环境进行无差别应用交付的核心依赖之一。KubeVela 是一个基于开放应用模型(OAM)的“一站式”应用管理与交付平台,同时也是目前 CNCF 基金会托管的唯一一个云原生应用平台项目。在功能上,KubeVela 能够为开发者提供端到端的应用交付模型,以及灰度发布、弹性伸缩、可观测性等多项面向多集群的运维能力,能够以统一的工作流面向混合环境进行应用交付与管理。在整个过程中,OCM 是 KubeVela 实现 Kubernetes 集群注册、纳管、应用分发策略的主要技术。
?
在公共云上,KubeVela 的上述特性结合阿里云 ACK 多集群纳管能力,则可以为用户提供了一个强大的应用交付控制平面,能够轻松实现:
?
?
?
在未来,阿里云团队会同 RedHat/OCM 社区、Oracle、Microsoft 等合作伙伴一起,进一步完善 KubeVela 面向混合环境的应用编排、交付与运维能力,让云原生时代的微服务应用交付与管理真正做到“既快、又好”。
?
?
目前 OCM 社区还处在快速开发的早期,非常欢迎有兴趣的企业、组织、学校和个人参与。在这里,你可以和蚂蚁集团、RedHat、和阿里云的技术专家们以及 Kubernetes 核心 Contributor 成为伙伴,一起学习、搭建和推动 OCM 的普及。
今年 9 月 10 日 INCLUSION·外滩大会将如期举行,作为全球金融科技盛会,它将继续保持科技·让技术更普惠的初心。11 日下午的多集群、混合云架构开源专场,OCM 社区的主要开发人员会为大家带来围绕 OCM 构建的多集群、混合云最佳实践,欢迎你届时线下参加,面对面交流。
感谢你对 OCM 的关注与参与,欢迎分享给有同样需求的更多朋友,让我们共同为多集群、混合云的使用体验更进一步而添砖加瓦!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
背景 京东购物小程序作为京东小程序业务流量的主要入口,承载着许多的活动和页面...
Dreamweaver中如何使用Flash影片 1、首先需要我们准备的是一个Flash文件,其次最...
最近在做项目时,发现CSS3中关于动画的技术,自己很少运用在项目中,平时一些列...
打开软件,我们按快捷键ctrl+n,建立一个新的文件。 点击常用,选择布局。 点击...
在ie下设置 css 样式 style="cursor:hand;" 可以正常显示 但是在firefox下就不行...
在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。 首先,我们对C...
作者 / Krish Vitaldevara,Google Play 信任与安全产品管理总监 多年来,向数十...
行高line-height实现单行文本垂直居中 以前一直认为单行文本垂直居中要将高度和...
CSS3实现酷炫的3D旋转透视 3D动画效果现在越来越普及,已经被广泛的应用到了各个...
一、作用 离线浏览 - 根据文件规则把资源缓存在本地,脱机依然能够访问资源,联...