乐趣区

关于阿里云开发者:还在犹豫吗现在参与-OCM-社区正是时候

简介: 间隔上一篇宣告 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 作为多集群网络连通的解决方案。

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

每个插件须要一个在核心集群上运行的控制器。这个控制器由插件的开发者开发,次要目标是通知 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

版权申明: 本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

退出移动版