4. KEDA 安装与部署:Helm 安装、Operator 模式、Kubernetes 版本兼容性、健康检查
KEDA 的部署方式直接影响生产环境的运维复杂度与故障恢复能力。本章围绕 Helm 安装、Operator 模式、版本兼容性矩阵以及健康检查机制展开,帮助你在不同 Kubernetes 版本和网络条件下做出正确的部署决策。
4.1 部署架构概览
KEDA 在 Kubernetes 集群中通常以 Operator 模式运行,由两个核心组件构成:
- Operator(主 Pod):负责监听 ScaledObject / ScaledJob 资源,管理 HPA 的创建与更新。
- Metrics Server(Adapter):实现 KEDA 外部度量 API,供 HPA 轮询拉取 Prometheus 等指标。
下图展示了 KEDA 在集群内的组件拓扑与数据流:
部署建议:生产环境推荐将 KEDA Operator 与 Metrics Server 部署在同一命名空间(通常为
keda),并开启 --leader-elect 实现高可用。
4.2 Helm 安装(推荐方式)
Helm 是部署 KEDA 最主流的方式,支持版本管理、参数覆盖和升级回滚。以下为标准安装步骤:
- 添加 Helm 仓库
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
- 安装 KEDA
helm install keda kedacore/keda \
--namespace keda \
--create-namespace \
--set metricsServer.useHostNetwork=true \
--set operator.replicaCount=2
- 验证安装
kubectl get pods -n keda
# 预期输出:keda-operator-xxx 和 keda-metrics-apiserver-xxx 均为 Running
4.3 Operator 模式详解
KEDA 采用 Operator 模式 扩展 Kubernetes API,核心原理如下:
- 自定义资源定义(CRD):KEDA 注册
ScaledObject和ScaledJob两种 CRD,用户通过 YAML 声明扩缩规则。 - Reconcile 循环:Operator 监听 CRD 变化,自动创建/更新对应的 HPA 对象。
- 外部度量适配器:Metrics Server 实现
external.metrics.k8s.ioAPI,HPA 通过该 API 获取 Prometheus 等外部指标。
关键区别:传统 HPA 只能基于 CPU/内存或自定义度量(需部署 Prometheus Adapter),而 KEDA 的 Operator 模式将触发器逻辑与扩缩对象解耦,支持 50+ 触发器(包括 Prometheus、Kafka、RabbitMQ 等),且无需额外适配器。
4.4 Kubernetes 版本兼容性
KEDA 对不同 Kubernetes 版本的兼容性直接影响功能可用性。下表列出 KEDA 2.x 主流版本与 Kubernetes 版本的对应关系:
| KEDA 版本 | 最低 Kubernetes 版本 | 推荐 Kubernetes 版本 | 备注 |
|---|---|---|---|
| 2.8.x | 1.19 | 1.22 – 1.25 | 支持 HPA v2beta2 |
| 2.9.x | 1.22 | 1.24 – 1.27 | 引入 ScaledJob 改进 |
| 2.10.x | 1.23 | 1.25 – 1.28 | 支持 HPA v2 |
| 2.11.x | 1.24 | 1.26 – 1.29 | Prometheus 触发器增强 |
| 2.12.x | 1.25 | 1.27 – 1.30 | 最新稳定版 |
兼容性风险:如果集群版本低于 KEDA 要求的最低版本,Metrics Server 可能无法注册外部度量 API,导致 HPA 无法拉取指标。升级 KEDA 前务必核对集群版本。
4.5 健康检查与故障排查
KEDA 提供多种健康检查机制,确保组件在异常时自动恢复:
- Operator 健康检查:默认监听
:8080端口的/healthz和/readyz端点。 - Metrics Server 健康检查:默认监听
:8081端口的/healthz端点。 - Prometheus 指标暴露:Operator 和 Metrics Server 均在
:8080/metrics暴露自身指标。
以下为常用的健康检查命令:
# 检查 Operator 就绪状态
kubectl get --raw /apis/keda.sh/v1alpha1/namespaces/keda/scaledobjects | jq .
# 检查 Metrics Server 外部度量 API
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | jq .
# 查看 Operator 日志
kubectl logs -n keda deployment/keda-operator --tail=50
# 查看 Metrics Server 日志
kubectl logs -n keda deployment/keda-metrics-apiserver --tail=50
下图展示了健康检查的探测路径与故障恢复流程:
生产建议:在 Helm values 中显式设置
livenessProbe 和 readinessProbe 的 initialDelaySeconds: 30,避免启动阶段被误杀。同时配置 resources.requests 和 resources.limits,防止 Operator 因内存不足被 OOMKill。
4.6 安装后验证清单
完成部署后,建议按以下清单逐项验证:
| 检查项 | 命令/方法 | 预期结果 |
|---|---|---|
| Pod 状态 | kubectl get pods -n keda |
所有 Pod 为 Running |
| CRD 注册 | kubectl get crd | grep keda |
显示 scaledobjects.keda.sh 和 scaledjobs.keda.sh |
| 外部度量 API | kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 |
返回 {"kind":"APIResourceList"...} |
| Operator 日志 | kubectl logs -n keda deployment/keda-operator |
无 Error 或 CrashLoopBackOff |
| Metrics Server 指标 | kubectl get --raw /apis/keda.sh/v1alpha1 |
返回 KEDA API 资源列表 |
最佳实践:在 CI/CD 流水线中集成上述验证步骤,确保每次 KEDA 升级或集群变更后,扩缩功能不受影响。