Skip to main content
版本:v1.0

KEDA 作为自动伸缩 Trait

在继续之前,请确保你已了解 Definition ObjectsDefining Traits with CUE 的概念。

在下面的教程中,你将学习将 KEDA 作为新的自动伸缩 trait 添加到基于 KubeVela 的平台中。

KEDA 是基于 Kubernetes 事件驱动的自动伸缩工具。使用 KEDA,你可以根据资源指标或需要处理的事件数来驱动任何容器的伸缩。

步骤 1: 安装 KEDA controller

安装 KEDA controller 到 K8s 中。

步骤 2: 创建 Trait Definition

要在 KubeVela 中将 KEDA 注册为一项新功能(即 trait),唯一需要做的就是为其创建一个 TraitDefinition 对象。

完整的示例可以在 keda.yaml 中找到。 下面列出了几个要点。

1. 描述 Trait

...
name: keda-scaler
annotations:
definition.oam.dev/description: "keda supports multiple event to elastically scale applications, this scaler only applies to deployment as example"
...

我们使用标签 definition.oam.dev/description 为该 trait 添加一行描述。它将显示在帮助命令中,比如 $ vela traits

2. 注册 API 资源

...
spec:
definitionRef:
name: scaledobjects.keda.sh
...

这就是将 KEDA ScaledObject 的 API 资源声明和注册为 trait 的方式。

3. 定义 appliesToWorkloads

trait 可以附加到指定或全部的工作负载类型("*" 表示你的 trait 可以与任何工作负载类型一起使用)。

对于 KEAD,我们仅允许用户将其附加到 Kubernetes 工作负载类型。 因此,我们声明如下:

...
spec:
...
appliesToWorkloads:
- "deployments.apps" # claim KEDA based autoscaling trait can only attach to Kubernetes Deployment workload type.
...

4. 定义 Schematic

在这一步中,我们将定义基于 KEDA 自动伸缩 trait 的 schematic,也就是说,我们将使用简化的原语为 KEDA ScaledObject 创建抽象,因此平台的最终用户根本不需要知道什么是 KEDA 。

...
schematic:
cue:
template: |-
outputs: kedaScaler: {
apiVersion: "keda.sh/v1alpha1"
kind: "ScaledObject"
metadata: {
name: context.name
}
spec: {
scaleTargetRef: {
name: context.name
}
triggers: [{
type: parameter.triggerType
metadata: {
type: "Utilization"
value: parameter.value
}
}]
}
}
parameter: {
// +usage=Types of triggering application elastic scaling, Optional: cpu, memory
triggerType: string
// +usage=Value to trigger scaling actions, represented as a percentage of the requested value of the resource for the pods. like: "60"(60%)
value: string
}

这是一个基于 CUE 的模板,仅开放 typevalue 作为 trait 的属性供用户设置。

请查看 Defining Trait with CUE 部分,以获取有关 CUE 模板的更多详细信息。

步骤 2: 向 KubeVela 注册新的 Trait

定义文件准备就绪后,你只需将其部署到 Kubernetes 中。

$ kubectl apply -f https://raw.githubusercontent.com/oam-dev/catalog/master/registry/keda-scaler.yaml

用户就可以在 Application 中立即使用新 trait。