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

5.9 KiB
Raw Blame History

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 OperatorZalando 或 CloudNativePG
  • 方案 2: 部署 PgBouncer 连接池 + KEDA 扩展 PgBouncer
  • 方案 3: 配置读写分离,只对只读副本使用 KEDA

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

3. 监控扩缩容行为

在 Grafana 中导入 KEDA 仪表板:

已修复的问题

问题 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

文档参考

总结

KEDA 已成功部署并运行

  • KEDA 核心组件运行正常
  • Navigation 服务已配置自动扩缩容
  • 已验证缩容到 0 功能正常
  • 准备好为更多服务配置自动扩缩容

下一步: 根据实际使用情况,逐步为 Redis 和 PostgreSQL 配置自动扩缩容。


KEDA 让您的 K3s 集群更智能、更节省资源! 🚀