OAM
OAM,open application model是阿里巴巴和微软共同开发的云原生应用规范模型。它使用来解决一个完整的面向业务场景的应用的问题。是一个标准的、基础设施 无关的跨云应用部署模型。有以下几个特性:
- 应用为先。一个应用的交付与部署应该是自包含的,其中的各类操作行为应该作为应用定义的一部分,这些内容与实际基础设施无关。
- 清晰和可扩展性。定义一套开放标准,可以模块化整个应用交付流程,根据个 人需要将这些模块自由组装,达成自己想要的结果。
- 云服务供应商无关。定义的开放标准应该是一套更高级别的抽象,可以跨本地 集群、跨云服务供应商,不会被锁定到任何一个厂商的底座
OAM规范遵循以下原则
- 关注点分离:根据功能和行为来定义模型,以此划分不同角色的职责,
- 平台中立:OAM 的实现不绑定到特定平台;
- 优雅:尽量减少设计复杂性;
- 复用性:可移植性好,同一个应用程序可以在不同的平台上不加改动地执行;
- 不作为编程模型:OAM 提供的是应用程序模型,描述了应用程序的组成和组件的拓扑结构,而不关注应用程序的具体实现。
OAM的基本对象
- Component:OAM 中最基础的对象,该配置与基础设施无关,定义负载实例的运维特性。例如一个微服务 workload 的定义。
- TraitDefinition:一个组件所需的运维策略与配置,例如环境变量、Ingress、AutoScaler、Volume 等。(注意:该对象在 apiVersion: core.oam.dev/v1alpha1 中的名称为 Trait)。
- ScopeDefinition:多个 Component 的共同边界。可以根据组件的特性或者作用域来划分 Scope,一个 Component 可能同时属于多个 Scope。
- ApplicationConfiguration:将 Component(必须)、Trait(必须)、Scope(非必须)等组合到一起形成一个完整的应用配置。
OAM的工作原理
OAM Spec 定义了云原生应用的规范(使用一些 CRD 定义), KubeVela 可以看做是 OAM 规范的解析器,将应用定义翻译为 Kubernetes 中的资源对象。可以将上图分为三个层次:
- 汇编层:即人工或者使用工具来根据 OAM 规范定义汇编出一个云原生应用的定义,其中包含了该应用的工作负载和运维能力配置。
- 转义层:汇编好的文件将打包为 YAML 文件,由 KubeVela 或其他 OAM 的实现将其转义为 Kubernetes 或其他云服务(例如 Istio)上可运行的资源对象。
- 执行层:执行经过转义好的云平台上的资源对象并执行资源配置。
参考管官网
kubevela
OAM应用,主要通过kubevela项目来实现
kubevela项目地址 模块定义(Definition) | KubeVela
核心概念
KubeVela 是一个开箱即用的现代化应用交付与管理平台,它使得应用在面向混合云环境中的交付更简单、快捷。使用 KubeVela 的软件开发团队,可以按需使用云原生能力构建应用,随着团队规模的发展、业务场景的变化扩展其功能,一次构建应用,随处运行。
KubeVela 的核心是将应用部署所需的所有组件和各项运维动作,描述为一个统一的、与基础设施无关的“部署计划”,进而实现在混合环境中标准化和高效率的应用交付。这使得最终用户无需关注底层细节,就可以使用丰富的扩展能力,并基于统一的概念自助式操作。
每一个应用部署计划都由四个部分组成,分别是组件,运维能力,部署策略和工作流