KEDA下一代弹性伸缩工具
- k8s
- 9天前
- 53热度
- 0评论
1.简介
KEDA (Kubernetes-based Event-Driven Autoscaling) 是一个强大的开源组件,专为 Kubernetes 环境设计,用于实现基于事件的弹性伸缩。下面我为你详细介绍一下 KEDA。
2.工作原理
KEDA 的核心在于事件驱动的自动伸缩机制。它与 Kubernetes 原生的 HPA (Horizontal Pod Autoscaler) 并非替代关系,而是协同工作。
简单来说:
-
当需要将工作负载的副本数缩到“闲时”副本数(包括缩到 0),或从“闲时”副本数扩容时,由 KEDA 直接修改工作负载的副本数。
-
其他情况下的扩缩容则由 HPA 负责。KEDA 会自动创建并管理一个 HPA 对象,并向 HPA 提供其收集到的外部指标数据(External Metrics),HPA 再利用这些指标数据驱动扩缩容。这意味着 KEDA 复用了 HPA 的成熟能力。
KEDA 通过其定义的 CRD(如 ScaledObject
、ScaledJob
)来配置伸缩规则,并内置了丰富的 Scaler(伸缩器),用于从各种外部事件源(如消息队列、数据库、监控系统等)获取指标。
3.安装与部署
使用 Helm 安装 KEDA
-
添加 KEDA 的 Helm 仓库:
helm repo add kedacore https://kedacore.github.io/charts helm repo update
-
创建命名空间(如果尚未存在):
-
使用 Helm 安装 KEDA:
安装完成后,你可以使用 kubectl get pods -n keda
来查看 KEDA 组件的运行状态。
4.配置示例
下面是一个简单的 ScaledObject
配置示例:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: cpu-scaledobject
namespace: default
spec:
scaleTargetRef:
name: nginx-deployment # 指定要伸缩的目标 Deployment
minReplicaCount: 1 # 最小副本数,可以将副本数调整为0
maxReplicaCount: 10 # 最大副本数
triggers:
- type: cpu # 触发器类型为 cpu
metadata:
type: Utilization
value: "50" # 目标 CPU 利用率阈值设为 50%
根据 CPU/内存压力扩容:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: a
minReplicaCount: 10
maxReplicaCount: 1000
triggers:
- type: memory
metricType: Utilization
metadata:
value: "60"
- type: cpu
metricType: Utilization
metadata:
value: "60"
定时水平伸缩(Cron 触发器):
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo
minReplicaCount: 2
maxReplicaCount: 1000
triggers:
- type: cron
metadata:
timezone: Asia/Shanghai
start: 30 9 * * * # 早上9:30开始扩容
end: 30 10 * * * # 早上10:30结束,期间副本数设为200
desiredReplicas: "200"
- type: cron
metadata:
timezone: Asia/Shanghai
start: 30 17 * * * # 下午5:30开始扩容
end: 30 18 * * * # 下午6:30结束,期间副本数设为200
desiredReplicas: "200"
- type: memory # 同时配置资源指标触发器,应对突发流量
metricType: Utilization
metadata:
value: "60"
- type: cpu
metricType: Utilization
metadata:
value: "60"
5.优势
-
丰富的事件源支持:内置大量 Scaler,轻松集成各种外部系统,无需复杂适配。
-
支持缩容到零:当完全没有事件时,可以将副本数缩容到零,实现极致的成本节约。
-
与 HPA 无缝集成:复用 HPA 的稳定能力,同时提供更灵活的触发机制。
-
云原生且轻量:本身设计为 Kubernetes 的单一用途轻量组件,易于安装和运维。
-
CNCF 毕业项目:表明其成熟度、稳定性和社区活跃度都已达到很高水平,可放心用于生产环境。
6.注意事项
KEDA 确实可以将副本数缩减到 0。这实际上是 KEDA 的一个标志性特性,也是它区别于 Kubernetes 原生 HPA 的一个重要方面,但在应用时也需要考虑冷启动延迟问题,即:副本从 0 开始扩容时,应用的启动时间(冷启动)可能会对请求的响应时间有一定影响。你需要确保应用能够处理这种延迟,或者配置就绪检查来避免在应用完全启动前接收流量。