5.9 KiB
5.9 KiB
KEDA 自动扩缩容部署总结
部署时间: 2026-01-30
✅ 部署完成
KEDA 核心组件
| 组件 | 状态 | 说明 |
|---|---|---|
| keda-operator | ✅ Running | KEDA 核心控制器 |
| keda-metrics-apiserver | ✅ Running | 指标 API 服务器 |
| keda-admission-webhooks | ✅ Running | 准入 Webhook |
命名空间: keda
已配置的自动扩缩容服务
1. Navigation 导航服务 ✅
- 状态: 已配置并运行
- 当前副本数: 0(空闲状态)
- 配置:
- 最小副本: 0
- 最大副本: 10
- 触发器: Prometheus (HTTP 请求) + CPU 使用率
- 冷却期: 3 分钟
ScaledObject: navigation-scaler
HPA: keda-hpa-navigation-scaler
2. Redis 缓存服务 ⏳
- 状态: 配置文件已创建,待应用
- 说明: 需要先为 Redis 配置 Prometheus exporter
- 配置文件:
scalers/redis-scaler.yaml
3. PostgreSQL 数据库 ❌
- 状态: 不推荐使用 KEDA 扩展
- 原因:
- PostgreSQL 是有状态服务,多副本会导致存储冲突
- 需要配置主从复制才能安全扩展
- 建议使用 PostgreSQL Operator 或 PgBouncer + KEDA
- 详细说明:
scalers/postgresql-说明.md
配置文件位置
/home/fei/k3s/009-基础设施/007-keda/
├── deploy.sh # 部署脚本
├── values.yaml # KEDA Helm 配置
├── readme.md # 详细文档
├── 部署总结.md # 本文档
└── scalers/ # ScaledObject 配置
├── navigation-scaler.yaml # ✅ 已应用
├── redis-scaler.yaml # ⏳ 待应用
└── postgresql-说明.md # ⚠️ PostgreSQL 不适合 KEDA
验证 KEDA 功能
测试缩容到 0
Navigation 服务已经自动缩容到 0:
kubectl get deployment navigation -n navigation
# 输出: READY 0/0
测试从 0 扩容
访问导航页面触发扩容:
# 1. 访问页面
curl https://dh.u6.net3w.com
# 2. 观察副本数变化
kubectl get deployment navigation -n navigation -w
# 预期: 10-30 秒内副本数从 0 变为 1
查看 KEDA 状态
查看所有 ScaledObject
kubectl get scaledobject -A
查看 HPA(自动创建)
kubectl get hpa -A
查看 KEDA 日志
kubectl logs -n keda -l app.kubernetes.io/name=keda-operator -f
下一步操作
1. 应用 Redis 自动扩缩容
# 首先需要为 Redis 添加 Prometheus exporter
# 然后应用 ScaledObject
kubectl apply -f /home/fei/k3s/009-基础设施/007-keda/scalers/redis-scaler.yaml
2. PostgreSQL 扩展方案
不要使用 KEDA 直接扩展 PostgreSQL!
推荐方案:
- 方案 1: 使用 PostgreSQL Operator(Zalando 或 CloudNativePG)
- 方案 2: 部署 PgBouncer 连接池 + KEDA 扩展 PgBouncer
- 方案 3: 配置读写分离,只对只读副本使用 KEDA
详细说明:/home/fei/k3s/009-基础设施/007-keda/scalers/postgresql-说明.md
3. 监控扩缩容行为
在 Grafana 中导入 KEDA 仪表板:
- 访问: https://grafana.u6.net3w.com
- 导入仪表板 ID: 14691
已修复的问题
问题 1: CPU 触发器配置错误
错误信息:
The 'type' setting is DEPRECATED and is removed in v2.18 - Use 'metricType' instead.
解决方案: 将 CPU 触发器配置从:
- type: cpu
metadata:
type: Utilization
value: "60"
改为:
- type: cpu
metricType: Utilization
metadata:
value: "60"
问题 2: Navigation 缺少资源配置
解决方案: 为 Navigation deployment 添加了 resources 配置:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
资源节省效果
Navigation 服务
- 之前: 24/7 运行 1 个副本
- 现在: 空闲时 0 个副本,有流量时自动启动
- 预计节省: 80-90% 资源(假设大部分时间空闲)
预期总体效果
- Navigation: 节省 80-90% 资源 ✅
- Redis: 节省 70-80% 资源(配置后)⏳
- PostgreSQL: ❌ 不使用 KEDA,保持单实例运行
监控指标
Prometheus 查询
# KEDA Scaler 活跃状态
keda_scaler_active{namespace="navigation"}
# 当前指标值
keda_scaler_metrics_value{scaledObject="navigation-scaler"}
# HPA 当前副本数
kube_horizontalpodautoscaler_status_current_replicas{horizontalpodautoscaler="keda-hpa-navigation-scaler"}
注意事项
1. 冷启动时间
从 0 扩容到可用需要 10-30 秒:
- 拉取镜像(如果本地没有)
- 启动容器
- 健康检查通过
2. 连接保持
客户端需要支持重连机制,因为服务可能会缩容到 0。
3. 有状态服务
PostgreSQL 等有状态服务不能直接使用 KEDA 扩展:
- ❌ 多副本会导致存储冲突
- ❌ 没有主从复制会导致数据不一致
- ✅ 需要使用专业的 Operator 或连接池方案
故障排查
ScaledObject 未生效
# 查看详细状态
kubectl describe scaledobject <name> -n <namespace>
# 查看事件
kubectl get events -n <namespace> --sort-by='.lastTimestamp'
HPA 未创建
检查 KEDA operator 日志:
kubectl logs -n keda -l app.kubernetes.io/name=keda-operator
文档参考
- 详细使用文档:
/home/fei/k3s/009-基础设施/007-keda/readme.md - KEDA 官方文档: https://keda.sh/docs/
- Scalers 参考: https://keda.sh/docs/scalers/
总结
✅ KEDA 已成功部署并运行
- KEDA 核心组件运行正常
- Navigation 服务已配置自动扩缩容
- 已验证缩容到 0 功能正常
- 准备好为更多服务配置自动扩缩容
下一步: 根据实际使用情况,逐步为 Redis 和 PostgreSQL 配置自动扩缩容。
KEDA 让您的 K3s 集群更智能、更节省资源! 🚀