1. 课程导学:KEDA是什么、为什么需要自定义Metric触发器、课程目标与前置知识

1.1 KEDA 是什么?—— Kubernetes 事件驱动自动缩放器

KEDA(Kubernetes Event-Driven Autoscaling)是一个轻量级的开源组件,它扩展了 Kubernetes 原生的 Horizontal Pod Autoscaler(HPA),使得 Pod 的弹性伸缩不再局限于 CPU / 内存等资源指标,而是可以基于 外部事件源(如消息队列长度、数据库连接数、HTTP 请求速率、自定义业务指标)进行实时、精准的伸缩决策。

KEDA 的核心价值在于:

  • 事件驱动:当事件源有负载时,KEDA 激活工作负载(从 0 到 1);当事件源空闲时,KEDA 将工作负载缩回 0(从 1 到 0)。
  • 与 HPA 深度集成:KEDA 本身不直接管理 Pod 副本数,而是作为 HPA 的“指标提供者”,将外部事件数据转换为 HPA 可消费的指标。
  • 丰富的 Scaler 生态:内置 50+ 官方 Scaler(Kafka、RabbitMQ、Prometheus、AWS SQS、Azure Queue 等),同时支持自定义 Scaler 开发。
一句话总结:KEDA 让 Kubernetes 工作负载能够根据任何外部事件源的负载情况自动伸缩,实现真正的“按需计算”。

1.2 为什么需要自定义 Metric 触发器?

虽然 KEDA 内置了丰富的 Scaler,但在实际生产环境中,我们经常会遇到以下场景:

场景 内置 Scaler 是否满足 说明
基于 Redis 流(Stream)长度伸缩 ❌ 不满足 内置 Scaler 仅支持 Redis List,不支持 Stream 的消费者组待处理消息数
基于 MongoDB 聚合管道结果伸缩 ❌ 不满足 内置 Scaler 仅支持简单的文档计数,无法执行复杂聚合
基于内部业务 API 的排队任务数伸缩 ❌ 不满足 需要调用公司内部 HTTP API 获取指标,无现成 Scaler
基于 Prometheus 自定义 PromQL 查询结果伸缩 ✅ 部分满足 内置 Prometheus Scaler 支持 PromQL,但无法处理认证、分片等复杂场景
基于 Kafka 消费者 Lag 伸缩 ✅ 满足 内置 Kafka Scaler 已支持,无需自定义

从表格可以看出,自定义 Metric 触发器(Custom Scaler) 是解决“长尾需求”的关键能力。通过开发自定义 Scaler,你可以:

  • 接入任何能够返回数值指标的数据源(数据库、API、文件、硬件传感器等)。
  • 实现业务级别的精细伸缩策略(如:仅当“待处理订单数 > 100 且 平均处理时间 > 5s”时扩容)。
  • 复用公司已有的监控基础设施,避免引入额外组件。
课程核心观点:掌握自定义 Scaler 开发,意味着你不再受限于 KEDA 官方生态,可以自由地将任何业务指标转化为弹性伸缩决策。

1.3 KEDA 架构与自定义 Scaler 位置

下图展示了 KEDA 的核心架构以及自定义 Scaler 在整个系统中的位置:

KEDA 核心架构与自定义 Scaler 位置 事件源层(Event Sources) Kafka / RabbitMQ / Redis / Prometheus / HTTP API / 数据库 / 自定义数据源 Scaler 层(指标获取与转换) 内置 Scaler(50+) 自定义 Scaler(Go 语言开发,实现 Scaler 接口) KEDA 核心(Operator + Metric Adapter) 将 Scaler 指标转换为 HPA 可消费的 External Metric HPA → Deployment / StatefulSet / Job ★ 本课程聚焦区域

从架构图可以看出,自定义 Scaler 位于 Scaler 层,与内置 Scaler 平级。KEDA 核心通过统一的 Scaler 接口调用自定义 Scaler,获取指标值,然后通过 Metric Adapter 暴露给 HPA。整个链路清晰且可扩展。

1.4 课程目标与学习路径

本课程旨在帮助你从零到一掌握 KEDA 自定义 Scaler 的开发、测试与部署。完成本课程后,你将能够:

  1. 理解 KEDA 核心概念:ScaledObject、Trigger、Scaler 接口、Metric Adapter 的工作原理。
  2. 掌握自定义 Scaler 开发流程:使用 Go 语言实现 Scaler 接口(GetMetrics、GetMetricSpecForScaling、Close)。
  3. 对接真实数据源:以 Redis Stream、MongoDB、HTTP API 为例,开发可投产的自定义 Scaler。
  4. 测试与调试:编写单元测试、集成测试,使用 KEDA 本地开发环境进行端到端验证。
  5. 部署与运维:将自定义 Scaler 打包为容器镜像,部署到生产集群,并配置监控告警。
章节模块 核心内容 实战产出
第 1-3 章 KEDA 基础、ScaledObject 配置、内置 Scaler 实战 使用内置 Scaler 完成 Kafka 消费者自动伸缩
第 4-6 章 自定义 Scaler 接口详解、Go 语言开发环境搭建 实现一个“Hello World”级别的自定义 Scaler
第 7-10 章 对接 Redis Stream、MongoDB、HTTP API 数据源 三个可复用的生产级自定义 Scaler
第 11-12 章 测试、调试、性能优化与安全 完整的测试套件与安全加固方案
第 13-15 章 容器化部署、Helm Chart、生产运维 自动化 CI/CD 流水线与生产部署手册

1.5 前置知识要求

为了确保学习效果,建议你具备以下基础:

⚠️ 重要提示:本课程不是零基础入门课。如果你对以下知识点不熟悉,建议先花 1-2 周时间补齐基础。
知识领域 具体要求 推荐学习资源
Kubernetes 基础 熟悉 Pod、Deployment、Service、HPA 概念;能使用 kubectl 操作集群 Kubernetes 官方文档“入门”部分
Go 语言基础 掌握 Go 语法、接口、结构体、错误处理;能编写简单的 HTTP 客户端 《Go 语言程序设计》前 8 章
Docker 基础 能编写 Dockerfile 并构建镜像 Docker 官方快速入门
消息队列 / 数据库基础 了解 Redis、MongoDB、Kafka 的基本概念和常用操作 各产品官方 5 分钟快速开始

1.6 课程技术栈总览

本课程涉及的技术栈与版本如下(建议保持一致以避免兼容性问题):

课程技术栈与推荐版本 Kubernetes v1.28+ KEDA v2.14+ Go v1.22+ Docker v24+ Redis v7+ MongoDB v7+ HTTP API RESTful Prometheus v2.50+

1.7 学习建议与课程约定

  • 动手实践:每章都配有可运行的代码示例,请务必在本地或测试集群中跟随操作。
  • 版本对齐:使用课程推荐的版本号,避免因版本差异导致 API 不兼容。
  • 代码仓库:所有代码均托管在课程配套仓库,每章末尾会标注对应代码目录。
  • 提问方式:遇到问题时,请提供 kubectl get scaledobject -o yaml 输出、KEDA Operator 日志以及自定义 Scaler 的日志,以便快速定位。
💡 学习心态:自定义 Scaler 开发并不复杂——你只需要实现 3 个方法。真正的挑战在于理解数据源的业务语义,并将其转化为合理的伸缩策略。本课程会带你逐一攻克这些挑战。