Version: 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

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

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

2. 注册 API 资源

  1. ...
  2. spec:
  3. definitionRef:
  4. name: scaledobjects.keda.sh
  5. ...

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

3. 定义 appliesToWorkloads

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

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

  1. ...
  2. spec:
  3. ...
  4. appliesToWorkloads:
  5. - "deployments.apps" # claim KEDA based autoscaling trait can only attach to Kubernetes Deployment workload type.
  6. ...

4. 定义 Schematic

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

  1. ...
  2. schematic:
  3. cue:
  4. template: |-
  5. outputs: kedaScaler: {
  6. apiVersion: "keda.sh/v1alpha1"
  7. kind: "ScaledObject"
  8. metadata: {
  9. name: context.name
  10. }
  11. spec: {
  12. scaleTargetRef: {
  13. name: context.name
  14. }
  15. triggers: [{
  16. type: parameter.triggerType
  17. metadata: {
  18. type: "Utilization"
  19. value: parameter.value
  20. }
  21. }]
  22. }
  23. }
  24. parameter: {
  25. // +usage=Types of triggering application elastic scaling, Optional: cpu, memory
  26. triggerType: string
  27. // +usage=Value to trigger scaling actions, represented as a percentage of the requested value of the resource for the pods. like: "60"(60%)
  28. value: string
  29. }

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

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

步骤 2: 向 KubeVela 注册新的 Trait

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

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

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