什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 QCon 上海 2019 重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM)开源项目。


社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_OAM

作者 | 徐运元,杭州谐云科技合伙人及资深架构师,云计算行业和 Kubernetes 生态资深从业者


导读:什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 QCon 上海 2019 重磅宣布,阿里云与微软联合推出开放应用模型 ​​Open Application Model (OAM)开源项目​​。


OAM 的核心关注点


  • 关注点分离:开发者关注应用本身,运维人员关注模块化运维能力,让应用管理变得更轻松、应用交付变得更可控;
  • 平台无关与高可扩展:应用定义与平台层实现解耦,应用描述支持任意扩展和跨环境实现;
  • 模块化应用运维特征:可以自由组合和支持模块化实现的运维特征描述。

OAM 的核心模块

1. 应用组件(Components)

在 OAM 中,“应用”是由多个概念共同组合而成。第一个概念是:应用组件(Components),它是整个应用的重要组成部分。应用组件既可以包括应用运行所依赖的服务:比如 MySQL 数据库,也包括应用服务本身:比如拥有多个副本的 PHP 服务器。开发者可以把他们写的代码“打包”成一个应用组件,然后编写配置文件来描述该组件与其他服务之间的关系。

应用组件的概念让平台架构师等能够将应用分解成一个个可被复用的模块,这种模块化封装应用组成部分的思想,代表了一种构建安全、高可扩展性应用的最佳实践:通过一个完全分布式的架构模型,实现了应用组件描述和实现的解耦。

2. 应用部署配置文件(Application Configuration)

为了将这些应用组件描述变成一个真正运行起来的应用,应用运维人员会通过一个专门的、包含了所有应用组件信息的部署配置文件来实例化这个待运行的应用。这个配置文件本身也是 OAM 规范中的一个声明式 API,用来让应用运维人员能够根据开发者或者平台提交的应用描述,实例化出对应的、真正运行起来的应用。

3. 应用运维特征(Traits)

最后一个概念是一组应用运维特征(Traits),它们描述了应用在具体部署环境中的运维特征,比如应用的水平扩展的策略和 Ingress 规则,这些特征对于应用的运维来说非常重要,但它们在不同的部署环境里却往往有着截然不同的实现方式。 举一个简单的例子,同样是 Ingress,它在公有云上和本地数据中心的实现可能完全不同:前者一般是 SLB 这样的云服务,而后者则可能是一个专门的硬件。这也就意味着针对这两个环境的 Ingress 运维工作,将会有天壤之别。 但与此同时,无论是在哪个环境里,这个 Ingress 规则对于应用开发人员来说,可能是完全相同的。

应用特征的设计,让这种关注点分离成为可能:只要这两个环境在 OAM 模型下提供了对 Ingress 这个应用运维特征的实现,那么应用就可以使用统一的 Ingress 规则描述,无差别地在这两个地方运行起来。与此同时,这两个环境的基础设施供应商可以继续通过配置这些应用特征的实现,来满足它们各自的运维要求(例如:不同环境里 Ingress 实现在满足合规性和安全性上的差异)。

一个基于 OAM 的可视化实现介绍

目前该平台主要基于 OAM 的 V1 alpha1 版本实现,并且对于 OAM 的核心理念进行的抽象和封装,以更符合用户的使用习惯。在本文介绍的可视化部分背后,是完整的 OAM 格式的 ​​yaml 文件​​。可视化 OAM 平台主要包含两大核心功能:

1. 运维特征模型

运维特征模型主要是针对 OAM 的 Traits 的具体实例化,让用户可以把复杂的一些运维特性可以直接以插拔的形式直接让应用发布者去使用。目前平台已经封装了包含服务发布、日志搜集、自动伸缩、存储挂载等 8 个运维特征的封装。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_容器_02

图 1 运维特征模型仓库

2. OAM 应用编排

OAM 应用编排功能将 OAM 的应用发布全流程进行了可视化的实现,将应用组件添加、配置文件修改以及运维特征添加等 OAM 的核心功能进行了抽象和封装。OAM 应用编排目前包含以下核心功能:


  • 组件编排: 可视化添加平台的组件并且进行组件的参数设置;
  • 运行特征编排:在添加的平台组件基础上进行运维特征的添加和编排(也为后续开发、运维关注点分离做准备);
  • OAM 版本管理:平台会保存所有的 OAM 发布版本,并且提供升级和回滚功能。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_OAM_03

图 2 OAM 应用编排主界面

接下来,我们会以一个典型应用(nginx+tomcat+redis)的部署来全面解析,如何在平台上进行 OAM 的可视化发布。

前置条件

运维特征(Traints)应用模型已安装,在界面上,可以快速查看有哪些运维特征应用模型,以及它们的运行状态。当前只支持系统定义的运维特征,后续会开发自定义的运维特征的生命周期管理。让用户可以编写自己的运维特征并且安装到平台进行使用。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_容器_04

OAM 应用创建流程

OAM 应用基本发布流程:应用创建->新增组件->应用编排->保存版本->发布应用。


  • **创建应用: **点击应用->OAM 应用菜单, 点击【创建应用】按钮,输入必填项;
  • **添加组件: **点击【新增组件】按钮,设置工作负载类型,容器配置等;

选择想要创建的工作负载类型,目前已经将 Server、Singleton Server、Task、Singleton Task、Worker 以及 Singleton Worker 等六种核心的工作负载进行了封装,用户只需要在下拉框中勾选自己想要创建的负载类型即可。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_05

在选择完负载类型之后,用户可以以可视化的形式去选择想要发布的镜像以及容器的基本配置参数。同时,目前也支持基于多个容器的编排发布。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_云原生_06


  • 根据我们的需求,我们依次添加 tomcat、redis、mysql 三个组件,在界面上就可以看到组件的状态,同时点击“详情”可以看到对应的 Kubernetes 资源信息;

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_云原生_07

查看组件的详细信息。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_08


  • 应用编排:在创建完需要部署的组件之后,我们的 OAM 应用已经具备了开发的属性。

之后我们需要根据需求给每一个组件添加运维特征:点击进入应用编排界面,你可以看到刚才添加的组件已经展示在画布之上;在画布上点击单个组件,可以看到目前适合该组件的运维特征,勾选你所需要的运维特征即可快速添加;在添加完运维特征之后,会在右边栏弹出运维特征的配置参数,配置保存之后这些运维特征即可生效;

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_云原生_09


  • 在添加完所有组件的运维特征之后,我们就可以看到一个完整的编排完的 OAM 应用了。在 OAM 的 V2 版本,我们同时会再增加应用的依赖关系,用户可以通过拖拽和连线来实现应用之间的依赖编排;

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_云原生_10


  • 保存版本:最后,我们可以点击【保存当前内容为版本】按钮,输入版本号,点击【确定】;

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_容器_11


  • 发布应用:点击【发布】按钮,发布应用

发布应用后,组件状态显示‘已实例化’。应用实例状态显示“健康”。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_OAM_12

点击事件 tab 页,显示事件。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_容器_13

用户可以快速查看已经创建的 ingress,并且进行访问。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_OAM_14

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_容器_15


  • 用户可以通过修改 traints 信息,快速对当前的应用进行修改和升级。

点击进入应用编排界面,并且编辑 tomcat 实例数为 4。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_16

将编辑后的版本,保存为当前版本则会直接讲修改的配置更新到当前实例。如果选择保存为新版本,则会将当前配置修改保存为模板,等待发布。我们将此修改保存为新版本。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_17

点击更新为此版本,进行刚才修改的配置发布。发布完成之后,我们可以看到有两个版本的 OAM 应用模板。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_18

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_云原生_19

查看详情,确认 tomcat 实例数已经变更为 4,但是由于我们同时设置了自动扩缩容的实例为 3,因此在扩容之后又迅速变回实例 3。

社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低_kubernetes_20

至此,一个完整的部署和更新 OAM 应用的可视化流程就演示完了。

总结

如今 OAM Spec 已经迭代到了 ​​v1alpha2​​ 版本,新版本在坚持 OAM Spec 平台无关的基础上,整体变得更 Kubernetes 友好化,很大程度上平衡了标准与可扩展性,更好的支持已有的 CRD。也就是说,如果你已经编写了现成的 CRD Operator,可以平滑的接入到 OAM 体系中,并且享受到 OAM 模型的红利。

更详细的新版本介绍可以阅读​​《​​​​OAM v1alpha2 新版发布:平衡标准与可扩展性,灵活接入 CRD operator​​​​》​​。

该可视化平台也已经在全面升级到 v1alpha2 的过程中,新版的支持可以更好的允许用户编写插件扩充平台的功能。

该平台来自于阿里云战略合作伙伴杭州谐云科技,该平台基于 OAM 实现的开源版本也已经在路上,大家敬请期待。

目前,OAM 规范和模型实际已解决许多现有问题,但它的路程才刚刚开始。OAM 是一个中立的开源项目,我们欢迎更多的人参与其中,共同定义云原生应用交付的未来。​

杭州谐云科技有限公司成立于 2016 年 7 月,公司核心团队来自于浙江大学 SEL 实验室,谐云团队在云计算及相关领域具备深厚的技术积淀,在全球顶级开源社区 Docker、Kubernetes、Cloud Foundry 等项目贡献累计超过 200 万行代码,排名全球第四,国内第一。团队曾著书中国第一本深度解析容器云的专业书籍《Docker 容器与容器云》,是国内为数不多掌握底层核心技术的容器云提供商。建设了目前中国最大的容器集群落地案例,支撑着国内最大的互联网电视云。

课程推荐

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