谐云推出全球首款基于OAM的可视化实现产品

以下文章来源于阿里巴巴云原生

https://mp.weixin.qq.com/s/LNNj0-8HG8DaRwLvUv_NiA

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

导读:近日,谐云率先实现了基于OAM(开放应用模型)的可视化编排,给全球云原生生态事业填上完美的一笔,成为全球首款基于OAM的应用可视化编排平台。


​​什么是OAM(open application model)?

       OAM 是一个专注于描述应用的标准规范。有了这个规范,应用描述就可以彻底与基础设施部署和管理应用的细节分开。这种关注点分离(Seperation of Conerns)的设计好处是非常明显的。举个例子,在实际生产环境中,无论是 Ingress ,CNI,还是 Service Mesh,这些表面看起来一致的运维概念,在不同的 Kubernetes 集群中可谓千差万别。通过将应用定义与集群的运维能力分离,我们就可以让应用开发者更专注于应用本身的价值点,而不是”应用部署在哪“这样的运维细节。此外,关注点的分离让平台架构师可以轻松地把平台的运维能力封装成可被复用的组件,从而让应用开发者能够专注于将这些运维组件与代码进行集成,从而快速、轻松地构建可信赖的应用。Open Application Model 的目标是让简单的应用管理变得更加轻松,让复杂的应用交付变得更加可控。

OAM能为我们带来什么?

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

OAM的核心模块:

一、应用组件(Components)

       在 OAM 中,“应用”是由多个概念共同组合而成。第一个概念是:应用组件(Components),它是整个应用的重要组成部分。应用组件既可以包括应用运行所依赖的服务:比如 MySQL 数据库,也包括应用服务本身:比如拥有多个副本的 PHP 服务器。开发者可以把他们写的代码”打包“成一个应用组件,然后编写配置文件来描述该组件与其他服务之间的关系。应用组件的概念让平台架构师等能够将应用分解成成一个个可被复用的模块,这种模块化封装应用组成部分的思想,代表了一种构建安全、高可扩展性应用的最佳实践:通过一个完全分布式的架构模型,实现了应用组件描述和实现的解耦。

二、应用部署配置文件(Application Configuration)

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

三、应用运维特征(Traits)

       最后一个概念是一组应用运维特征(Traits),它们描述了应用在具体部署环境中的运维特征,比如应用的水平扩展的策略和 Ingress 规则,这些特征对于应用的运维来说非常重要,但它们在不同的部署环境里却往往有着截然不同的实现方式。举一个简单的例子,同样是 Ingress,它在公有云上和本地数据中心的实现可能完全不同:前者一般是 SLB 这样的云服务,而后者则可能是一个专门的硬件。这也就意味着针对这两个环境的 Ingress 运维工作,将会有天壤之别。但与此同时,无论是在哪个环境里,这个 Ingress 规则对于应用开发人员来说,可能是完全相同的。应用特征的设计,让这种关注点分离成为可能:只要这两个环境在 OAM 模型下提供了对 Ingress 这个应用运维特征的实现,那么应用就可以使用统一的 Ingress 规则描述,无差别地在这两个地方运行起来。与此同时,这两个环境的基础设施供应商可以继续通过配置这些应用特征的实现,来满足它们各自的运维要求(例如:不同环境里 Ingress 实现在满足合规性和安全性上的差异)。

如何实现基于OAM的可视化?

       可视化 OAM 平台主要包含两大核心功能:

一 运维特征模型

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

图1 运维特征模型仓库

二 OAM应用编排

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

       组件编排: 可视化添加平台的组件并且进行组件的参数设置

       运行特征编排:在添加的平台组件基础上进行运维特征的添加和编排(也为后续开发、运维关注点分离做准备)

       OAM版本管理:平台会保存所有的OAM发布版本,并且提供升级和回滚功能

图2 OAM应用编排主界面

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

前置条件

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

OAM应用创建流程

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

       1. 创建应用: 点击应用->OAM应用菜单, 点击【创建应用】按钮,输入必填项。

       2. 添加组件: 点击【新增组件】按钮,设置工作负载类型,容器配置等。

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

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

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

查看组件的详细信息

       4.应用编排:在创建完需要部署的组件之后,我们的OAM应用已经具备了开发的属性。之后我们需要根据需求给每一个组件添加运维特征。

       a.点击进入应用编排界面,你可以看到刚才添加的组件已经展示在画布之上。

       b.在画布上点击单个组件,可以看到目前适合该组件的运维特征,勾选你所需要的运维特征即可快速添加

       c.在添加完运维特征之后,会在右边栏弹出运维特征的配置参数,配置保存之后这些运维特征即可生效

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

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

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

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

       b.点击事件tab页,显示事件

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

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

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

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

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

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

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

未来

       相信应用的构建会越来越简单,应用部署也将更贴近用户,基础设施的选择会根据用户的架构需求自动匹配,用户可以真正享受到云平台化的红利,快速复用已有的模块化能力,而 OAM 也将成为应用云原生化的必然选择。

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

       目前,OAM 规范和模型实际已解决许多现有问题,但它的路程才刚刚开始。OAM 是一个中立的开源项目,我们欢迎更多的人参与其中,共同定义云原生应用交付的未来。如果大家有什么问题或者反馈,非常欢迎与我们探讨与联系。

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址