198 lines
5.1 KiB
Markdown
198 lines
5.1 KiB
Markdown
# 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 服务自动扩缩容
|
||
|
||
```bash
|
||
# 当前状态
|
||
$ 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 扩容
|
||
|
||
```bash
|
||
# 访问导航页面
|
||
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` 字段
|
||
```yaml
|
||
# ❌ 错误
|
||
- type: cpu
|
||
metadata:
|
||
type: Utilization
|
||
value: "60"
|
||
```
|
||
|
||
**修复**: 改为 `metricType`
|
||
```yaml
|
||
# ✅ 正确
|
||
- type: cpu
|
||
metricType: Utilization
|
||
metadata:
|
||
value: "60"
|
||
```
|
||
|
||
### 2. Navigation 缺少资源配置
|
||
|
||
**修复**: 添加了 resources 配置
|
||
```yaml
|
||
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
|
||
|
||
## ⚡ 快速命令
|
||
|
||
```bash
|
||
# 查看 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 集群更智能、更节省资源!** 🚀
|