Files
k3s/009-基础设施/007-keda/最终总结.md
2026-02-05 00:11:05 +08:00

5.1 KiB
Raw Blame History

KEDA 部署最终总结

成功部署

KEDA 核心组件

  • keda-operator: 运行中
  • keda-metrics-apiserver: 运行中
  • keda-admission-webhooks: 运行中
  • 命名空间: keda

已配置的服务

服务 状态 最小副本 最大副本 说明
Navigation 已应用 0 10 空闲时自动缩容到 0
Redis 待应用 0 5 需要先配置 Prometheus exporter
PostgreSQL 不适用 - - 有状态服务,不能直接扩展

⚠️ 重要修正PostgreSQL

问题说明

PostgreSQL 是有状态服务,不能直接使用 KEDA 扩展副本数,原因:

  1. 存储冲突: 多个 Pod 尝试挂载同一个 PVC 会失败
  2. 数据损坏: 如果使用 ReadWriteMany多实例写入会导致数据损坏
  3. 缺少复制: 没有配置主从复制,无法保证数据一致性

正确方案

已创建详细说明文档:/home/fei/k3s/009-基础设施/007-keda/scalers/postgresql-说明.md

推荐方案:

  1. PostgreSQL Operator (Zalando 或 CloudNativePG)
  2. PgBouncer + KEDA (扩展连接池而非数据库)
  3. 读写分离 (主库固定,从库使用 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周内

  1. 监控 Navigation 服务的扩缩容行为
  2. 为 Redis 配置 Prometheus exporter
  3. 应用 Redis ScaledObject

中期1-2周

  1. 在 Grafana 中导入 KEDA 仪表板 (ID: 14691)
  2. 根据实际使用情况调整触发阈值
  3. 为其他无状态服务配置 KEDA

长期1个月+

  1. 评估是否需要 PostgreSQL 高可用
  2. 如需要,部署 PostgreSQL Operator
  3. 或部署 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 集群更智能、更节省资源! 🚀