10.3.4 OAM 与 KubeVela

2019 年 10 月,阿里云与微软在上海 QCon 大会上联合发布了全球首个开放应用模型(OAM,Open Application Model)。该项目有两个部分:OAM 规范以及 OAM 规范的 Kubernetes 实现。

在 OAM 的规范中,应用由一组具有运维特征(Trait)的组件(Component)组成,并且限定在一个或多个应用边界(Application Scope)内。上述并非是完全抽象的概念,而是可实际使用的自定义资源(CRD)。这些概念的具体含义如下:

  • 组件(Component):只要有编程经验的人,应该都知道组件的含义,组件是应用的基本构建块,具备可复用性,用于定义核心功能单元。在 OAM 中,每个组件代表一个独立的、可部署的微服务或资源(例如:数据库、缓存、API 网关等)。
  • 运维特征(Trait):既然应用功能可以复用,那某些运维逻辑自然也可以封装复用。运维特征是可以随时绑定给待部署组件的、模块化、可拔插的运维能力,比如:副本数调整(手动、自动)、数据持久化、 设置网关策略、自动设置 DNS 解析等。
  • 应用边界(Application Scopes):定义应用级别的部署特征,比如健康检查规则、安全组、防火墙、SLO、检验等模块。相对于运维特征而言,应用边界作用于一个应用的整体,而运维特征作用于应用中的某个组件。
  • 应用(Application):将 Component(必需)、Trait(必需)和 Scope(可选)组合并实例化,形成了一个完整的应用描述。

OAM 通过上述自定义资源将原本复杂的 Kubernetes All-in-one 配置进行了一定程度的解耦。应用研发人员负责管理 Component,运维人员将 Component 组合并绑定 Trait,形成 Application。平台或基础设施提供方则负责 OAM 的解释能力,将这些自定义资源映射到实际的基础设施上。各种角色的关注点恰当地分离,不同角色更聚焦更专业的做好本角色的工作。

整个过程如图 10-3 所示。


图 10-3 OAM 工作原理

KubeVela 是 OAM 规范在 Kubernetes 上的完整实现,它起源于 OAM 社区,由阿里巴巴、微软等技术专家共同维护。

对于平台工程师(Platform Builder)来说,KubeVela 是一个具备无限扩展性的 Kubernetes 原生应用构建引擎。他们负责准备应用部署环境、维护稳定可靠的基础设施,并将这些基础设施能力作为 KubeVela 模块注册到集群中。对于最终用户(End User,研发人员或运维人员)来说,只需选择部署环境、挑选能力模块并填写业务参数,就可以在不同运行环境上把应用随时运行起来!

KubeVela 工作流程如图 10-4。


图 10-4 KubeVela 工作原理

企业落地 Kubernetes 的难题

很多企业落地 Kubernetes 的时候采用了 “PaaS” 化的思路,即在 Kubernetes 之上,开发一个类 PaaS 平台。但这个平台设计理念、模型和使用方式往往都是自己的,这些设计会“盖住” Kubernetes 的能力,使其声明式 API、容器设计模式、控制器模式根本无法发挥原本的实力,也难以与广泛的生态系统对接。

上述问题的直接表现就是,这个 PaaS 系统不具备扩展性。假设我们要满足以下诉求:

  • 能不能帮我运行一个定时任务
  • 能不能帮我运运行一个 MySQL Operator
  • 能不能根据自定义 metrics 定义水平扩容策略
  • 能不能基于 Istio 来帮我做渐进式灰度发布

这里的关键点在于,上述能力在 Kubernetes 生态中都是常见且广泛支持的,有些甚至是 Kubernetes 内置功能。但是到了 PaaS 这里,要实现这些能力往往需要重新开发,而且由于先前的设计假设,可能还需要进行大规模的重构。

KubeVela 本质上是在 Kubernetes 上安装了一个 OAM 插件,使平台工程师能够依据 OAM 规范,将 Kubernetes 生态中的各种能力和插件整合成一个应用交付平台。所以说,KubeVela 为最终用户提供了类似 PaaS 的使用体验,同时也为平台工程师带来了 Kubernetes 原生的高可扩展性和平台构建规范。

不过,目前来看,KubeVela 背后的理论还是过于抽象,落地有一定的技术门槛!但 KubeVela 这种构建以”应用为中心“的上层平台的思想,毫无疑问代表着云原生技术未来的发展方向!

总字数:1237
Last Updated:
Contributors: isno, acechef