OAM创始团队:揭秘OAMKubernetes实现核心原理

1.png

作者 | Andy Shi(阿里云高级技术专家)、天元(阿里云技术专家)

今年 5 月,阿里云和微软云共同宣布,Open Application Model (OAM) 社区携手知名混合云管理项目 Crossplane 社区,联合发布了 OAM 在 Kubernetes 平台上的标准实现与核心依赖库。本次合作达成后,OAM 社区成功的将标准应用定义和标准化的云服务管理能力统一起来,迈出了实现真正意义上的无差别云端应用交付的关键一步 。

去年 10 月 ,阿里云和微软共同推出了 OAM 项目,旨在构建围绕 Kubernetes 的云原生应用规范。OAM 描述了一个模型 —— 开发人员可以在其中定义应用程序组件;应用程序操作员负责创建这些组件的实例并为它们分配应用程序配置;基础架构运营商负责定义、安装和维护平台上可用的基础服务。 

本次合作是阿里云、微软与 Crossplane 社区的三方技术合作,主要围绕 OAM 在 Kubernetes 上的标准实现以及 Crossplane 项目的 OAM 化展开。因为 Kubernetes 社区在落地 OAM 模型的过程中,提出了关于 OAM 标准实现的诉求。所以这次合作的一个重点,就是三方工程师使用 Go 语言开发了一个 OAM Kubernetes 核心依赖库。这个项目的名字叫做 oam-kubernetes-runtime。OAM Kubernetes Runtime 将会成为 OAM 社区官方维护的基础组件,目标是在 Kubernetes 上提供稳定且统一的 OAM 核心插件。 

为进一步了解本次合作的细节以及 OAM 项目的现状,阿里云高级技术专家 Andy Shi 以及阿里云技术专家孙健波(花名:天元)接受开源中国的专访,共同探讨了 OAM 项目存在的意义。

详情戳:https://www.oschina.net/question/4487475_2317219

OAM 因何而生

我们知道,应用容器技术自诞生开始,就以 “彻底改变了软件打包与分发方式” 的魅力迅速征服了几乎所有的云厂商与数据中心。不过,软件打包与分发方式的革新,并没有能够让软件本身的定义与描述发生本质的变化,基于 K8s 的应用管理体验,也没有让业务研发与运维的工作变得更简单。 

实际上,Kubernetes 带来的云原生技术革命,在于实现了基础设施层的标准化和抽象,但这一层抽象距离业务研发与运维还是太过遥远了。一个最典型的例子,直到今天,Kubernetes 里面始终都没有 “应用” 这个概念,它提供的是更细粒度的 “工作负载” 原语,比如 Deployment 或者 DaemonSet。

而在实际环境中,一个应用往往是由一系列独立组件的组合,比如一个 “PHP 应用容器” 和一个 “数据库实例” 组成的电商网站;一个 “参数服务节点” 和一个 “工作节点” 组成的机器学习训练任务;一个由 “Deployment + StatefulSet + HPA + Service + Ingress” 组成的微服务应用。

“应用” 这个概念在 Kubernetes 项目中的缺失,既是一个有意而为之的设计,却也造成了今天云原生应用管理生态的极度碎片化和极高的学习门槛。如何通过标准化的方式去解决这个 “Kubernetes 里到底什么是应用” 的问题,正是 OAM 项目发布的最初始动机。 

有什么意义?

在 OAM 发布之前,云原生生态里其实并没有一个叫做 “应用” 的概念。哪怕在今天,全世界几乎每一个在落地云原生的团队,都有一个自己定义的 “应用” 的概念,它们的抽象程度层次不齐,定义方式也丰富多样,这就导致了所有围绕着这些 “应用” 构建出来的系统,就成为了一个又一个的大烟囱。 

对于整个云原生生态来说,这种应用层的碎片化和烟囱化,其实对于整个生态演进是非常不利的。而今天的现状也已经证明了这一点,在 Kubernetes 逐渐标准化了基础设施能力的接入方式之后,原本更加接近用户、更加重要的应用管理层,却几乎停滞了演进,在最近几年里没有提出任何一个创新性的思想出来。 

应用管理层停滞不前的结果,就是全世界的业务研发和运维一夜之间都被迫变成了 “容器专家”,一边学习着根本不应该是他们关心的各种 “基础设施即数据(Infrastructure as Data)” 领域的概念(比如:声明式 API,控制器等),一边吐槽 Kubernetes 实在是太复杂了、设计太奇葩了。 

简而言之,Kubernetes 作为一个面向基础设施工程师的系统级项目,主要负责提供松耦合的基础设施语义,这就使得用户学习和操作 Kubernetes YAML 文件的时候,往往会感觉这些文件里的关注点非常底层,学习门槛很高。 

实际上,对于Kubernetes 真正的最终用户比如业务研发人员和运维人员来说,他们并不想配置这些如此底层的资源信息,而是希望有更高维度的抽象。这就要求一个真正面向最终用户侧的应用定义,需要能够为业务研发和应用运维人员提供各自视角的应用定义原语。所以说,OAM 带来的第一个改变,就是提供了一种大家都可以遵循的、标准化的方式来定义更高层级的应用层抽象,并且把“关注点分离”作为这个定义模型的核心思想。

而 OAM 带来的第二个变化,则是为 Kubernetes 项目带来了应用定义,更确切地说,是对应用本身和它所需运维能力进行定义与描述的标准开源规范。站在 Kubernetes 项目的角度来讲,OAM 是一个 Kubernetes 原生的标准的“应用定义”项目,同时也是一个专注于封装、组织和管理 Kubernetes 中各种“运维能力”、以及连接“运维能力”与“应用”的平台层框架。 

详细的说,OAM 基于 Kubernetes API 资源模型(Kubernetes Resource Model)来标准化应用定义的规范,它强调一个现代应用是多个组件的集合,而非一个简单的工作负载或者 K8s Operator。所以在 OAM 的语境中,一个 PHP 容器和它所依赖的数据库,以及它所需要使用的各种云服务,都是一个“电商网站”应用的组成部分。更进一步的,OAM 把这个应用所需的“运维策略”也认为是一个应用的一部分,比如这个 PHP 容器所需的 HPA(水平自动扩展策略):

2.png

以 Crossplane 项目为例,它在本次合作中通过 OAM 升级之后得到了怎样的变化呢?

“ 作为混合云管理领域中的佼佼者,Crossplane 的 OAM 化保证了今天任何一个符合 OAM 规范的待运行程序、运维能力和它所依赖的云服务,可以组成一个整体在混合云环境中无缝漂移。” 

这种平台无关的应用定义范式,使得应用研发人员只需要通过 OAM 规范来描述他们的应用程序,那么该应用程序就可以在任何 Kubernetes 群集或者 Serverless 应用平台甚至边缘环境上运行,而无需对应用描述做任何修改。本次合作中 Crossplane OAM 版的发布,则意味着 OAM 社区正在将标准应用定义和标准化的云服务管理能力统一起来,从而实现真正的 “云端应用交付” 。

OAM 如何发挥作用?

那么 OAM 在一个项目中是如何运作的呢?

据介绍,OAM 以原生插件的方式运行在 Kubernetes 当中。OAM 强调整个模型是关注点分离的。即业务研发人员负责定义和维护组件 (Component) 来描述服务单元,而运维人员定义运维特征 (Trait),并将其附加到前面的组件上,最后构成 OAM 可交付物 ——ApplicationConfiguration。

3.png

这种设计是 OAM 在能够无限接入 Kubernetes 各种能力的同时,保证给业务研发与运维人员提供最佳的使用体验和最低的心智负担的重要基础。与此同时,基础设施工程师可以随时在 Kubernetes 中添加更多工作负载(例如 FaaS)以运行无服务器功能,或者添加运维特性(例如 CronHPA)来定义 CronJob 类型的 HPA 策略。OAM 以标准的声明方式在整个平台中管理应用交付能力和流程,并且提供面向各个角色的 API 原语来表达各自的诉求,最后通过 Kubernetes 把这些诉求落实。

什么样的项目需要 OAM?

实际上,几乎所有基于 Kubernetes 的应用管理平台都对通过 OAM 来以标准化的方式去构建自己的应用模型有明确的诉求。另一方面,由于 OAM 是原生的 Kubernetes API 资源模型,这里的迁移过程难度很低,可以通过 API 对象灰度纳管的方式逐步完成迁移操作(通过 OAM 对象逐步接管现有 Kubernetes 对象)。

而相比于传统 PaaS 封闭的、不能同 “以 Operator 为基础的云原生生态” 衔接的现状,基于 OAM 和 Kubernetes 构建的现代云原生应用管理平台,本质上是一个 “以应用为中心” 的  Kubernetes ,保证了这个应用平台在能够无缝接入整个云原生生态。同时,OAM 可以进一步屏蔽掉容器基础设施的复杂性和差异性,为平台的使用者带来低心智负担的、标准化的、一致的应用管理与交付体验。这就使得一个基于OAM 构建的 Kubernetes 应用平台,首先能够隐藏底层基础设施的细节(例如,是云还是物联网),专注于应用层抽象,提供以应用为中心的资源模型。

其次,OAM 划分了应用交付路径上的开发、运维、基础架构三种角色,分离了关注点,让流程更加清晰和易于管理。

第三,OAM 站在 K8s  API 资源模型的肩膀之上,提供了可移植的应用与基础设施抽象,让一个应用描述可以完全不加修改的云、边、端等任何环境下直接交付运行起来。

4.png

除此之外,OAM 还定义了一组核心工作负载/运维特征/应用范畴,作为应用程序交付平台的基石。而平台开发者也可以添加更多工作负载(例如 FaaS 或者任意云服务),或者添加运维特性(例如 CronHPA)来定义 CronJob 类型的 HPA 策略。OAM 以标准的声明方式在整个平台中管理应用交付能力和流程。当模块化的 Workload 和 Trait 越来越多,就会形成组件市场。而 OAM 就像是这个组件市场的管理者,处理组件之间的关系,把许多组件集成起来变成一个产品交付给用户。OAM 加持下的 Kubernetes 应用管理平台,可以像乐高积木一样灵活组装底层能力、运维特征、以及开发组件。使得应用管理变得统一,功能却更加强大。

OAM 社区现状

谈到 OAM 项目社区的现状。“ 作为一个没有同商业诉求绑定的中立开源社区,OAM 生态自成立以来保持着较高的活跃度和参与度,大量的社区 Issue/PR贡献都来自阿里和微软之外的团队比如 AWS、腾讯、字节跳动、谐云、青云、好雨云、第四范式等生态参与者。除了阿里和微软本身以及基于 OAM 实现了内部应用管理架构的统一和标准化之外,不少基于 OAM 的云服务比如阿里云 EDAS 也已经上线。”  

与此同时,OAM 技术体系也开始在很多大型社区用户(比如 MasterCard 万事达卡)中落地,同时也出现了产品和商业化的实践(比如:谐云的可视化OAM实现),甚至来自其它云厂商比如 AWS 的开源项目整合与对接。可以看到,OAM 社区正在迅速成长和壮大中。 

开源社区的运作模式一直是我们比较好奇的地方。据介绍,OAM 项目目前完全由社区驱动,由各子项目的 Maintainer 小组进行维护和管理。社区有每两周一次的社区会议(美国和北京时间各一个)来进行重大事项的讨论与决策和同步项目进度。整个社区的的工作流程按照 Maintainer 席位的投票机制来运转,同时兼顾最终用户的投票权。目前 OAM 社区的核心 Maintainer 来自阿里云,微软和 Crossplane 项目原有的成员。在推广策略上,由多个国际化大厂团队维护的 OAM 项目从诞生起就是完全面向国际化开源社区的运作方式,凭借阿里与微软自身场景,以及整个云原生社区和贡献者的高质量输入来驱动整个项目向正确的方向持续演进,在沟通、分享、协作的氛围中鼓励贡献和发展社区。这种模式下,一旦突破早期破冰阶段,在随后社区传播和推广方面会带来病毒式的效果。 

目前 OAM 的版本是 v1alpha2 ,OAM 的版本之后会不停迭代,根据实际的场景持续演进;当然,同时 spec 本身也会保证规范的稳定和兼容。这个标准的更新速度主要是取决于用户的接受程度和反馈的情况,并且会在今年发布 Beta 版。本次合作中,OAM 已经发布了 Kubernetes 的标准实现与核心依赖库,这也就意味着未来整个开源生态都可以直接通过对接 Crossplane 或者 oam-kubernetes-runtime 来支持 OAM 标准,所以这样的项目很快会越来越多。

如果你有任何疑问:
钉钉扫码进入 OAM 项目中文讨论群

5.png

  • 通过 Gitter 直接参与讨论
  • OAM 开源实现地址
  • 点击 star 一下

作者简介

Andy Shi  阿里云高级技术专家,阿里巴巴集团开发者布道师,常年在硅谷从事开源技术推广,在云平台使用和网络基础架构方面拥有丰富经验。

孙健波(花名:天元)  阿里云技术专家,是 OAM 规范的主要制定者之一,致力于推动云原生应用标准化。同时也在阿里巴巴参与大规模云原生应用交付与应用管理相关工作。

课程推荐

为了更多开发者能够享受到 Serverless 带来的红利,这一次,我们集结了 10+ 位阿里巴巴 Serverless 领域技术专家,打造出最适合开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。

点击即可免费观看课程:https://developer.aliyun.com/learning/roadmap/serverless

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

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

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

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

相关文章

一文读懂人类信息存储进化史

感兴趣的同学,欢迎点击查看详情哦 在很久很久以前 那个时代语言和文字还没出现 人们的还都是通过“呜呜呜”的方式来进行沟通 但是事情还是得记的 因此“结绳记事”这种方法开始在人群里开始流行 但是,事情总归是越来越多,结也会越来越多 到最…

node+express创建第一个node项目

一、安装nodejs 1.到官网下载nodejs安装包 中文官网地址:http://nodejs.cn/ 英文官网地址:https://nodejs.org/en/ 根据自己的系统和版本,选择下载对应的安装包! 下面的安装以windows 64 位系统版本安装包为例! 2.双…

听一个内行人讲云原生简史

作者 | 吕建伟责编 | 寇雪芹头图 | 下载于视觉中国引子1999年,发生在我自己身上的几件事:1、买了两张盗版光盘:Sun Solaris OS、红帽Linux。2、正在用COM、MTS,开发三层架构的局域网内的大型企业商用套件,由Windows客户…

一个连续创业者的不破不立——对话阿里云MVP蒋烁淼

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 他是公认的“湖畔第一大脑”,被王坚院士称为“云计算的试飞员”。跟他聊下来,仿佛上…

node+express项目链接MySQL数据库(最简单版)

nodeexpress项目链接MySQL数据库(最简单版) (假定你nodeexpress项目已创建完成,可参照这里) 第一步、安装mysql驱动 npm install mysql --save-dev第二部、创建数据库表 第三部、连接数据库 在app.js下写入以下代码…

阿里云量产50家独角兽前夜

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在阿里云SaaS加速器出现前后,中国的IT史上其实出现过各式各样的加速器、训练营。究竟在加速什么?怎么…

企业微信_H5应用如何真机调试_host配置及代理相关

文章目录三、手机调试3.1. 代理软件3.2. 安装,启动3.3. 连接无线网3.4. 代理端口3.5. 手机连接无线网3.6. 设置代理3.7. 代理允许3.8. 手机企微登录3.9. 效果图3.10. 代理监控三、手机调试 手机电脑需要连接同一个无线网或者局域网 3.1. 代理软件 下载代理软件 cha…

关于容器底层,超详细的 Namespace 机制讲解

来源 | 多选参数责编 | 寇雪芹头图 | 下载于视觉中国NamespaceLinux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。这种隔离机制和 chroot 很类似,chroot 是把某个目录修改为根目录,从而无法访问外部的内容。Linux Namesapce 在此基础之上&…

从零入门Serverless|一文搞懂函数计算及其工作原理

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是函数计算? 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器…

在线视频面试业务融合阿里云,助您找到心仪好工作

“您好,可以听到吗?“ “……. 您…好,我…这里画面卡顿….了!” “…..不好意….思,能重复一下您刚才的描述吗吗吗,没听太清….楚…………..” “哎,感觉这次又糊了,这已经是我的第…

HbuilderX中 真机调试 Android IOS

文章目录一、Android二、IOS2.1. 运行到IOS2.2. 打开调试模式一、Android HbuilderX中 Android 真机调试 二、IOS 2.1. 运行到IOS 2.2. 打开调试模式

终于有人把Python讲清楚了!!

从事Python开发的这些年中,我见过很多相关的教程和书籍,他们大都这样讲 :先介绍 Python 的基本语法规则、list、dict、tuple 等数据结构,然后再介绍字符串处理和正则表达式,介绍文件等IO操作.... 就这样一点一点往下说…

浪迹天涯的骨灰级开源爱好者——对话阿里云MVP吴晟

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 吴晟是我见过最“浪”的程序员,喜欢买买买,热爱公路自驾。格子间拘不住他向往自由的…

2019-12-31

2019.12.31 天气:晴 地点:杭州 今天是2019年的最后一天,就用这篇博客来记录一下这一年的历程吧。 时间很快,它从指缝中悄悄划过的时候,我们好似毫无感觉,突然又一年就过去了,大学四年的生活也随…

高科技护航“史上最严”高考

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 人脸识别验证身份、无线电测控车上街、无人机高空巡考……这些平时人们生活中的高科技,将使用到即将到来的高考中…

腾讯云~安装MinIO

文章目录1. 下载安装2. 安全策略组3. 访问控制台https://docs.min.io/docs/minio-quickstart-guide.html1. 下载安装 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio vim start-minio.sh# 这个是新版的,把后台管理设置为9111端口&…

一文详解Serverless架构模式

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS&#…

0 改造,让单体/微服务应用成为 Serverless Application

作者 | 陈涛(毕衫)责编 | 寇雪芹头图 | 下载于视觉中国天然云原生的 Serverless1. 云原生时代随着 2013 年以 Docker 为代表的容器技术、CNCF 基金会以及 K8s 的发展等,云原生开始被广大开发者所熟知。云原生时代之前还有两个阶段&#xff1a…

vmware虚拟机为何和主机网段不一样 电脑 虚拟机 手机同一网段

NAT 改为“桥接”,即直接连接到物理网络,这样虚拟机和物理主机就处于在同一网段了 电脑ip 虚拟机 手机网络