默认模板

KEDA 通过ScaleObject CRD 定义弹性伸缩配置。可以实现0~1, 1~N实例弹性伸缩。默认参数如下:

  1. apiVersion: keda.sh/v1alpha1
  2. kind: ScaledObject
  3. metadata:
  4. name: {scaled-object-name}
  5. spec:
  6. scaleTargetRef:
  7. apiVersion: {api-version-of-target-resource} # Optional. Default: apps/v1
  8. kind: {kind-of-target-resource} # Optional. Default: Deployment
  9. name: {name-of-target-resource} # Mandatory. Must be in the same namespace as the ScaledObject
  10. envSourceContainerName: {container-name} # Optional. Default: .spec.template.spec.containers[0]
  11. pollingInterval: 30 # Optional. Default: 30 seconds
  12. cooldownPeriod: 300 # Optional. Default: 300 seconds
  13. idleReplicaCount: 0 # Optional. Default: ignored, must be less than minReplicaCount
  14. minReplicaCount: 1 # Optional. Default: 0
  15. maxReplicaCount: 100 # Optional. Default: 100
  16. fallback: # Optional. Section to specify fallback options
  17. failureThreshold: 3 # Mandatory if fallback section is included
  18. replicas: 6 # Mandatory if fallback section is included
  19. advanced: # Optional. Section to specify advanced options
  20. restoreToOriginalReplicaCount: true/false # Optional. Default: false
  21. horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options
  22. behavior: # Optional. Use to modify HPA's scaling behavior
  23. scaleDown:
  24. stabilizationWindowSeconds: 300
  25. policies:
  26. - type: Percent
  27. value: 100
  28. periodSeconds: 15
  29. triggers:

弹性伸缩目标资源

scaleTargetRef描述弹性伸缩目标资源,默认伸缩Deployment,当前模型一般可以使用deployment进行部署:

  1. scaleTargetRef:
  2. apiVersion: {api-version-of-target-resource} # Optional. Default: apps/v1
  3. kind: {kind-of-target-resource} # Optional. Default: Deployment
  4. name: {name-of-target-resource} # Mandatory. Must be in the same namespace as the ScaledObject
  5. envSourceContainerName: {container-name} # Optional. Default: .spec.template.spec.containers[0]

如果是弹性伸缩deployment

  1. scaleTargetRef:
  2. name: {your_deployment_name} # 必须和scaled-object-name在同一namespace

伸缩基础配置参数

检测间隔:pollingInterval

这是检查每个触发器的时间间隔。默认情况下,KEDA 将每 30 秒检查每个 ScaledObject 上的每个触发源,如果使用external源,在间隔时间拉取触发源的指标量,指标量值。如果满足要求,进行实例伸缩。

  1. pollingInterval: 30 # Optional. Default: 30 seconds

冷却时间: cooldownPeriod

触发器报告最后一个服务活跃,到把服务实例下降到0的时间段。如果模型,可以理解为请求为0的持续时间。过了这个持续时间,KEDA认为模型非活跃,把实例降到0

  1. cooldownPeriod: 300 # Optional. Default: 300 seconds, 建议设置到半小时-1小时避免频繁启动

不活跃时实例数目: idleReplicaCount

如果设置了这个属性,KEDA 会将资源缩减到这个副本数。如果目标触发器上有一些活动,KEDA 将立即缩放目标资源minReplicaCount,然后由 HPA 处理缩放。当没有活动时,目标资源再次缩小到idleReplicaCount. 此设置必须小于minReplicaCount。

注意 由于 HPA 控制器的限制,此属性唯一支持的值为 0,否则将无法正常工作。看到这个issue更多细节。

如果不像下降到,可以配置触发器总是返回活跃状态

Fallback

  1. fallback: # Optional. Section to specify fallback options
  2. failureThreshold: 3 # Mandatory if fallback section is included
  3. replicas: 6 # Mandatory if fallback section is included

该fallback部分是可选的。如果缩放器处于错误状态,它定义了许多要回退的副本。例如自研究external plugin 对应服务连接不上去,连续3次以上无法连上,切换fallback 实例数目

KEDA 将跟踪每个缩放器连续未能从其源获取指标的次数。一旦该值通过failureThreshold,而不是将度量传播到 HPA(默认错误行为),缩放器将改为使用以下公式返回标准化度量:

  1. target metric value * fallback replicas

高级选项

  1. advanced:
  2. restoreToOriginalReplicaCount: true/false # Optional. Default: fals

例如,一个Deployment创建时候配置为3 replicas,然后ScaledObject被创建Deployment并被 KEDA 增加为10 replicas。然后ScaledObject被删除:

  1. 如果restoreToOriginalReplicaCount = false(默认行为)则Deployment副本数保持为10
  2. 如果restoreToOriginalReplicaCount = true然后Deployment副本计数设置回3(原始值)

horizontalPodAutoscalerConfig.behavior

  1. advanced:
  2. # 参考K8S 可配置的扩缩策略梳理
  3. horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options
  4. behavior: # Optional. Use to modify HPA's scaling behavior
  5. scaleDown:
  6. stabilizationWindowSeconds: 300
  7. policies:
  8. - type: Percent
  9. value: 100
  10. periodSeconds: 15

K8S 可配置的扩缩策略梳理 ,就是配置HPA扩容行为参数,和k8s一致,应该透传k8s上面.

注意: KEDA 必须在 Kubernetes 集群 v1.18+ 上运行,配置behavior参数才有效。