hpa
对deployment
进行扩所容https://keda.sh/docs/2.7/scalers/
api
接口为依据指标进行hpa
扩所容。# 安装
$ helm repo add kedacore https://kedacore.github.io/charts
$ helm repo update
$ kubectl create namespace keda
$ helm install keda kedacore/keda --namespace keda
# 卸载
$ kubectl delete $(kubectl get scaledobjects,scaledjobs -oname)
$ helm uninstall keda -n keda
# 安装2.7.1版本
$ wget https://github.com/kedacore/keda/releases/download/v2.7.1/keda-2.7.1.yaml
$ kubectl apply -f keda-2.7.1.yaml
# 卸载
$ kubectl delete -f keda-2.7.1.yaml
本规范描述了ScaledObject自定义资源定义,用于定义 KEDA 应如何扩展您的应用程序以及触发器是什么。
apiVersion: keda.sh/v1alpha1 # api版本
kind: ScaledObject # keda核心资源类型
metadata:
name: {scaled-object-name} # 资源名称
spec:
scaleTargetRef: # 被控制伸缩的目标资源p配置
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 是KEDA为你的deployment创建的最小副本数量
maxReplicaCount: 100 # Optional. Default: 100 是KEDA为你的deployment创建的最大副本数量
# 实例连续 3 次不可用时,KEDA 将更改 HPA 指标,以便部署扩展到 6 个副本
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
# 如果一个Deployment with3 replicas被创建,然后ScaledObject被创建Deployment并被 KEDA 缩放为10 replicas。然后ScaledObject被删除:
# 如果restoreToOriginalReplicaCount = false(默认行为)则Deployment副本数为10
# 如果restoreToOriginalReplicaCount = true然后Deployment副本计数设置回3(原始值)
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 # 等待 5 分钟再开始缩容,防止业务抖动导致的频繁伸缩
policies: # 缩容方案,15秒内缩容完成100%
- type: Percent
value: 100
periodSeconds: 15
scaleUp: # 扩容方案 每次扩容只新增 1 个 Pod
policies:
- type: pods
value: 1
triggers: # 触发动作
# {list of triggers to activate scaling of the target resource}
针对触发动作的配置格式说明
# 查看资源格式
$ kubectl explain scaledobjects.keda.sh.spec
$ kubectl explain scaledobjects.keda.sh.spec.triggers
除 CPU 和内存之外的所有缩放器都支持度量类型AverageValue,Value而 CPU 和内存缩放器都支持AverageValue和Utilization.
triggers:
- type: metrics-api # 要使用的触发器类型,不同类型对应的配置不同
metadata: # 触发器所需的配置参数
targetValue: "7"
url: "http://10.42.0.51/components/stats"
valueLocation: 'components.worker.tasks'
暂停自动扩缩,如果您想进行集群维护或希望通过删除非关键任务工作负载来避免资源匮乏,指示 KEDA 暂停对象的自动缩放可能很有用。您可以通过在ScaledObject定义中添加以下注释来启用此功能:
metadata:
annotations:
autoscaling.keda.sh/paused-replicas: "0"
针对扩所容的行为策略,常用的有下面几种
behavior:
scaleUp:
policies:
- type: percent
value: 900%
behavior:
scaleUp:
policies:
- type: percent
value: 900%
scaleDown:
policies:
- type: pods
value: 1
periodSeconds: 600 # 每 10 分钟只缩掉 1 个 Pod
behavior:
scaleUp:
policies:
- type: pods
value: 1 # 每次扩容只新增 1 个 Pod
behavior:
scaleDown:
policies:
- type: pods
value: 0
behavior:
scaleDown:
stabilizationWindowSeconds: 600 # 等待 10 分钟再开始缩容
policies:
- type: pods
value: 5 # 每次只缩掉 5 个 Pod
behavior:
scaleUp:
stabilizationWindowSeconds: 300 # 扩容前等待 5 分钟的时间窗口
policies:
- type: pods
value: 20 # 每次扩容新增 20 个 Pod
针对kafka消费产生堆积的情况进行伸缩。
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: subscriber-scaler
spec:
scaleTargetRef:
name: <REPLACE-WITH-DAPR-DEPLOYMENT-NAME>
pollingInterval: 15
minReplicaCount: 0
maxReplicaCount: 10
triggers:
- type: kafka
metadata:
topic: demo-topic
bootstrapServers: kafka-cp-kafka.kafka.svc.cluster.local:9092
consumerGroup: autoscaling-subscriber
lagThreshold: "5"
scaleTargetRef
部分的name是您的应用程序在Deployment
中定义的Dapr ID
pollingInterval
是KEDA检查Kafka当前主题分区偏移量的以秒为单位的频率maxReplicaCount
是你的deployment的最大副本数量。 考虑到 Kafka分区偏移量的工作方式,你不应该将该值设置得高于主题分区的总数量。Kafka metadata
部分的topic应该设置为你的Dapr deployment
所订阅的同一主题(在本例中demo-topic)bootstrapServers
应该设置为kafka-pubsub.yaml
文件中使用的同一个broker的连接地址字符串consumerGroup
应该设置为与kafka-pubsub.yaml
文件中的consumerID相同的值现在你可以开始将消息发布到您的Kafka主题demo-topic,当延迟阈值高于5主题时,你可以看到pods开始自动缩放,正如我们在KEDA缩放器清单中定义的那样
一个例子
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: kafka-test
namespace: keda
spec:
maxReplicaCount: 3
minReplicaCount: 1
scaleTargetRef:
name: app-test # 控制keda namespace下的deployment app-test
pollingInterval: 30 # Optional. Default: 30 seconds
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 50
periodSeconds: 60
- type: Pods
value: 3
periodSeconds: 60
selectPolicy: Max
triggers:
- type: kafka
metadata:
version: 1.1.1
bootstrapServers: 11.148.21.98:9092
consumerGroup: test-group
topic: partner-abnerhliu-testhpa
lagThreshold: "20"
offsetResetPolicy: earliest
scaleToZeroOnInvalidOffset: "true"
allowIdleConsumers: "true"
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test
name: app-test
namespace: keda
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
name: app-test
namespace: keda
spec:
containers:
- name: nginx
image: nginx
消费完毕后,队列深度为0,等待缩容
触发所容动作
keda ckafka 伸缩容配置
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。