2. KEDA 安装与部署

本章将带领你完成 KEDA 在生产环境中的安装与部署。KEDA 的部署方式灵活,支持 Helm Chart 和纯 YAML 两种主流方式。无论你选择哪种方式,最终都会获得一个由 KEDA Operator 和 KEDA Metrics Server 组成的运行环境。我们将逐一演示这两种方法,并验证安装状态。

2.1 安装方式概览

在开始安装前,先了解两种部署方式的适用场景:

部署方式 适用场景 优势
Helm Chart 生产环境、需要版本管理与回滚 参数化配置、依赖管理、一键升级/回滚
YAML 部署 离线环境、测试环境、快速验证 无需 Helm、直接 kubectl apply、透明可控
推荐: 生产环境优先使用 Helm 部署,便于后续版本升级和配置变更。测试或离线环境可使用 YAML 方式。

2.2 使用 Helm 安装 KEDA

Helm 是 Kubernetes 的包管理工具。使用 Helm 安装 KEDA 前,请确保已添加 KEDA 官方 Helm 仓库。

步骤 1:添加 Helm 仓库

helm repo add kedacore https://kedacore.github.io/charts
helm repo update

步骤 2:安装 KEDA

helm install keda kedacore/keda \
  --namespace keda \
  --create-namespace \
  --version 2.14.0

参数说明:

  • keda:Helm Release 名称。
  • kedacore/keda:Chart 名称。
  • --namespace keda:指定命名空间为 keda。
  • --create-namespace:如果命名空间不存在则自动创建。
  • --version:指定 KEDA 版本,建议锁定版本避免意外升级。

步骤 3:验证 Helm 安装

helm list -n keda

输出应显示 keda Release 状态为 deployed。

2.3 使用 YAML 部署 KEDA

对于无法使用 Helm 的环境,KEDA 官方提供了完整的 YAML 部署文件。你可以直接从 GitHub Release 页面下载。

步骤 1:下载部署文件

kubectl apply --server-side -f https://github.com/kedacore/keda/releases/download/v2.14.0/keda-2.14.0.yaml
注意: 使用 --server-side 标志可以避免因资源冲突导致的 apply 失败,尤其在大型集群中推荐使用。

步骤 2:验证 YAML 部署

kubectl get all -n keda

你应该看到以下核心资源:

  • Deployment/keda-operator:KEDA 主控制器。
  • Deployment/keda-metrics-apiserver:Metrics Server 组件。
  • Service/keda-metrics-apiserver:Metrics API 服务。

2.4 验证 KEDA 安装状态

无论使用哪种方式安装,都需要验证 KEDA 的核心组件是否正常运行。以下是标准验证步骤:

检查 Pod 状态

kubectl get pods -n keda

预期输出示例:

NAME                                               READY   STATUS    RESTARTS   AGE
keda-operator-7d8f9c6b9f-abc12                     1/1     Running   0          5m
keda-metrics-apiserver-5f6b7c8d9e-xyz34             1/1     Running   0          5m

检查 API 服务

kubectl get apiservice | grep keda

预期输出:

v1alpha1.custom.metrics.k8s.io        keda/keda-metrics-apiserver   True        5m
v1alpha1.external.metrics.k8s.io      keda/keda-metrics-apiserver   True        5m

这两个 API 服务是 KEDA 与 Kubernetes 核心交互的关键:

  • custom.metrics.k8s.io:提供自定义指标。
  • external.metrics.k8s.io:提供外部指标(如 Kafka、RabbitMQ 等)。

检查 CRD 是否注册

kubectl get crd | grep keda

预期输出应包含 scaledobjects.keda.sh、scaledjobs.keda.sh、triggerauthentications.keda.sh 等 CRD。

2.5 KEDA Operator 与 Metrics Server 架构

KEDA 由两个核心组件构成:KEDA Operator 和 KEDA Metrics Server。理解它们的分工有助于后续排错和调优。

KEDA 核心组件架构图 KEDA Operator • 监听 ScaledObject / ScaledJob CRD • 管理 HPA 的创建与生命周期 • 处理触发器认证 (TriggerAuthentication) • 协调事件源与工作负载 KEDA Metrics Server • 实现 custom.metrics.k8s.io API • 实现 external.metrics.k8s.io API • 从事件源拉取实时指标 • 响应 HPA 的指标查询请求 gRPC 通信 Kubernetes API Server HPA 定期查询 Metrics Server → Metrics Server 返回指标 → HPA 调整副本数 创建/管理 HPA 提供指标 事件源 Kafka / RabbitMQ / Prometheus / HTTP 工作负载 Deployment / StatefulSet / Job 拉取指标 扩缩容指令

2.6 组件职责对比

组件 职责 关键资源 日志关键词
KEDA Operator 监听 CRD、管理 HPA、协调触发器 Deployment, ScaledObject, ScaledJob Reconciling ScaledObject, Creating HPA
KEDA Metrics Server 实现 Metrics API、拉取外部指标 Deployment, Service, APIService Serving metrics, External metric
排错提示: 如果 HPA 无法获取指标,首先检查 keda-metrics-apiserver Pod 日志,确认 Metrics Server 是否成功连接到事件源。如果 ScaledObject 状态异常,则检查 keda-operator Pod 日志。

2.7 验证 KEDA 功能:创建测试 ScaledObject

安装完成后,创建一个简单的 ScaledObject 来验证 KEDA 是否正常工作。以下示例使用 CPU 触发器(KEDA 内置支持):

cat <<EOF | kubectl apply -f -
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: test-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: test-deployment
  triggers:
  - type: cpu
    metadata:
      type: Utilization
      value: "50"
EOF

验证 ScaledObject 状态:

kubectl get scaledobject test-scaledobject -o wide

输出中 Ready 列应为 True,表示 KEDA 已成功接管该工作负载的弹性伸缩。

2.8 本章小结