如何基于 K8s 构建下一代 DevOps 平台?

简介: 当前云原生 DevOps 体系现状如何?面临哪些挑战?如何通过 OAM 解决云原生 DevOps 场景下的诸多问题?云原生开发应用模型 OAM(Open Application Model) 社区核心成员孙健波将为大家一一解答,并分享如何基于 OAM 和 Kubernetes 打造无限能力的下一代 DevOps 平台。

1.png

作者 | 孙健波(天元)

导读:当前云原生 DevOps 体系现状如何?面临哪些挑战?如何通过 OAM 解决云原生 DevOps 场景下的诸多问题?云原生开发应用模型 OAM(Open Application Model) 社区核心成员孙健波将为大家一一解答,并分享如何基于 OAM 和 Kubernetes 打造无限能力的下一代 DevOps 平台。

什么是 DevOps?为什么基于 Kubernetes 构建?

2009 年举办了第一届 DevOpsDays 大会,DevOps 名字被首次提出。到 2010 年,DevOps 的概念越来越火,出了 What is DevOps 的文章,讲解了 DevOps 的概念,方法论及配套的工具。简单来说,研发工程师需要和运维工程师深度的合作,同时通过一系列工具保证研发更加顺畅,从而更容易的接触生产环境。

到 2013 年,Docker 出现了,工程师可以第一次到软件生产环境中定义,通过 Docker image 完成单机软件的交付和分发。此时 DevOps 开始慢慢落地。2015 年开始,DevOps 相关的工具越来越多,资源利用率出现了一些问题,CNCF 的成立使得 DevOps 的实践往 Kubernetes 上走。

2.png
(DevOps 的三个阶段)

阿里在 Kubernetes 上的实践也取得了非常好的成果。在规模方面,阿里内部集成了数十个节点可以达到上万的集群,同时具备高性能和安全特性,秒级扩容,神龙+安全容器。具备极致的弹性,分钟级拆解公有云计算资源,无限资源池。另一方面,Kubernetes 社区已经具备非常丰富的 DevOps 生态基础功能,包括镜像托管、CICD 流水线、任务编排、发布策略、镜像打包、分发、丰富的应用运行时的负载支撑、丰富弹性和应用扩容能力。

为什么阿里基于 Kubernetes 构建 DevOps平台?

1)阿里基于 Kubernetes 的无限资源池与基础设施能力

  • 大规模 – 单集群最高可达 10000 节点、百万 Pod
  • 高性能 – 秒级扩容,智能伸缩,神龙 + 安全容器
  • 极致弹性 – 分钟级拆解公有云计算资源,无限资源池

2)社区围绕 Kubernetes 已经具备丰富的 DevOps 生态基础功能

  • 源码到容器镜像仓库,Kubernetes 是容器平台事实标准:Github / DockerHub;
  • CI/CD 流水线、任务编排、发布策略:Argo / Teckton / Spinnaker / Jenkins-X / Flagger;
  • 镜像打包、分发:Helm / CNAB;
  • 丰富的应用运行负载支撑:Deployment(无状态) / StatefulSet(有状态) / OpenKruise(原生有状态增强);
  • 丰富的弹性和应用扩缩容能力:HPA / KEDA。

基于 Kubernetes 的 DevOps 平台新挑战

下图展示了一个云原生下的 DevOps 流水线的典型流程。首先是代码的开发,代码托管到 Github,再接入单元测试的工具 Jenkins,此时基本研发已完成。再接着到镜像的构建,涉及到配置、编排等。云原生中可以用 HELM 打包应用。打包好的应用部署到各个环境中。但整个过程中会面临很多挑战。首先,在不同的环境需要不同的运维能力。

3.png
(一个云原生 DevOps 流水线的典型流程)

其次,配置的过程中要创建云上数据库,需要另外打开一个控制台来创建数据库。还需要配置负载均衡。在应用启动以后还需要配置额外的功能,包括日志、策略、安全防护等等。可以发现,云资源和 DevOps 平台体验是割裂的,里面充斥着借助外部平台创建的过程。这对新手来说是非常痛苦的。

挑战一:云资源与 DevOps 平台体验割裂

DevOps 流程中充斥着大量需要外部平台创建的过程:

4.png

挑战二:研发、运维、基础设施关注点耦合

下图是常用的 K8s 的 YAML 配置文件,大家经常吐槽这个配置文件很复杂。

简单来说 YAML 配置文件可以分为三大块,一块是运维比较关心的配置,包括实例数,策略和发布。第二块是研发关心的,涉及到镜像、端口号等。第三块是基础设施工程师看得懂的,如调度策略等。K8s 的配置文件中将方方面面的信息都耦合在一起,这对 K8s 工程师来说是非常适合的,但是对应用侧的终端工程师而言,有很多不需要关心的配置指标。

5.png

  • DevOps 流程中缺乏对“应用”这个概念的描述
  • K8s 的 YAML 文件的定位并不是终端用户

挑战三:平台的自定义封装,简单却能力不足

DevOps 平台对 K8s 能力封装抽象,只剩下 5 个 Deployment 的字段需要研发填写。从用户角度而言,这种设置非常好用简单。但是针对稍微复杂的应用,涉及到应用状态管理,健康检查等等一系列的操作,此时这 5 个字段是不够的。

6.png

挑战四:CRD 扩展能力强大,DevOps 平台无法直接复用

CRD(Customize Resource Definition) 扩展能力强大,几乎所有软件都可以通过 CRD 的方式进行扩展,包括数据库、存储、安全、编排、依赖管理、发布等。但是对 DevOps 平台来说,上面接口并没有向用户暴露,导致无法直接复用。

7.png

挑战五:DevOps 平台开发的新能力使用门槛高

如果平台想要扩展一些能力,而原生的自动扩缩容能力不太合适,希望开发定时的扩缩容YAML文件,随着业务情况而设置。但此时用户使用YAML的门槛非常高,不清楚如何使用YAML。随着新能力开发越来越多,能力之间会出现冲突,这也非常难以管理。

8.png

  • 运维同学怎么知道这个扩展能力怎么用?看 CRD?看配置文件?看 …… 文档?
  • 扩展能力间出现冲突,导致线上故障,比如:CronHPA 和 默认 HPA 被同时安装给了同一个应用;K8s 扩展能力之间的冲突关系,如何有效管理?如何有效的对运维透出?

挑战六:不同 DevOps 平台需要完全重新对接

很多云原生实践中会遇到的问题,即需要定义非常复杂的 YAML,这种方式可以解决企业内部所有问题,但是挑战在于很难与生态进行对接。如 RDS,SLB 的能力都嵌到 YAML 文件中,无法复用,几乎不具备原子化能力。同时无法协作,无法提供给兄弟部门或生态使用,只能给内部封闭生态使用。上层系统不同应用对接 DevOps 平台时,需要写不同格式的 YAML,这也是非常痛苦的。

9.png

  • 难以理解,必须通过界面可视化透出
  • 无法复用,几乎不具备原子化能力
  • 无法协作,只能内部封闭生态使用

OAM 应用模型的技术原理

OAM 应用模型的出现,解决了上述应用管理的难题,下面我们来介绍一下 OAM 模型的技术原理。

1. Component 组件

OAM 中常见的概念是 Component 组件,完全从研发角度定义的待部署单元。下图右侧是 YAML 中 Component 的例子,其中黄色部分可以灵活自定义。OAM 中会定义标准的架构 ContaineriseWorkload,表示工作负载部分,里面是待部署单元的具体描述。这时就可以解决关注点分离的问题,帮助应用侧工程师去掉很多细节,只需要关心开发需要关注的端口号,镜像等等。

10.png

应对挑战一,在 OAM 中可以定义数据库表达资源需要使用云资源,Workload 中可以根据自己的需要定义不同的组件,包括基于虚拟机的应用、或者老的 Function 应用。组件是应用开发者关心的。

11.png

2. Trait

如果只是组件,组合起来就可以构建简单的应用。如果关心应用运维的问题,OAM 中有 Trait 的概念,指的是在原来组件的基础上附加一些特征。特征指的是运维的能力,如手动扩缩容能力、外部访问能力、发布、负载均衡。弹性扩缩容、基于流量的管理等等。通过 OAM 的 Trait 可以很灵活的得到插件化扩充能力。不同的 component 绑定不同的特征。

12.png

3. Scope

Component,Trait 以及所有组装起来的 Application Configuration 就是 OAM 中的三种主要的概念。但当多个组件共同协作时应该如何处理?OAM 中有个边界 Scope 的概念,是一种特殊的 Trait,将多个 Component 组合在一起,共享一组资源组,CPU 等特征用 Scope 表示,拓展多个组件的共同特征。

13.png

OAM 加持下的下一代 DevOps 技术

1. OAM:以应用为中心的分层模型

OAM 是以应用为中心的分层模型,首先需要运行在服务端的 OAM 解释器,对于 YAML 的读取需要通过 OAM 解释器。OAM 提供 Trait,Component 让用户填写,编成 APP Config。APP Config 通过 OAM 解释器具备 Deployment,Ingress,HPA 或者云资源等能力。这种方法可以将研发、运维基于基础设施进行分层,研发关心 Component,运维关心 Trait,基础设施通过 OAM 解释器提供各种能力,与 K8s 紧密结合,对其应用概念做了补充。

14.png

  • 分层
  • 模块化
  • 可复用

2. 快速的纳入 K8s 生态已有 Operater 能力

OAM 可以快速的纳入 K8s 生态已有的 Operater 能力,下图左边的 Component 中是一个 CRD 的实例,右边是 Trait 中的 CRD 的实例,中间表示 Component 底下的 Workload 和 Trait 分别对应了 K8s 自定义资源的能力。如果想要使用 K8s 中的某些能力,只需要在 Trait 中写入相应的字段即可。

15.png

3. OAM 框架解决组件依赖关系和启动顺序

OAM 框架解决组件依赖关系和启动顺序。OAM Runtime,OAM 解释器会将组件依赖关系和启动顺序处理好,下图中 Component 之间有 dependency 关系,Trait 与 Component 之间有 preComponent 或者 postComponent 等关系。

16.png

4. OAM Trait 灵活解决资源绑定难题

启动顺序厘清之后涉及到资源绑定问题,一边是使用的数据库,另一边是 Web 的程序,Web 的程序绑定数据库连接串资源。在 OAM 中只需要写一个 Trait 就可以解决资源绑定问题,下图右边,K8s 通过 Secret 承载连接串信息,Service Binding Trait 对应一个运行的 Operator,Web Hook 拿到 Secret 后注入进数据库中。

17.png

5. Workload 与 Trait 交互机制

大家会考虑接入 OAM 会不会比较麻烦,需不需要改代码。OAM 设计了 Workload 与 Trait 交互机制,OAM 内部零改造,只需要扩展 Workload 和 Trait。首先,Component 中创建 Workload 实例,再创建 Trait 实例,只需要在 Trait 中查看 Workload 的 Definition,从而配置 Trait 中需要的能力。

18.png
(OAM 内核零改造,插件式快速接入新能力)

如果开发了新的能力,碰到冲突问题也是非常头痛的。在 OAM 框架中定义 Trait 时,可以检查哪些字段是冲突的,拒绝掉新的应用的创建,从而保障 Trait 之间的兼容性,使得运维问题可发现、可管理。

19.png
(可发现、可管理的 Traits 系统)

6. OAM:无限能力的 DevOps 平台体系

下图是 DevOps 平台体系,最下层是 OAM Runtime,一部分是 Workload,对应运行时的承载的 Runtime,如 Function、Container、虚拟机、Serverless Service 等。另一部分是 Trait,对应运维能力,如发布、弹性扩缩容、日志、安全等等。再上一层可以根据场景化组合(Application Profile)组装成不同的业务形态平台,不同平台可以使用不同组合的 Workload 和 Trait,具备不同的能力。通过 OAM 标准化的模型构建无限能力的 DevOps 平台,满足各种场景的需要。

20.png

在用户侧,OAM 加持下的研发 DevOps 流程在镜像构建完成之后使用达到统一,OAM 提供了 APP Config,包含不同的 Component,每个 Component 包含不同的运维能力 Trait,支持不同的环境,如测试环境、生成环境。OAM 配置统一,适合不同的云,可以拿到不同的集群中直接运行。在 K8s 侧,用户只需要装上插件,就可以很方便的嵌入很多丰富的能力。

21.png

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国电子云发布专属云CECSTACK 以全栈信创赋能千行百业

2021年4月26日,第四届数字中国建设峰会召开之际,中国电子云在福州举办“云可信 创未来——中国电子云全系产品发布暨战略伙伴签约仪式”,重磅发布中国电子云“信创”实践和全栈自主专属云CECSTACK。中国电子副总经理、党组成员陈锡明&#xf…

idea 双击打不开了咋办

文章目录1. 文件内容还原2. 删除以前旧文件3. 删除以前缓存文件1. 文件内容还原 首先检查一下idea64.exe.vmoptions是否有改动 有的话可以把-javaagent的这一行删除,删除后保存再尝试看看能不能打开。 2. 删除以前旧文件 如果还是不行的话我们可以找打开 C:\Us…

使用日志审计查看MaxCompute执行过哪些操作

简介: MaxCompute完整地记录用户的各项操作行为,会自动将操作日志实时投递到ActionTrail中,ActionTrail针对作业(Instance)、表(Table)、函数(Function)、资源&#xff0…

谈“云”色变?近80%企业曾遭受数据泄露

出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势,但另一边,云数据泄露事件的频繁,却让不少企业谈“云”色变。 2020年2月,万豪酒店520万客人信息被泄露,英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

云网络十年:探路者阿里云的理想和坚持

简介: 转载自CSDN:专访阿里云网络产品线负责人,阿里云智能研究员祝顺民(花名江鹤)和阿里云资深产品专家吴天议。 近日,阿里巴巴发布强劲财季业绩后,高盛、摩根大通等多家机构上调阿里云估值至千…

电商搜索“随便逛逛,想知道大家都在搜什么?现在什么最热门?”

简介: 有时候用户只是随便逛逛,没有明确的搜索意图,如何推荐更多优质查询词,引导其搜索、购买那?本文结合实际案例运用阿里云开放搜索的解决方案实现优化。 案例背景 某O2O电商平台,线下覆盖上百家连锁超…

汇量科技收购热云数据,加速SaaS工具生态布局

4月28日,全球性技术服务平台汇量科技Mobvista(HK.1860)发布公告,宣布将全资收购热云数据——国内领先的第三方移动监测和营销科技公司,总交易对价超过15亿人民币(含现金及股票)。收购完成后,热云数据将作为汇量科技旗下全资子公司…

Fluid: 让大数据和 AI 拥抱云原生的一块重要拼图

简介: 如何驱动大数据、AI 应用在云原生场景下高效运行是一个既有理论意义又具应用价值的重要挑战性问题,为系统化解决相关问题,学术界和工业界密切合作,南京大学 PASALab 副研究员顾荣博士、阿里云容器服务高级技术专家车漾、All…

估值百亿独角兽爱学习教育集团:通过云原生实践与时间赛跑

简介: iiMedia Research(艾媒咨询)数据显示,在线教育市场规模保持逐年增长的态势,2019年在线教育市场规模已突破4000亿元。在疫情的助推下,在线教育加速渗透,市场空间有望进一步打开&#xff0c…

腾讯云~安装ActiveMQ

文章目录1. docker 构建2. 腾讯云防火墙策略3. 效果图1. docker 构建 docker pull webcenter/activemq mkdir /app/activemq/log -p docker run --nameactivemq \-itd \-p 8161:8161 \-p 61616:61616 \-e ACTIVEMQ_ADMIN_LOGINadmin \-e ACTIVEMQ_ADMIN_PASSWORD123456 \--res…

如何实现一个跨库连表SQL生成器?

简介: 用户只需在前端简单配置下指标,系统即可自动生成大宽表,让用户查询到他所需要的实时数据,数据源支持跨库并支持多种目标介质。这样的数据全局实时可视化如何实现?本文从需求分析开始,分享自动生成SQL…

plsql 设置字体+工具栏图标大小调整

文章目录1. 字体设置2. 工具图标大小1. 字体设置 字体(微软雅黑)大小(10号)就可以 各种字体调整 2. 工具图标大小

云原生时代老牌IDC巨头谋求转型,世纪互联成立新品牌“互联科技(NEOLINK)”

编辑 | 宋慧 出品 | CSDN云计算 头图 | 世纪互联全新子品牌战略发布会现场图 4月28日,世纪互联举行2021新品牌战略发布会,正式发布全新子品牌“互联科技”(NEOLINK)。此次世纪互联整合集团内新零售及第一线事业群、成立新基建IDC…

No binding operation info while invoking unknown method with params unknown 异常解决

浏览器中访问WebService,返回异常, 是由于访问地址缺少wsdl后缀

如何管理越来越多的 operator?OLM 给你答案

简介: OLM(Operator Lifecycle Manager) 作为 Operator Framework 的一部分,可以帮助用户进行 Operator 的自动安装,升级及其生命周期的管理。同时 OLM 自身也是以 Operator 的形式进行安装部署。本文我们将来了解一下 OLM 的基本架构和安装使…

兴趣标签体系告诉我,闲鱼的95后是这样的...

作者:闲鱼技术-兆晗 背景与挑战 — — "水果糖小椿 M39 暂挂" — — "列表科幻?" 不知大家能否读懂上面的对话,但在闲鱼,这样的对话每天都在发生。数据显示,闲鱼约30%的用户年龄不满25岁。了解这…

搭建Redis集群遇到的问题:Waiting for the cluster to join~~~

问题: 搭建Redis集群的过程中,执行到cluster create : … 的时候,发现程序发生阻塞,显示:Waiting for the cluster to join 的字样,然后就无休无尽的等待… 遇到这种情况大部分是因为集群总线的端口没有开…

英特尔助力完善AI人才培养,携手微软共促地球可持续发展

2021年4月22日,英特尔于第52个世界地球日期间举办了主题为“为企业寻良将,为人才筑舞台”的网络研讨会,旨在探讨高科技企业如何聚焦AI技术,赋能人才发展,为企业引荐人才,为人才提供机会,来共建美…

云原生除了K8S、微服务,还有...?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国云原生(Cloud Native)是最近技术圈一个比较火的名词,相信大家或多或少都听说过。不过对于大多数普通研发朋友来说,"云原生"这个词多少可能还是有些陌生,以至于刚开始听到这个词时…

Service Mesh 在超大规模场景下的落地挑战

简介: 在实际落地方面,众多企业都在积极探索 Service Mesh 在大规模场景下的应用。 作者 | 至简,阿里云高级技术专家 随着微服务软件架构在互联网企业的广泛实践,新一代微服务软件架构技术悄然兴起, Service Mesh 便是…