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 安装完成后各组件之间的协作关系,以及事件驱动伸缩的完整数据流:
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 快速回滚到上一个版本。