默认模板
KEDA 通过ScaleObject CRD 定义弹性伸缩配置。可以实现0~1, 1~N实例弹性伸缩。默认参数如下:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: {scaled-object-name}
spec:
scaleTargetRef:
apiVersion: {api-version-of-target-resource} # Optional. Default: apps/v1
kind: {kind-of-target-resource} # Optional. Default: Deployment
name: {name-of-target-resource} # Mandatory. Must be in the same namespace as the ScaledObject
envSourceContainerName: {container-name} # Optional. Default: .spec.template.spec.containers[0]
pollingInterval: 30 # Optional. Default: 30 seconds
cooldownPeriod: 300 # Optional. Default: 300 seconds
idleReplicaCount: 0 # Optional. Default: ignored, must be less than minReplicaCount
minReplicaCount: 1 # Optional. Default: 0
maxReplicaCount: 100 # Optional. Default: 100
fallback: # Optional. Section to specify fallback options
failureThreshold: 3 # Mandatory if fallback section is included
replicas: 6 # Mandatory if fallback section is included
advanced: # Optional. Section to specify advanced options
restoreToOriginalReplicaCount: true/false # Optional. Default: false
horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options
behavior: # Optional. Use to modify HPA's scaling behavior
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 100
periodSeconds: 15
triggers:
弹性伸缩目标资源
scaleTargetRef
描述弹性伸缩目标资源,默认伸缩Deployment,当前模型一般可以使用deployment进行部署:
scaleTargetRef:
apiVersion: {api-version-of-target-resource} # Optional. Default: apps/v1
kind: {kind-of-target-resource} # Optional. Default: Deployment
name: {name-of-target-resource} # Mandatory. Must be in the same namespace as the ScaledObject
envSourceContainerName: {container-name} # Optional. Default: .spec.template.spec.containers[0]
如果是弹性伸缩deployment
scaleTargetRef:
name: {your_deployment_name} # 必须和scaled-object-name在同一namespace
伸缩基础配置参数
检测间隔:pollingInterval
这是检查每个触发器的时间间隔。默认情况下,KEDA 将每 30 秒检查每个 ScaledObject 上的每个触发源,如果使用external源,在间隔时间拉取触发源的指标量,指标量值。如果满足要求,进行实例伸缩。
pollingInterval: 30 # Optional. Default: 30 seconds
冷却时间: cooldownPeriod
触发器报告最后一个服务活跃,到把服务实例下降到0的时间段。如果模型,可以理解为请求为0的持续时间。过了这个持续时间,KEDA认为模型非活跃,把实例降到0
cooldownPeriod: 300 # Optional. Default: 300 seconds, 建议设置到半小时-1小时避免频繁启动
不活跃时实例数目: idleReplicaCount
如果设置了这个属性,KEDA 会将资源缩减到这个副本数。如果目标触发器上有一些活动,KEDA 将立即缩放目标资源minReplicaCount,然后由 HPA 处理缩放。当没有活动时,目标资源再次缩小到idleReplicaCount. 此设置必须小于minReplicaCount。
注意 由于 HPA 控制器的限制,此属性唯一支持的值为 0,否则将无法正常工作。看到这个issue更多细节。
如果不像下降到,可以配置触发器总是返回活跃状态
Fallback
fallback: # Optional. Section to specify fallback options
failureThreshold: 3 # Mandatory if fallback section is included
replicas: 6 # Mandatory if fallback section is included
该fallback部分是可选的。如果缩放器处于错误状态,它定义了许多要回退的副本。例如自研究external plugin 对应服务连接不上去,连续3次以上无法连上,切换fallback 实例数目
KEDA 将跟踪每个缩放器连续未能从其源获取指标的次数。一旦该值通过failureThreshold,而不是将度量传播到 HPA(默认错误行为),缩放器将改为使用以下公式返回标准化度量:
target metric value * fallback replicas
高级选项
advanced:
restoreToOriginalReplicaCount: true/false # Optional. Default: fals
例如,一个Deployment创建时候配置为3 replicas,然后ScaledObject被创建Deployment并被 KEDA 增加为10 replicas。然后ScaledObject被删除:
- 如果restoreToOriginalReplicaCount = false(默认行为)则Deployment副本数保持为10
- 如果restoreToOriginalReplicaCount = true然后Deployment副本计数设置回3(原始值)
horizontalPodAutoscalerConfig.behavior
advanced:
# 参考K8S 可配置的扩缩策略梳理
horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options
behavior: # Optional. Use to modify HPA's scaling behavior
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 100
periodSeconds: 15
K8S 可配置的扩缩策略梳理 ,就是配置HPA扩容行为参数,和k8s一致,应该透传k8s上面.
注意: KEDA 必须在 Kubernetes 集群 v1.18+ 上运行,配置behavior参数才有效。