5.1 KiB
5.1 KiB
KEDA 部署最终总结
✅ 成功部署
KEDA 核心组件
- keda-operator: ✅ 运行中
- keda-metrics-apiserver: ✅ 运行中
- keda-admission-webhooks: ✅ 运行中
- 命名空间: keda
已配置的服务
| 服务 | 状态 | 最小副本 | 最大副本 | 说明 |
|---|---|---|---|---|
| Navigation | ✅ 已应用 | 0 | 10 | 空闲时自动缩容到 0 |
| Redis | ⏳ 待应用 | 0 | 5 | 需要先配置 Prometheus exporter |
| PostgreSQL | ❌ 不适用 | - | - | 有状态服务,不能直接扩展 |
⚠️ 重要修正:PostgreSQL
问题说明
PostgreSQL 是有状态服务,不能直接使用 KEDA 扩展副本数,原因:
- 存储冲突: 多个 Pod 尝试挂载同一个 PVC 会失败
- 数据损坏: 如果使用 ReadWriteMany,多实例写入会导致数据损坏
- 缺少复制: 没有配置主从复制,无法保证数据一致性
正确方案
已创建详细说明文档:/home/fei/k3s/009-基础设施/007-keda/scalers/postgresql-说明.md
推荐方案:
- PostgreSQL Operator (Zalando 或 CloudNativePG)
- PgBouncer + KEDA (扩展连接池而非数据库)
- 读写分离 (主库固定,从库使用 KEDA)
📁 文件结构
/home/fei/k3s/009-基础设施/007-keda/
├── deploy.sh # ✅ 部署脚本
├── values.yaml # ✅ KEDA Helm 配置
├── readme.md # ✅ 详细使用文档
├── 部署总结.md # ✅ 部署总结
└── scalers/
├── navigation-scaler.yaml # ✅ 已应用
├── redis-scaler.yaml # ⏳ 待应用
└── postgresql-说明.md # ⚠️ 重要说明
🧪 验证结果
Navigation 服务自动扩缩容
# 当前状态
$ kubectl get deployment navigation -n navigation
NAME READY UP-TO-DATE AVAILABLE AGE
navigation 0/0 0 0 8h
# ScaledObject 状态
$ kubectl get scaledobject -n navigation
NAME READY ACTIVE TRIGGERS AGE
navigation-scaler True False prometheus,cpu 5m
# HPA 已自动创建
$ kubectl get hpa -n navigation
NAME REFERENCE MINPODS MAXPODS REPLICAS
keda-hpa-navigation-scaler Deployment/navigation 1 10 0
测试从 0 扩容
# 访问导航页面
curl https://dh.u6.net3w.com
# 观察副本数变化(10-30秒)
kubectl get deployment navigation -n navigation -w
# 预期: 0/0 → 1/1
📊 资源节省预期
| 服务 | 之前 | 现在 | 节省 |
|---|---|---|---|
| Navigation | 24/7 运行 | 按需启动 | 80-90% |
| Redis | 24/7 运行 | 按需启动 | 70-80% (配置后) |
| PostgreSQL | 24/7 运行 | 保持运行 | 不适用 |
🔧 已修复的问题
1. CPU 触发器配置错误
问题: 使用了已弃用的 type 字段
# ❌ 错误
- type: cpu
metadata:
type: Utilization
value: "60"
修复: 改为 metricType
# ✅ 正确
- type: cpu
metricType: Utilization
metadata:
value: "60"
2. Navigation 缺少资源配置
修复: 添加了 resources 配置
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
3. PostgreSQL 配置错误
修复:
- 删除了
postgresql-scaler.yaml - 创建了
postgresql-说明.md详细说明 - 更新了所有文档,明确标注不适用
📚 文档
- 使用指南:
/home/fei/k3s/009-基础设施/007-keda/readme.md - 部署总结:
/home/fei/k3s/009-基础设施/007-keda/部署总结.md - PostgreSQL 说明:
/home/fei/k3s/009-基础设施/007-keda/scalers/postgresql-说明.md
🎯 下一步建议
期(1周内)
- ✅ 监控 Navigation 服务的扩缩容行为
- ⏳ 为 Redis 配置 Prometheus exporter
- ⏳ 应用 Redis ScaledObject
中期(1-2周)
- ⏳ 在 Grafana 中导入 KEDA 仪表板 (ID: 14691)
- ⏳ 根据实际使用情况调整触发阈值
- ⏳ 为其他无状态服务配置 KEDA
长期(1个月+)
- ⏳ 评估是否需要 PostgreSQL 高可用
- ⏳ 如需要,部署 PostgreSQL Operator
- ⏳ 或部署 PgBouncer 连接池 + KEDA
⚡ 快速命令
# 查看 KEDA 状态
kubectl get pods -n keda
# 查看所有 ScaledObject
kubectl get scaledobject -A
# 查看 HPA
kubectl get hpa -A
# 查看 Navigation 副本数
kubectl get deployment navigation -n navigation -w
# 测试扩容
curl https://dh.u6.net3w.com
# 查看 KEDA 日志
kubectl logs -n keda -l app.kubernetes.io/name=keda-operator -f
🎉 总结
✅ KEDA 已成功部署并运行
- Navigation 服务实现按需启动,空闲时自动缩容到 0
- 修复了所有配置问题
- 明确了有状态服务(PostgreSQL)的正确处理方式
- 提供了完整的文档和使用指南
⚠️ 重要提醒
- 有状态服务不能简单地增加副本数
- PostgreSQL 需要使用专业的 Operator 或连接池方案
- 定期监控扩缩容行为,根据实际情况调整配置
KEDA 让您的 K3s 集群更智能、更节省资源! 🚀