Trait

本文基于 OAM v1alpha2 版本。

Trait 用于定义 Component 的运维属性,是对 Component 运行时的叠加,需要通过 ApplicationConfiguration 的配置将其与 Component 绑定,用于动态修改 Componentworkload 的行为。

不同的 Trait 可能适用于不同的 Component(因为不同的 Component 中的 workload 可能不同,因此它们的运维特性也可能不同),如流量路由规则(如负载均衡策略、入口路由、出口路由、百分比路由、限流、熔断、超时限制、故障注入等)、自动缩放策略、升级策略、发布策略等。

Trait 还具有以下几个特征:

  • Trait 是根据在 Component 中引用的顺序应用的,如果某些运维特征本身具有依赖性,可以通过显式排序来解决;
  • 对于某一类型的 Trait 在同一个 Component 实例只能应用一个;
  • 在应用 Trait 时,需要进行冲突检查,如果一组 Trait 的特性不能满足运维组合,则判定为不合法;

将运维属性从应用组件本身的定义( Component)中剥离有如下几个好处:

  • Trait 通常由应用运维人员定义和维护,而不需要应用开发人员参与,应用开发人员对 Trait 可能无感知,减轻了应用开发人员的负担;
  • Trait 将云原生应用程序的一些通用运维属性从应用配置中剥离出来,大大提高了运维逻辑的可复用性;
  • 应用 Trait 组合前进行运维特性检查,可以有效防止配置冲突和无法预期的情况发生;

下面是根据 OAM 规范定义的一个 Trait 示例。

apiVersion: core.oam.dev/v1alpha2
kind: TraitDefinition
metadata:
  name: manualscalertrait.core.oam.dev
spec:
  appliesToWorkloads:
    - core.oam.dev/v1alpha2.ContainerizedWorkload
  definitionRef:
    name: manualscalertrait.core.oam.dev

CR 即 Custom Resource(自定义资源),指的是实例化后的 Kubernetes CRDdefinitionRefTrait shcema 在 OAM 解释器中注册,通过增加一个抽象层,使其与 Operator 框架解耦(毕竟不是说有 CRD 都是面向应用开发者的)。

OAM 中将 Trait 分成了 core.oam.dev(核心)、standard.oam.dev(标准)及自定义扩展类别。一个 Trait 具体适用于哪些 workload 可以在 TraitTraitDefinition 中定义。目前 OAM 中支持的核心 TraitManualScalerTrait

关于 Trait 的详细请参考 OAM 中的 Trait 规范

参考

results matching ""

    No results matching ""