261 lines
5.9 KiB
Markdown
261 lines
5.9 KiB
Markdown
# 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:
|
||
|
||
```bash
|
||
kubectl get deployment navigation -n navigation
|
||
# 输出: READY 0/0
|
||
```
|
||
|
||
### 测试从 0 扩容
|
||
|
||
访问导航页面触发扩容:
|
||
|
||
```bash
|
||
# 1. 访问页面
|
||
curl https://dh.u6.net3w.com
|
||
|
||
# 2. 观察副本数变化
|
||
kubectl get deployment navigation -n navigation -w
|
||
|
||
# 预期: 10-30 秒内副本数从 0 变为 1
|
||
```
|
||
|
||
## 查看 KEDA 状态
|
||
|
||
### 查看所有 ScaledObject
|
||
|
||
```bash
|
||
kubectl get scaledobject -A
|
||
```
|
||
|
||
### 查看 HPA(自动创建)
|
||
|
||
```bash
|
||
kubectl get hpa -A
|
||
```
|
||
|
||
### 查看 KEDA 日志
|
||
|
||
```bash
|
||
kubectl logs -n keda -l app.kubernetes.io/name=keda-operator -f
|
||
```
|
||
|
||
## 下一步操作
|
||
|
||
### 1. 应用 Redis 自动扩缩容
|
||
|
||
```bash
|
||
# 首先需要为 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 触发器配置从:
|
||
```yaml
|
||
- type: cpu
|
||
metadata:
|
||
type: Utilization
|
||
value: "60"
|
||
```
|
||
|
||
改为:
|
||
```yaml
|
||
- type: cpu
|
||
metricType: Utilization
|
||
metadata:
|
||
value: "60"
|
||
```
|
||
|
||
### 问题 2: Navigation 缺少资源配置
|
||
|
||
**解决方案**:
|
||
为 Navigation deployment 添加了 resources 配置:
|
||
```yaml
|
||
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 查询
|
||
|
||
```promql
|
||
# 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 未生效
|
||
|
||
```bash
|
||
# 查看详细状态
|
||
kubectl describe scaledobject <name> -n <namespace>
|
||
|
||
# 查看事件
|
||
kubectl get events -n <namespace> --sort-by='.lastTimestamp'
|
||
```
|
||
|
||
### HPA 未创建
|
||
|
||
检查 KEDA operator 日志:
|
||
```bash
|
||
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 集群更智能、更节省资源!** 🚀
|