3. KEDA 安装与配置:使用 Helm 安装 KEDA、命名空间与 RBAC 配置、验证安装状态

在生产级 Kubernetes 集群中部署 KEDA,推荐使用 Helm 作为包管理工具。Helm 能够将 KEDA 的所有组件(Operator、Metrics Server、Admission Webhooks)打包为一个可重复部署的 Chart,并自动处理命名空间、RBAC、ServiceAccount 等资源。本章将按照“前置检查 → 添加仓库 → 安装配置 → 验证状态”的标准化流程,完成 KEDA 的生产级部署。

3.1 前置检查与环境准备

在安装 KEDA 之前,需要确认集群满足以下条件:

检查项 要求 验证命令
Kubernetes 版本 ≥ 1.20(推荐 1.24+) kubectl version --short
Helm 版本 ≥ 3.8 helm version
Metrics Server 已安装(用于 HPA 基础指标) kubectl get pods -n kube-system | grep metrics-server
集群资源 至少 2 个 Worker 节点,预留 200m CPU / 256Mi 内存 kubectl top nodes
生产建议:如果集群尚未安装 Metrics Server,请先通过 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 部署。KEDA 依赖 Metrics Server 获取 Pod 资源指标,但 KEDA 自身的 ScaledObject 可以基于外部事件源(如 Kafka、Prometheus)独立触发伸缩。

3.2 使用 Helm 安装 KEDA

KEDA 官方维护的 Helm Chart 位于 kedacore 仓库。安装过程分为三步:添加仓库、更新索引、自定义配置安装。

3.2.1 添加 Helm 仓库

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

3.2.2 安装 KEDA(生产推荐配置)

以下命令将 KEDA 安装到独立的 keda 命名空间,并启用高可用副本与资源限制:

helm install keda kedacore/keda \
  --namespace keda \
  --create-namespace \
  --set podIdentity.azureWorkload.enabled=false \
  --set podIdentity.aws.enabled=false \
  --set podIdentity.gcp.enabled=false \
  --set operator.replicaCount=2 \
  --set metricsServer.replicaCount=2 \
  --set webhooks.replicaCount=2 \
  --set operator.resources.requests.cpu=100m \
  --set operator.resources.requests.memory=128Mi \
  --set operator.resources.limits.cpu=500m \
  --set operator.resources.limits.memory=256Mi \
  --set metricsServer.resources.requests.cpu=50m \
  --set metricsServer.resources.requests.memory=64Mi \
  --set global.rbac.create=true
参数说明:
  • --namespace keda:将 KEDA 组件部署到独立命名空间,便于权限隔离与资源管理。
  • operator.replicaCount=2:Operator 组件双副本,保障控制面高可用。
  • metricsServer.replicaCount=2:Metrics Server 双副本,避免单点故障导致弹性伸缩延迟。
  • global.rbac.create=true:自动创建 ClusterRole、ClusterRoleBinding 和 ServiceAccount。

3.3 命名空间与 RBAC 配置解析

KEDA 安装完成后,会在 keda 命名空间下创建以下核心资源:

资源类型 名称 作用
Deployment keda-operator 运行 KEDA Operator,监听 ScaledObject / ScaledJob 资源
Deployment keda-metrics-apiserver 实现 External Metrics API,供 HPA 调用
Deployment keda-admission-webhooks 验证 ScaledObject / ScaledJob 的合法性
ServiceAccount keda-operator Operator 使用的身份,绑定 ClusterRole
ClusterRole keda-operator 授予 Operator 对 Deployment、HPA、Pod 的读写权限
ClusterRoleBinding keda-operator 将 ServiceAccount 绑定到 ClusterRole

KEDA 的 RBAC 设计遵循最小权限原则:Operator 仅拥有操作 Deployment、HPA、ScaledObject 等必要资源的权限,不会获得集群管理员权限。如果需要在多租户场景下限制 KEDA 的作用范围,可以通过 --set global.rbac.create=false 关闭自动 RBAC 创建,然后手动绑定到特定命名空间的 ServiceAccount。

安全注意:在生产环境中,不要将 KEDA 的 ServiceAccount 绑定到 cluster-admin 角色。如果 KEDA 需要访问外部事件源(如 Kafka、RabbitMQ),请使用 triggerAuthentication 或 clusterTriggerAuthentication 资源单独管理凭证,避免在 ScaledObject 中明文写入密码。

3.4 验证安装状态

安装完成后,执行以下命令验证 KEDA 各组件是否正常运行:

3.4.1 检查 Pod 状态

kubectl get pods -n keda

# 期望输出(所有 Pod 均为 Running 状态)
NAME                                           READY   STATUS    RESTARTS   AGE
keda-operator-7d8f9c6b8f-2jklp                 1/1     Running   0          2m
keda-operator-7d8f9c6b8f-x3mno                 1/1     Running   0          2m
keda-metrics-apiserver-5c4b7d6c9f-abcde        1/1     Running   0          2m
keda-metrics-apiserver-5c4b7d6c9f-fghij        1/1     Running   0          2m
keda-admission-webhooks-6b8c7d9e4f-klmno       1/1     Running   0          2m
keda-admission-webhooks-6b8c7d9e4f-pqrst       1/1     Running   0          2m

3.4.2 验证 CRD 是否注册

kubectl get crd | grep keda

# 期望输出
clustertriggerauthentications.keda.sh       2025-01-15T10:00:00Z
scaledjobs.keda.sh                          2025-01-15T10:00:00Z
scaledobjects.keda.sh                       2025-01-15T10:00:00Z
triggerauthentications.keda.sh              2025-01-15T10:00:00Z

3.4.3 验证 Metrics API 是否可用

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1" | jq .

# 期望输出(返回资源列表,即使为空也表示 API 注册成功)
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "external.metrics.k8s.io/v1beta1",
  "resources": []
}
快速验证:如果集群中没有 ScaledObject,Metrics API 返回空资源列表是正常行为。可以创建一个简单的 ScaledObject(例如基于 CPU 的伸缩)来验证端到端链路是否打通。

3.5 KEDA 组件架构与数据流

下图展示了 KEDA 安装完成后各组件之间的协作关系,以及事件驱动伸缩的完整数据流:

KEDA 组件架构与事件驱动伸缩数据流 外部事件源 Kafka / Prometheus / RabbitMQ KEDA Operator 监听 ScaledObject / ScaledJob KEDA Metrics Server 暴露 External Metrics API Admission Webhooks 验证 CRD 资源合法性 Kubernetes HPA 自动调整 Deployment 副本数 目标 Deployment 业务 Pod 自动伸缩 数据流说明 ① 外部事件源触发 → KEDA Operator 根据 ScaledObject 配置计算期望副本数 ② Operator 更新 HPA 的指标目标 → HPA 通过 Metrics Server 获取外部指标 → HPA 调整 Deployment 副本数 ③ Admission Webhooks 在创建/更新 ScaledObject 时进行校验,防止配置错误

3.6 生产级配置清单

以下清单总结了生产环境安装 KEDA 时的关键配置项,建议在部署前逐项确认:

配置项 推荐值 说明
命名空间 keda 独立命名空间,避免与业务资源混淆
Operator 副本数 2 保障控制面高可用
Metrics Server 副本数 2 避免弹性伸缩指标查询超时
资源请求/限制 Operator: 100m/500m CPU, 128Mi/256Mi 内存 根据集群规模适当调整
RBAC 自动创建 true 生产环境建议开启,减少手动配置
云厂商 Pod Identity 按需启用 如果使用 Azure/AWS/GCP 事件源,开启对应 Identity
日志级别 info 排查问题时可临时改为 debug
升级与回滚:KEDA 的 Helm Chart 支持滚动升级。升级前建议执行 helm get values keda -n keda 导出当前配置,然后使用 helm upgrade keda kedacore/keda -n keda -f values.yaml 进行升级。如果升级失败,可使用 helm rollback keda -n keda 快速回滚到上一个版本。