摘要:本文从企业的业务背景、应用需求以及选择Karmada前后的对比和收益等方面,阐述了艾莫尔使用多集群技术完成企业技术升级的过程。

本文分享自华为云社区《艾莫尔研究院基于Karmada的落地实践》,作者: 艾莫尔人工智能研究院容器平台负责人 徐元昌。

引言

本篇文章来自艾莫尔人工智能研究院在多集群管理应用中的落地实践,从企业的业务背景、应用需求以及选择Karmada前后的对比和收益等方面,阐述了艾莫尔使用多集群技术完成企业技术升级的过程。

背景

艾莫尔⼈⼯智能研究院,是矽柏集团下⼀家致⼒于使⽤云原⽣技术帮助企业数字化转型的科技公司。公司主要产品是斩浪云-云原⽣应⽤平台,该平台围绕云原生、数据智能、应用安全、应用性能、智能应用等五大方向, 面向企业级市场,提供云原生、大数据、AI、信息安全等技术产品,覆盖从开发、应用到运营整个环节, 满足不同企业在生命周期不同阶段的核心需求,为各行业打造⼀站式云原⽣解决⽅案, 助⼒企业云原⽣数字化转型。

基于Kubernetes,我们构建了云厂商无关的云原生平台,用户无需感知云厂商之间的差异即可使用Kubernetes托管业务应用。

随着客户对多云需求的不断增加, 集群规模和集群数量快速增⻓,运维复杂性也急剧增加,我们迫切需要围绕 Kubernetes 构建多集群技术。

过程中,我们考虑过自研多集群管理方案,也对开源社区相关项目做了细致的调研和测试,最终我们选择了 Karmada 项⽬。下⾯将结合我们内部⼀些场景和需求,介绍选择Karmada的原因以及在落地过程中的⼀些实践。

多集群方案选型

公司内部目前大约有50+左右的集群,每个集群有数百至上千节点不等。集群不是同构的,其中一些集群包含异构计算资源,如 GPU;集群也不是同质的,其中一些边缘集群使用 k3s 构建。

根据我们的业务情况,我们对多集群方案选型主要基于以下几点:

  • Cluster API 定义要足够抽象且具备灵活性,方便我们描述集群的状态、资源、成员,同时可以通过添加一个很薄的胶水层就描述集群内异构成员和非同质集群。
  • 能够兼容 Kubernetes 原⽣ API 和 CRD,这样我们现存的一些系统不改造或者通过很少的改造就可以迁入多集群。
  • 支持多集群资源调度策略,同时具备自定义扩展的能力。因为我们的集群分散在全球多个国家,我们希望可以在统一的平台上去管理资源的调度。
  • 控制面要满足高可用、高性能。我们希望随着规模的增长,多集群系统可以水平扩展。

为什么选择 Karmada

首先 Karmada 是兼容 Kubernetes 原生 API 和 CRD的。其次,从架构上而言,Karmada 的架构和 Kubernetes 很类似,具备层层递进、可扩展性,具体来说:

  • 独立的 etcd cluster: Karmada 可以使用独立的 etcd 集群,这和其他多集群系统依赖 Kubernetes 不同。独立的 etcd 集群可以让控制面支撑更多的资源存储,而不需要考虑挤压 Kubernetes 集群的问题。未来,我们还可以进一步在控制面将规模较大的资源对象拆分出去,以满足更大规模的多集群管理。
  • 独立的 scheduler:Karmada 使用独立的 scheduler 提供多集群调度,这一点也是其他项目所不具备的。
  • agent/non-agent 接入模式: 相比于控制面 All-In-One 的系统,使用场景更加丰富。

下图是 Karmada 的架构图 :

Karmada 落地实践

多集群管理

当集群数量达到一定程度,同时多个集群之间存在着版本、配置、计算资源、API resource 等差异时,它们同时交叉在一起会导致多集群管理复杂度呈指数级上升。我们需要自动化的系统去降低管理的复杂度。

Karmada 定义了 Cluster CRD 对象,基于该对象,我们构建了自动化的多集群管理系统功能,降低了多集群管理的整体复杂度,提高了系统管理人员的效率。

选择合适的集群接管模式

Karmada 提供了两种集群同步模式来处理控制⾯集群 (Karmada Control Plane) 和成员集群 (Member Cluster) 之间的协作:

  1. Push 模式,Karmada 控制⾯直接管理成员集群并执行资源同步。这种模式下, 不需要为成员集群部署额外的组件,只需要将成员集群注册到Karmada控制面即可。
  2. Pull 模式,成员集群主动向Karmada控制面拉取资源并同步⾃⾝状态。这种模式下, 成员集群只需要部署’karmada-agent’组件即可,该组件会自动完成集群注册。

在实践过程中,我们对不同场景使⽤哪种集群管理⽅式总结如下表:

自动化集群管理

添加一个 K8s 集群流程比较繁杂,涉及集群创建、集群验证、注册等流程,还会涉及到跨部门协作。我们在 Karmada 之上叠加了业务相关的管理策略,如下图所示。其中混合云是聚焦在 IaaS 层的云上、云下资源管理平台。

集成 Karmada 到现有平台

我们将前⾯描述的⼀些内容和内部的云原⽣平台做了集成, 以简化系统运维和管理⼈员的操作复杂度。

多集群资源管理和调度

有些项目使用CRD来包裹Kubernetes原生API,用户普遍感觉很痛苦,其中一个原因在于存量系统无法平滑接入,改造成本较大。

更本质的原因是这些多集群项目把资源管理和调度的复杂性暴露给了用户或者系统维护人员,而 Karmada 的出现带给了我们惊喜!下面我们将谈谈我们是如何基于 Karmada 来解决问题的。

兼容 K8s 原生 API

Karmada 是⾸个完全兼容 K8s 原⽣ API 的多集群容器编排项⽬, 用户无需改动即可将现有集群资源通过 Karmada 分发到多个集群上。在架构设计上,Karmada 隐藏了多集群资源管理和调度的复杂性,下图是 Karmada API 的工作流程:

在笔者理解看来,Karmada 这个 API workflow 很好践行了 “机制同策略分离” 的设计:Karmada 定义了一套多集群资源管理的机制,然后在该机制上定义了相关策略。其中 Propagation Policy 定义资源在多集群中的传播策略,Override Policy 定义资源在多集群中的差异配置策略。策略面向系统管理人员,最终用户只需要提交自己的 K8s 原生 API 声明就可以了。

在我们实践过程中,我们将该理念融入到了平台,下图展现了平台用户只需要提交原生的 K8s API 就可以使用多集群的能力了。

更高级的调度策略

和其他多集群系统不同的是,Karmada 支持很多高级的调度策略:

  • 定向调度: 这种方式与Kubernetes 的 Node 定向调度类似, 我们可以将部署的资源调度到指定的集群上。
  • 亲和性调度:使⽤⽅式上和 Kubernetes 类似, ⽀持 label selector, match expression 等语法。
  • 污点容忍调度:这种方式和 kubernetes 的 Node Toleration 类似, Karmada 的Cluster API 可以声明污点 (Taint), 在多个集群调度资源时, 如果该资源可以容忍(Toleration) 集群声明的 (Taint), 则可以将该资源调度到该集群。

值得⼀提的是, Karmada 内部实现了⼀个和 Kubernetes 类似的调度框架 (Scheduler Framework), 当内置调度策略不满⾜时, 我们还可以编写⾃⼰的调度策略进行扩展。

同时, Karmada 在 PropagationPolicy 还定义了⼀个 SchedulerName 字段,⽤于定义使⽤哪个调度器进⾏调度。未来, 当调度需求和场景更复杂时, 我们可以根据该字段替换默认 (default) 调度器来满⾜需求。

总而言之,Karmada 具备灵活的调度策略,支持按需扩展甚至多调度器架构。这种具有⾼度可扩展性和可定制化的能⼒正是我们所需要的。在我们实践过程中,我们使用两种方式将这些能力暴露给使用者:

  1. template,用户在填写完原生的 K8s API 声明后,选择一个系统创建的 template 声明这些调度策略。同时系统支持对 template CRUD,template 能力基于 Karmada。
  2. strategy,将能力可视化,让用户自己填写。

下图展示了我们第二种方式:

多集群资源差异化配置

多个集群之间的 workload 配置往往是不同的,最简单的比如容器镜像版本不同。我们将 Karmada 的 Override Policy 进行了封装,给予用户这种能力。如下图所示:

多集群资源状态聚合

资源分散在多个集群上运行,聚合这些资源的状态形成一个统一的视图是很关键的。Karmada 对 Kubernetes 原生资源进行了聚合,我们使用该聚合状态构建平台,如下图所示:

Karmada 和现有系统的融合

我们现有的系统集成 Karmada非常轻松,AriesSurface 是我们第一个尝试从单集群推到多集群的项目。AriesSurface 是一个多集群巡检系统 ,用于探测部署链路和集群数据一致性。这两个指标对于我们的集群非常重要。在我们实践过程中, 往往会发⽣所有监控指标都没有问题, 但部署偏偏还是失败了的情况。经过分析我们发现,监控数据⽆法⽆死⾓覆盖所有异常, 监控只能暴露出系统异常, 但不能保障⼀些链路百分百可⽤。为此, 我们设计了和研发了基于 Pipeline (DAG) 的集群巡检系统。

在引⼊多集群之前,各个集群的巡检状态是分散的, ⽆法做到全局视⾓观测;拥抱 Karmada

之后, 我们将其改造成多集群巡检系统, 下图是我们集成 Karmada 后的⼀个架构:

  1. 巡检系统会通过 Karmada 的 Propagation 将 CRD 下发到成员集群。
  2. 成员集群的 Surface 控制监听到 CRD 创建,会根据定义渲染出一个 Pipeline 并计算出一个 DAG,控制器执行该 DAG 并生成巡检结果。
  3. 控制面运行一个 detector 收集巡检状态并将结果做相应的聚合和计算。

巡检系统可以帮助我们知道每个成员集群相关链路的状态, 从⽽为多集群交叉部署和调度提供有效的数据⽀撑。下图是我们线上系统的⼀个⼤盘图:

我们还绘制了巡检链路在不同时间点的时序状态, 有助于我们回溯历史时间点的异常信息:

Karmada 和社区生态的融合

Karmada 良好的设计使得它可以很容易和社区中其他项目进行集成,下图是我们集成 velero 做多集群备份和恢复的架构。

我们在控制面扩展了 velero 的 Backup 和 Restore 的多集群 CRD,通过 Karmada 的 PropagationPolicy 将对应的 CRD 分发到指定的成员集群。Backup 和 Restore 对应的 Controller 会做 Reconcile, 并对成员集群的 velero 的 CRD 进行状态聚合。

基于 Karmada 的多集群异构资源探索

下图展示了我们是如何基于 Karmada 做 GPU 多集群资源管理的:

得益于 Karmada 优越的架构设计,我们很快构建了多集群 GPU 资源管理的原型系统。

在最底层的算力上,我们使用时分模型对 GPU 算力做了虚拟化,同一个节点上的多个 Pod 可以共享一张或多张卡。每个节点的 GPU agent 实现了 GPU device plugin,并将虚拟的 GPU核心与显存注册为 extended resource。GPU Scheduler 是一个 K8s scheduler plugin,对 extended resource 进行资源调度。

GPU 在多集群管理的一个基本想法是统一GPU 资源视图和GPU 资源调度。首先用户提交 GPU 相关的工作负载和 PropagationPolicy。GPU Scheduler 是在 Karmada 中扩展的一个 scheduler plugin,它根据工作负载资源和 PropagationPolicy 进行一次简单的调度。目前的实现会收集每个成员集群的 GPU 资源信息,但没有在多集群做统一调度,实际上表现为一个两层调度。

总结

自从 2021年初接触 Karmada 以来,我们基于 Karmada 构建了内部的多集群系统,获得了诸多益处:

  1. 由于Karmada兼容 Kubernetes-Native API, 这样我们现有的资源定义不需要改造即可接入多集群。
  2. 建立多集群控制面标准, 通过 Karmada Cluster API, Cluster Controller 以及 push/push 的模式, 我们在内部建立了多集群层面的控制标准, 任何上层系统的多集群管理能力都能以统一的方式输出。
  3. 面向场景的多集群资源调度和编排能力, Karmada 内置的一系列 controller, scheduler plugins 以及和 Kubernetes 等价的 scheduler 扩展能力,可以让我们针对不同的场景做不同的权衡和设计。
  4. 现存系统快速多集群化, Karmada 灵活的架构设计让我们内部原本面向单集群的系统,可以很快过渡到多集群系统。

同时,在使用 Karmada 过程中,我们见证了Karmada 项目的成长。从 Karmada v0.5 到 v1.0, 我们几乎参与每次 weekly meeting,见证了 Karmada 很多令人兴奋的 feature 从 proposal 到最后的 merge, 团队先后2人成为了Karmada 社区 member。我认为这是开源项目和商业公司一种非常良性的循环。我们使用 Karmada 完成了我们系统的构建,同时将遇到的问题和新的idea回馈给社区,团队在此期间对开源的认识也更加深刻,我们很荣幸能够参与到 Karmada 项目,也希望更多的开发者加入到 Karmada 一起共建繁荣社区。

附:Karmada社区技术交流地址

项目地址

https://github.com/karmada-io/karmada

Slack地址:

https://slack.cncf.io/

华为伙伴暨开发者大会2022火热来袭,重磅内容不容错过!

【精彩活动】

勇往直前·做全能开发者→12场技术直播前瞻,8大技术宝典高能输出,还有代码密室、知识竞赛等多轮神秘任务等你来挑战。即刻闯关,开启终极大奖!点击踏上全能开发者晋级之路吧!

【技术专题】

未来已来,2022技术探秘→华为各领域的前沿技术、重磅开源项目、创新的应用实践,站在智能世界的入口,探索未来如何照进现实,干货满满点击了解

点击关注,第一时间了解华为云新鲜技术~

艾莫尔研究院基于Karmada的落地实践相关推荐

  1. 酷家乐基于 Crane EHPA 的弹性落地实践

    为什么需要自动伸缩 互联网业务由于人的活动规律从而普遍具有周期性繁忙的特征,最常见的是以天为单位的周期性变化,比如白天繁忙.夜间空闲.按传统固定资源模式,低峰期时资源使用率较低但仍然持有资源,便会造成 ...

  2. 复旦肖仰华:领域知识图谱落地实践中的问题与对策

    肖仰华博士,复旦大学计算机科学与技术学院教授,博士生导师,知识工场实验室负责人. 报告摘要:近年来,知识图谱技术进展迅速,各种领域知识图谱技术在很多领域或行业取得了显著落地效果.在领域知识图谱技术的落 ...

  3. 智能语音交互技术在360的落地实践

    作者:龚小春,来自:DataFun 导读:随着语音交互技术的发展,对话系统已经越来越成熟.对话系统的最新进展绝大多数是由深度学习技术所贡献的,深度学习技术可以通过利用大规模数据来学习有意义的特征表示和 ...

  4. 深度长文 | 复旦大学肖仰华:领域知识图谱落地实践中的问题与对策

    报告摘要:近年来,知识图谱技术进展迅速,各种领域知识图谱技术在很多领域或行业取得了显著落地效果.在领域知识图谱技术的落地实践过程中涌现出一大批理论与工程问题.本报告结合复旦大学知识工场实验室十多个领域 ...

  5. 肖仰华 | 领域知识图谱落地实践中的问题与对策

    本文转载自公众号:知识工场. 肖仰华教授2万字长文为您深度剖析领域知识图谱,对领域知识图谱技术与落地应用中的一系列关键问题做了系统的梳理与解答. 肖仰华博士,复旦大学计算机科学与技术学院教授,博士生导 ...

  6. vivo 云原生容器探索和落地实践

    作者:vivo 互联网容器团队- Pan Liangbiao 本文根据潘良彪老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 VDC]获取互联网技术 ...

  7. Salesforce 容器化 ISV 场景下的软件供应链安全落地实践

    随着企业 IT 数字化转型演变进程,越来越多的企业采用云原生化架构升级的方式,改善应用开发运维迭代的效率,加速企业业务创新迭代,改进资源弹性管理和迁移的效率,帮助企业降本增效.但是由于云原生弹性.敏捷 ...

  8. 汇集ATJ等互联网大厂和国内外大型银行的最新数智化布局与落地实践 | DAMS上海站...

    近年来,因数据衍生.关联.发展起来的技术层出不穷,我们不断探索数据从资源转化为资产的方法,又面临在数据共享和互通中引发的安全隐患:我们迫切希望进行企业核心数据库的开源化.国产化替换,又碍于" ...

  9. 领域知识图谱落地实践中的问题与对策

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 知识工场 作者 | 肖仰华博士,复旦大学计算机科学与技术学院教授,博士生导师,知识工场实验室 ...

最新文章

  1. pythonselenium浮动框_python上selenium的弹框操作实现
  2. mysql改了排序规则不生效_Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题...
  3. devexpress html编辑器,DevExpress 通用控件系列:TextEdit(2)
  4. android mvp_Android MVP
  5. 信息系统开发与利用 领域分析部分@wangshushu
  6. python工厂模式和单例模式_python之单例模式和工厂模式
  7. 【LaTeX】下载及安装步骤
  8. sde mysql_ArcSDE:企业级地理数据库概述
  9. 王者荣耀AI绝悟完全体对战开启:英雄随便选,论文已被NeurIPS收录
  10. Linu系统——基础知识1
  11. 计算机机房一般在几楼,设备层一般在高层楼房第几层?
  12. SPI总线时钟的极性(CPOL)与相位(CPHA)
  13. 来认识一下Ning!
  14. FPGA+DSP编码过程
  15. VS2019中,解决“错误CS0006:未能找到元数据文件”
  16. RationalDMIS 7.1 XYZ IJK Data
  17. 机器学习 - 模型评估(TPR、FPR、K1、ROC、AUC、KS、GAIN、LIFT、GINI、KSI)
  18. scATAC-seq入门必看 染色质可及性 archr官网全流程
  19. python中i表示什么_python中::-1代表什么?
  20. FreeMarker模板语言开发(整理版)

热门文章

  1. CCD与CMOS的比较
  2. JS实现给定参数数范围内的有条件求和(以质数求和与斐波那契数列求和为例)
  3. Linux内核-字符处理函数
  4. 【虹膜识别】滤波器虹膜识别【含GUI Matlab源码 917期】
  5. 飞控pixhawk硬件框架
  6. 神经网络——反向传播算法
  7. 数据采集及部分数据标注平台工具说明
  8. HDU 1846 Brave Game 巴什博弈 SG打表
  9. 数据结构实验三 图的操作与实现
  10. CAD看图软件如何画线?