KEDA下一代弹性伸缩工具
- k8s
 - 2025-09-09
 - 232热度
 - 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 开始扩容时,应用的启动时间(冷启动)可能会对请求的响应时间有一定影响。你需要确保应用能够处理这种延迟,或者配置就绪检查来避免在应用完全启动前接收流量。
