还在犹豫吗?现在参与 OCM 社区正是时候

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 距离上一篇宣告 OCM 开源并提交 CNCF TOC 项目孵化申请的文章已经有一个多月了。这一个多月来 OCM 社区吸引了越来越多的关注和伙伴们的加入,OCM 自身的研发,相关领域产品和解决方案的应用也取得了快速的发展。如果你还在对云原生环境下多集群管理的技术选型犹豫不决,希望这篇文章能够答疑解惑。现在参与 OCM 社区正是时候。

作者 | 邱见 冯泳



前言


距离上一篇宣告 OCM 开源并提交 CNCF TOC 项目孵化申请的文章已经有一个多月了。这一个多月来 OCM 社区吸引了越来越多的关注和伙伴们的加入,OCM 自身的研发,相关领域产品和解决方案的应用也取得了快速的发展。如果你还在对云原生环境下多集群管理的技术选型犹豫不决,希望这篇文章能够答疑解惑。现在参与 OCM 社区正是时候。



OCM 社区研发进展


Open Cluster Management 在七月份发布了 0.4.0 版本,新加入的主要功能包括:


1、插件注册和生命周期的管理


通过 ManagedClusterAddon API,用户可以定义管理插件说明在被管理集群上安装管理插件,而后通过管理插件实现可扩展的管理能力。例如,用户可以在中心集群上的 ManagedCluster 资源对应的命名空间中创建名为 submariner 的 ManagedClusterAddon 资源来激活被管理集群中 submariner 的安装和配置,使用 submariner 作为多集群网络连通的解决方案。


集群管理插件的注册和管理如下图所示:


image.png


每个插件需要一个在中心集群上运行的控制器。这个控制器由插件的开发者开发,主要目的是告诉 OCM 这个插件在被管理集群中需要如何被安装,如何和中心集群通信以及对应的通信权限。OCM 通过这些信息负责插件在被管理集群的部署和与中心集群的通信。为了方便开发者方便的开发基于 OCM 的管理组件,OCM 0.4.0 加入了 addon-framework 的 golang 框架帮助开发者。开发者只需要实现框架透出的接口提供插件的部署和配置信息,同时框架还提供了若干帮助函数,方便开发者在 Kubernetes 平台添加资源处理逻辑。开发人员可以将 Kuberentes 自定义资源的 Operator 也实现在插件内。


2、集群负载和任意资源调度的新 Placement API


OCM 0.4.0 引入了一个新的 Placement API,描述如何为多集群的负载或 Kubernetes 的任意自定义资源选择部署目标的一个或多个集群。Placement 需要在一个或多个特定的 ManagedClusterSet 中选择集群,并且这些集群必须通过 ManagedClusterSetBinding 绑定到 Placement 对应命名空间内。在 OCM 0.4.0 中用户可以通过 ManagedCluster 上的标签或者 ClusterClaims 来选择集群。例如用户可以通过以下方式选择所有标签为“env=prod”的集群来分发配置信息:



apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
  name: placement1
  namespace: ns1
spec:
  predicates:
    - requiredClusterSelector:
        labelSelector:
          matchLabels:
            env: prod


也可以通过以下 Placement 选择特定数目和特定 Kubernetes 版本的集群来部署应用。


apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
  name: clusters-from-specific-version
  namespace: ns1
spec:
  numberOfClusters: 3
  predicates:
    - requiredClusterSelector:
        claimSelector:
          matchExpressions:
            - key: kubeversion.open-cluster-management.io
              operator: In
              values:
                - 1.18.0
                - 1.18.1


Placement 组件会根据现在集群的信息和 API 的定义产生 PlacementDecision,如下所示


apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: PlacementDecision
metadata:
  labels:
    cluster.open-cluster-management.io/placement: placement1
  name: placement1-decision-1
  namespace: ns1
status:
  decisions:
    - clusterName: cluster1
    - clusterName: cluster2
    - clusterName: cluster3


需要注意的是 Placement 只是根据 API 的定义选择满足要求的集群,而不关心如何分发配置和部署应用。Placement 需要和其他的应用或配置分发组件,包括应用的管理控制器,例如 ArgoCD 或者 KubeVela,共同完成应用的调度和部署。这也是 OCM “微内核”设计思想的一个体现,调度服务与应用或者资源管理服务完全解耦。


在后续的开发过程中,我们在计划引入更多的调度策略,如通过集群的资源使用情况调度,taint/toleration 机制和非亲和性等。如果有新的调度策略要求,欢迎在 community 子项目提出需求。


3、clusteradm命令行工具(alpha版本)


clusteradm 受 kubeadm 的启发,主要的目的是简化 OCM 组件的安装和集群注册。用户可以通过运行“clusteradm init”命令在中心集群上部署 OCM 管理组件。并使用”clusteradm join”命令在被管理集群部署 OCM 本地组件,并将集群注册到中心集群。clusteradm 也在不断发展,后续会加入更多的 OCM 管理和监控子命令。



OCM 社区研发计划


OCM 计划在 10 月份发布 0.5.0 版本。0.5.0 版本的开发重点主要包括对 Placement API 的进一步完善,提升用户体验以及新的网络通信子项目。


1、更多的 Placement API 调度策略


  • 基于集群可分配资源的调度 :
    根据集群中可分配的资源选择集群从儿实现集群中资源的平均分配


  • 负载的非亲和和亲和 :
    通过Placement API能够选择跨区域的集群部署负载。


  • 集群taint/toleration :
    引入类似于node taint/toleration的功能


2、增强 clusteradm 的可用性


进一步增强 clusteradm 的功能,主要是通过 clusteradm 部署和管理 OCM 插件的能力。


3、新的 proxy 插件项目


通过反向隧道的方式实现对被管理集群的 Kubernetes API,运行在被管理集群的服务,甚至节点 sshd 的直接访问。让管理员或者 controller 可以直接访问到在防火墙后的被管理集群 。



OCM 与其他项目合作


1、KubeVela


OCM 目前是 KubeVela 多集群管理的核心组件,用户可以通过 KubeVela 的应用交付工作流一站式的完成集群创建、集群注册,直到最后的多集群应用部署。这一技术流程满足了应用在开发、测试、生产不同阶段的一致性诉求,用户可以通过 KubeVela 一键式的创建集群环境,使得本地开发能够与生产部署采用同样的模式做验证,保证了软件交付的成功率和正确性。另一方面,KubeVela 与 OCM 一起构建了丰富的多集群多环境应用交付能力,在 OCM 提供集群调度和资源分发的基础上,用户可以通过 KubeVela 对一个应用实现不同环境的差异化配置,使得一个应用部署到不同集群环境可以拥有不同的配置属性和运维策略。


2、ArgoCD


OCM 也在持续和其他开源项目合作尝试通过 OCM 来增强其他项目的多集群管理能力。OCM 社区和 ArgoCD 合作推进在 ArgoCD 中使用第三方 API 来进行集群调度并通过 ArgoCD 部署应用用户可以使用 ArgoCD 的 ApplicationSet 配合 OCM 中的 Placement API 实现多集群应用的部署。


3、Clusternet


OCM 社区也尝试和 Clusternet 合作 。通过 OCM 的插件管理能力可以将 clusternet 做为插件加载到 OCM 中,从而方便的同时使用 Clusternet 和其他 OCM 插件的功能。



OCM 在产品和解决方案中的落地


1、阿里云专有云敏捷版的企业化容器平台


阿里云专有云敏捷版的企业化容器平台在不同类型的用户场景下,需要管理形态各异的用户集群,负责这些集群的部署,管理服务的安装,资源规划,监控,合规,策略管理,负载分发等工作。随着功能的不断丰富,最初的自研架构遇到了扩展性,易用性,研发效率等问题。通过调研发现 OCM 的“微内核”设计不仅很好的解决了上述架构问题,而且对二次开发非常友好,研发人员可以自由选择 OCM 社区的子项目,并在选择的原子能力基础上增加不同场景的业务逻辑。

当前使用和计划使用的 OCM 子项目和相关能力包括:


  • 集群的部署和注册


容器平台支持管理自主创建集群,用户既有集群,边缘集群,云服务商集群。根据集群类型的不同,在被管理集群上部署的管理服务种类,部署的方式,对集群的配置等都不一样。


使用 registration 和 work 子项目,容器平台可以定制集群注册的自动化流程。根据 registration-agent 收集和报告的集群属性信息,自动化注册流程可以决定部署的管理服务种类和集群配置,并通过 work-agent 部署在被管理集群内。特别的,当集群运行在防火墙之后时,容器平台会部署 proxy 服务实现 Kubernentes 和管理服务 API 的反向代理,甚至在需要时可以代理ssh协议实现技术支持人员的远程运维。


proxy 服务正在以 addon-framework 子项目支持的 OCM addon 的方式贡献给 OCM 社区,计划在 0.5.0 版本发布。


  • 集群的服务管理


正如上文中提到的,不同集群类型中部署的管理服务不尽相同。如何有序的管理这些服务,并清楚的展示被管理集群可以提供的管理能力是一个需要解决的问题。使用 addon-framework 子项目,容器平台可以为每个管理服务在中心集群实现 operator,根据管理员使用 placement 子项目创建的策略,容器平台可以通过 operator 编排服务的类型和配置,并通过 work 子项目下发到各个被管理集群。


  • 集群的策略管理


集群的管理也包括安全策略,网络策略,访问策略等的管理。这些策略通常以 Kubernetes 扩展资源的形态出现。容器平台可以直接使用 governance-policy-propagator 子项目,或者参照它实现自己的策略分发和策略执行状态的上报机制。


2、阿里云 ACK 的大数据和 AI 作业管理


阿里云容器服务 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,简称容器服务 ACK),提供高性能的容器应用管理服务。随着客户对 Kubernetes 容器的深入使用,以及业务的多地域全球化发展,用户创建管理多个 ACK 集群以及注册了多云集群来应对持续扩张的业务需求,同时 ACK 对大数据和 AI 作业的调度,队列和分发做了多项优化工作,越来越多的企业用户选择 ACK 运行大数据和 AI 作业。


针对 ACK 的多集群/多云用户运行大数据/AI 作业,如何在众多集群中选择资源容量,污点,地域亲和性,作业优先级匹配的集群,通过运维团队人为判别选择往往耗时且容易出错,并需要经过多个团队协同。多集群大数据/AI 作业统一分发和管理成为了数据科学家/开发工程师面对的棘手问题。


基于 OCM 的开放架构,ACK 作业队列控制器和多集群调度器可以很容易适配 OCM,结合 OCM 的集群注册管理,作业分发机制,实现大数据/AI 作业的多集群调度分发管理。


ACK 使用 OCM 的集群注册管理机制,构建以 OCM Hub 主集群为中心的多集群运行环境,并以 Hub 主集群为统一管控入口。用户使用 Kubernetes 原生接口提交作业后,ACK 队列控制器和多集群调度器会根据作业优先级,资源用量要求,结合使用 OCM ManagedCluster API 获取子集群健康情况,资源容量,亲和性等信息,实现基于优先级的作业排队,出队,调度,为作业自动选择合适的子集群。ACK 扩展 OCM Manifestworks API 将作业分发到相应的子集群运行,并使用 OCM Proxy 插件机制获取作业在子集群上的运行状态。


通过结合 OCM 和 ACK 作业队列控制器和多集群作业调度器,ACK 很好地解决了多集群环境中的大数据/AI 作业自动调度,作业分发和状态追踪等问题。


相关链接:


插件注册和生命周期的管理

https://github.com/open-cluster-management-io/enhancements/tree/main/enhancements/sig-architecture/12-addon-manager


集群负载和任意资源调度的新 Placement API https://github.com/open-cluster-management-io/enhancements/tree/main/enhancements/sig-architecture/6-placements 


clusteradm命令行工具(alpha版本)https://github.com/open-cluster-management-io/clusteradm

clusternet 插件

https://github.com/skeeey/clusternet-addon


基于集群可分配资源的调度

https://github.com/open-cluster-management-io/enhancements/pull/16


负载的非亲和和亲和

https://github.com/open-cluster-management-io/community/issues/49


集群taint/toleration

https://github.com/open-cluster-management-io/community/issues/48


新的 proxy 插件项目https://github.com/open-cluster-management-io/enhancements/pull/19


多集群应用部署

https://github.com/oam-dev/kubevela/tree/master/docs/examples/workflow-with-ocm


ArgoCD 部署应用

https://github.com/argoproj-labs/applicationset/pull/231


Clusternet 合作

https://github.com/clusternet/clusternet

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
人工智能 自然语言处理 数据可视化
社区共建合作须知:合作者实现美好的故事
社区共建合作须知:合作者实现美好的故事
91 0
|
11月前
|
存储 供应链 Cloud Native
开源之夏2023学生报名启动!阿里云PolarDB社区项目期待你的参与!
近日,阿里云PolarDB开源社区入选由中科院软件所主办的“2023开源之夏”活动并发布了3个PolarDB项目任务。同学们可以登录官网,报名参与感兴趣的任务。我们诚挚地邀请各位学子加入我们的行列,一起来构建完全独立自主的、开源的、高性能及高可靠性的云原生数据库!成功结项后将获得丰厚奖金和证书!
|
人工智能 供应链 Cloud Native
零距离体验顶级开源项目!明天,开源之夏正式启动报名
4月29日,龙蜥社区联合开源之夏针对重要开源软件的开发与维护发布 3大类共计 16 个项目任务,欢迎报名~
零距离体验顶级开源项目!明天,开源之夏正式启动报名
|
Kubernetes 供应链 Cloud Native
报名进入尾声,赶快申请加入 sealer 开源之夏吧!
作为阿里巴巴开源的一款帮助分布式应用快速进行打包、交付和运行的解决方案,sealer 可以通过把分布式应用及其数据库中间件等依赖项一起打包来解决复杂应用的交付问题。sealer 构建出来的产物我们称之为集群镜像,集群镜像里内嵌了一套完整的 Kubernetes + 容器,它们双剑合璧,解决了分布式应用的交付一致性问题。
报名进入尾声,赶快申请加入 sealer 开源之夏吧!
|
边缘计算 运维 Kubernetes
从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力
在“开源之夏——OpenYurt 体验中心”,同学们能够以低门槛的方式快速上手并参与到项目当中,解决实际问题。从旁观者到社区贡献者的角色转变之间,让我们通过采访内容,一起看看他们的真实感受,以及有哪些意想不到的收获。
从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力
|
Cloud Native 开发者
Air Pods Pro,阿里云定制奥运礼盒等你来——参与征文,说出你和云原生的故事
来开发者社区发文,赢取Air Pods Pro,阿里云定制奥运礼盒等大礼。
47316 0
Air Pods Pro,阿里云定制奥运礼盒等你来——参与征文,说出你和云原生的故事
|
供应链 Apache 项目管理
开源社区纷纷在报名的暑期 2021,是场怎样的活动?内附开源社区参与全指南
开源社区纷纷在报名的暑期 2021,是场怎样的活动?内附开源社区参与全指南
开源社区纷纷在报名的暑期 2021,是场怎样的活动?内附开源社区参与全指南
|
SQL 存储 关系型数据库
|
SQL 存储 运维
【社区11月份活动预告】线上圆桌讨论:Cassandra数据库与职业发展
主题:Cassandra中文社区首次线上圆桌讨论。本次邀请到阿里云栾小凡、蔚来汽车张旭东以及网龙公司阙乃祯等三位嘉宾。以Cassandra相关的职业发展为主题展开线上圆桌讨论,敬请期待。将在B站、Cassandra中文社区钉钉群等多个渠道开启同步直播。 日期:11月21日(周六) 时间:上午10点-11点
【社区11月份活动预告】线上圆桌讨论:Cassandra数据库与职业发展

热门文章

最新文章