feat(k8s): M1 SyncCluster 增加 metrics 采集

后端:
- SyncCluster 中调 GetNodeMetrics() 获取 metrics-server 数据
- 节点 INSERT 增加 cpu_usage/memory_usage 百分比字段
- 新增 parseCpuNanoToMilli / parseMemKiToMi 辅助函数
- 采集 Pod metrics(为 M2 准备)

前端:
- KubernetesClusterDetail 删除硬编码 resourceData mock
- 改为从节点 metrics 实时计算集群 CPU/内存使用率
- 图表 Y 轴固定 0-100 域,底部显示百分比数值

新增文档:
- ROADMAP.md / TDD_PLAN.md / PROJECT_EVALUATION.md
This commit is contained in:
attacker committed 2026-06-21 21:45:42 +08:00
1 parent 3b112ee813
commit b3d2011243
5 files changed
+289 -729

No files matched your search

+93 -164
View File
@@ -1,172 +1,101 @@
# AIOps 智能运维平台 — 开发路线图
# K8s 管理功能演进路线图
> 版本: v2.0
> 更新日期: 2026-06-21
> 当前阶段: **v0.3.0 — 质量加固** (从功能驱动转向质量驱动)
> 关联文档: [PROJECT_EVALUATION.md](./PROJECT_EVALUATION.md) | [TDD_PLAN.md](./TDD_PLAN.md)
> 每个模块 = 1 个 cron 周期(6h)可完成的**中等粒度功能**。完成后更新状态。
## 当前冲刺:P0 — Metrics 数据贯通
### M1: SyncCluster 增加 metrics 采集 [in_progress]
**目标**: 同步时采集 node/pod metrics,写入 DB 的 cpu_usage/memory_usage 字段
**后端改动**:
- `SyncCluster` handler 中,`client.ListNodes()` 之后调 `client.GetNodeMetrics()`
- 将 CPU(nanocores→m) / Memory(Ki→Mi) 换算后写入 `kubernetes_nodes.cpu_usage` / `memory_usage`(百分比)
- 同理调 `client.GetPodMetrics()` 写入 Pod 的资源使用
**前端改动**:
- `KubernetesClusterDetail.tsx`: 删除 `resourceData` 硬编码,改为从 API 获取真实数据(或展示当前 metrics 快照)
- 资源分布卡片读取 cluster 实际计数(node_count/pod_count 已有)
**验收标准**:
- [ ] SyncCluster 后 DB `kubernetes_nodes` 表 cpu_usage/memory_usage 非零
- [ ] 节点列表页 CPU/内存百分比非零
- [ ] 集群详情页无硬编码 mock 数据
- [ ] curl `/kubernetes-clusters/:id` 返回的 node_count/pod_count 正确
---
## 版本规划总览
### M2: Pod Metrics 详情页接入 [pending]
**目标**: Deployment 详情页和 Pod 列表展示真实 CPU/内存使用
**改动**:
- 后端 `ListPods` handler 注入 `GetPodMetrics()`(类似 ListNodes 已有逻辑)
- 前端 Pod 列表表格增加 CPU/内存列
- DeploymentView 容器详情区域读取 metrics
**验收标准**:
- [ ] Pod 列表有 CPU/内存使用量列
- [ ] Deployment 详情页容器 CPU/内存非 mock
---
### M3: Pod 文件上传 [pending]
**目标**: PodFileBrowser 增加上传能力
**改动**:
- 后端新增 `POST .../pods/:pod/files/upload` — 用 exec tar 解包写入
- 前端 PodFileBrowser 增加上传按钮 + 拖拽上传
**验收标准**:
- [ ] 可上传文件到 Pod 容器内
- [ ] 上传后文件列表刷新可见
---
### M4: ConfigMap/Secret 编辑 [pending]
**目标**: 目前只读,增加在线编辑能力
**改动**:
- 复用已有 `UpdateResourceYAMLNS` 端点
- 前端 ConfigMap/Secret 列表增加编辑弹窗(YAML 编辑器)
**验收标准**:
- [ ] 可在线编辑 ConfigMap 并保存
- [ ] 保存后 K8s 中实际生效
---
### M5: Deployment 暂停更新 + CI/CD 集成 [pending]
**目标**: 接通顶部菜单的暂停更新和 CI/CD 按钮
**改动**:
- 后端 `POST .../deployments/:name/pause` 和 `/resume`
- CI/CD 按钮跳转到已有 Pipeline 页面(传递 namespace+deployment 上下文)
**验收标准**:
- [ ] 可暂停/恢复 Deployment 滚动更新
- [ ] CI/CD 按钮可跳转到流水线页面
---
## 后续规划(P2+)
| 模块 | 描述 |
|------|------|
| M6 | Node 详情页(PID/容器运行时/分配率) |
| M7 | Service/Ingress 在线编辑 |
| M8 | StatefulSet/DaemonSet 详情页(对标 Deployment) |
| M9 | 事件聚合 + 告警联动 |
| M10 | 多集群资源对比看板 |
---
## 状态标记规则
```
已完成 当前聚焦
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━►
v0.1.0 v0.2.0 v0.3.0 v0.4.0 v1.0.0
MVP核心 → AI能力增强 → 质量加固 → 企业级特性 → 智能化升级
[完成] [完成] [进行中] [计划] [计划]
┌─────────────────────────────────────────────┐
│ v0.3.0 重点: 测试 + CI + 重构 + API 文档 │
│ 目标: 工程质量 30 → 75, 综合评分 72 → 82 │
└─────────────────────────────────────────────┘
pending → in_progress → done / blocked
```
| 版本 | 主题 | 状态 | 目标周期 | 核心交付 |
|------|------|------|---------|---------|
| v0.1.0 | MVP 核心功能 | ✅ 完成 | — | 资产/监控/发布/自动化 |
| v0.2.0 | AI 能力增强 | ✅ 完成 | — | AI 告警分析/脚本生成/故障诊断 |
| **v0.3.0** | **质量加固** | **🔄 进行中** | **2-4 周** | **测试 + CI/CD + 重构 + API 文档** |
| v0.4.0 | 企业级特性 | 📋 计划 | Q3 2026 | MySQL 迁移 / 多云增强 / 安全合规 |
| v1.0.0 | 智能化升级 | 📋 计划 | Q4 2026 | 智能自愈 / 知识图谱 / 开放 API |
---
## v0.3.0 — 质量加固 (当前版本)
> **战略转折点**: 从"功能开发"转向"质量加固"
> **验收标准**: 工程质量 ≥ 75, 后端测试覆盖率 ≥ 50%, CI 流水线全绿
### Sprint 1: 测试基建 (第 1 周)
| # | 任务 | 类型 | 优先级 | 验收标准 | 状态 |
|---|------|------|--------|---------|------|
| 1 | 后端测试框架搭建 | 后端 | P0 | `testify` + `httptest` 引入, `make test` 可运行 | ☐ |
| 2 | K8s handler 单元测试 (第一批) | 后端 | P0 | 覆盖 cluster CRUD + sync, ≥ 15 个测试函数 | ☐ |
| 3 | 认证模块测试 | 后端 | P0 | login/register/JWT 验证全覆盖 | ☐ |
| 4 | 前端测试框架搭建 | 前端 | P1 | Vitest + Testing Library 引入, `npm test` 可运行 | ☐ |
| 5 | CI 流水线搭建 | DevOps | P0 | `.gitea/workflows/ci.yml`: lint → test → build | ☐ |
### Sprint 2: 核心重构 (第 2 周)
| # | 任务 | 类型 | 优先级 | 验收标准 | 状态 |
|---|------|------|--------|---------|------|
| 6 | 拆分 kubernetes.go (96KB → 8 文件) | 后端 | P0 | cluster/deployment/pod/service/hpa/cronjob/config/node 各自独立 | ☐ |
| 7 | Go module 重命名 ezops → aiops | 后端 | P1 | `go.mod` module 名 + 全量 import 路径替换 | ☐ |
| 8 | K8s handler 测试 (第二批) | 后端 | P0 | 覆盖 deployment/scale/restart/HPA, ≥ 20 个测试函数 | ☐ |
| 9 | Pipeline executor 测试 | 后端 | P1 | 覆盖 pipeline 创建/执行/日志流 | ☐ |
| 10 | golangci-lint 集成 | DevOps | P1 | `.golangci.yml` 配置, CI 中 lint 零 error | ☐ |
### Sprint 3: API 文档 + 前端测试 (第 3 周)
| # | 任务 | 类型 | 优先级 | 验收标准 | 状态 |
|---|------|------|--------|---------|------|
| 11 | 引入 Swagger/swaggo | 后端 | P1 | `swag init` 生成 API 文档, 核心路由注解覆盖 | ☐ |
| 12 | 告警引擎测试 | 后端 | P1 | 覆盖告警规则评估/通知触发/静默逻辑 | ☐ |
| 13 | 前端核心组件测试 | 前端 | P2 | K8s/Login/Dashboard 组件 ≥ 10 个测试用例 | ☐ |
| 14 | Playwright E2E 冒烟测试 | 前端 | P2 | 登录/服务器列表/K8s 集群 3 条核心流程 | ☐ |
| 15 | 审计 CSV 导出 TODO | 后端 | P2 | `audit.go:223` 实现 CSV/Excel 导出 | ☐ |
### Sprint 4: 质量收尾 (第 4 周)
| # | 任务 | 类型 | 优先级 | 验收标准 | 状态 |
|---|------|------|--------|---------|------|
| 16 | 全量回归测试 | QA | P0 | 15 模块手动回归 + 自动化测试全绿 | ☐ |
| 17 | 覆盖率报告 | DevOps | P1 | 后端 ≥ 50%, 生成覆盖率徽章 | ☐ |
| 18 | 代码规范文档 | 文档 | P2 | 更新 CLAUDE.md + 新增 CONTRIBUTING.md | ☐ |
| 19 | v0.3.0 Release Notes | 文档 | P2 | CHANGELOG.md 更新 | ☐ |
| 20 | v0.3.0 发布部署 | DevOps | P0 | 3 种部署方式全部验证通过 | ☐ |
### v0.3.0 验收检查点
- [ ] 后端测试覆盖率 ≥ 50%
- [ ] CI 流水线: push → lint → test → build → 全绿
- [ ] kubernetes.go 拆分完成, 单文件不超过 500 行
- [ ] API 文档可访问 (Swagger UI)
- [ ] 前端冒烟 E2E 3 条流程通过
- [ ] golangci-lint 零 error
- [ ] 3 种部署方式全部验证通过
---
## v0.4.0 — 企业级特性 (计划 Q3 2026)
> **目标**: 提升可扩展性和安全性,支撑生产级多租户部署
### 后端任务
| # | 任务 | 优先级 | 验收标准 |
|---|------|--------|---------|
| 1 | SQLite → MySQL 迁移 | P0 | 利用 GORM 抽象层,数据迁移脚本,双写过渡 |
| 2 | 告警异步化 (Redis Stream) | P1 | 告警引擎解耦, 告警队列消费器 |
| 3 | 多租户支持 (数据隔离) | P1 | tenant_id 全表注入, 查询自动过滤 |
| 4 | 安全基线检查模块 | P2 | CIS Benchmark 基础检查 |
| 5 | 漏洞扫描集成 | P2 | 对接 Trivy / Clair |
### 前端任务
| # | 任务 | 优先级 | 验收标准 |
|---|------|--------|---------|
| 6 | 自定义仪表盘 (拖拽) | P1 | 用户自定义监控面板组件 |
| 7 | 告警降噪和聚合视图 | P2 | 告警分组/抑制/聚合展示 |
| 8 | 多渠道告警通知配置 UI | P2 | 钉钉/飞书/企微/邮件/短信 |
### DevOps 任务
| # | 任务 | 优先级 | 验收标准 |
|---|------|--------|---------|
| 9 | Helm Chart 仓库 | P1 | 官方 Helm Chart + 版本管理 |
| 10 | 蓝绿/金丝雀发布支持 | P2 | Pipeline 增加发布策略 |
| 11 | 自动回滚机制 | P2 | 健康检查失败自动回滚 |
---
## v1.0.0 — 智能化升级 (计划 Q4 2026)
> **目标**: 全栈智能化, 降低人工干预
### 智能化
| # | 任务 | 优先级 | 验收标准 |
|---|------|--------|---------|
| 1 | 智能自愈引擎 | P0 | 故障检测 → 自动修复 → 效果验证闭环 |
| 2 | 运维知识图谱 | P1 | 故障知识沉淀 + 智能问答增强 |
| 3 | 容量预测与扩缩容 | P1 | 基于历史数据的资源预测 |
| 4 | AIOps 工作台 | P2 | 个性化运维视图 + 任务推荐 |
### 生态
| # | 任务 | 优先级 | 验收标准 |
|---|------|--------|---------|
| 5 | 开放 API 平台 (REST + GraphQL) | P1 | 完整 API 覆盖 + SDK |
| 6 | 插件市场框架 | P2 | 插件 SDK + 官方插件 |
| 7 | Webhook 体系完善 | P2 | 全事件 Webhook 通知 |
---
## 进度追踪表
| 版本 | 状态 | 开始日期 | 完成日期 | 备注 |
|------|------|---------|---------|------|
| v0.1.0 MVP | ✅ 完成 | — | 2026-06 | 15 模块核心功能 |
| v0.2.0 AI增强 | ✅ 完成 | — | 2026-06 | AI 告警/脚本/诊断 |
| v0.3.0 质量加固 | 🔄 进行中 | 2026-06-21 | — | 当前聚焦 |
| v0.4.0 企业级 | 📋 计划 | — | — | MySQL/多租户/安全 |
| v1.0.0 智能化 | 📋 计划 | — | — | 自愈/知识图谱 |
---
## 技术债务清单 (持续追踪)
| # | 债务 | 严重度 | 引入版本 | 计划清除版本 | 状态 |
|---|------|--------|---------|------------|------|
| 1 | 零测试覆盖 | 🔴 P0 | v0.1.0 | v0.3.0 | ☐ |
| 2 | kubernetes.go 巨型文件 (96KB) | 🟡 P1 | v0.1.0 | v0.3.0 | ☐ |
| 3 | Go module 名 `ezops` | 🟡 P1 | v0.1.0 | v0.3.0 | ☐ |
| 4 | SQLite 并发瓶颈 | 🟡 P1 | v0.1.0 | v0.4.0 | ☐ |
| 5 | 无 API 自动文档 | 🟡 P1 | v0.1.0 | v0.3.0 | ☐ |
| 6 | 无 CI/CD 流水线 | 🔴 P0 | v0.1.0 | v0.3.0 | ☐ |
| 7 | 审计 CSV 导出缺失 | 🟢 P2 | v0.1.0 | v0.3.0 | ☐ |
| 8 | 无消息队列 | 🟢 P2 | v0.2.0 | v0.4.0 | ☐ |
| 9 | 前端无 E2E 测试 | 🟢 P2 | v0.1.0 | v0.3.0 | ☐ |
| 10 | 无多租户隔离 | 🟢 P2 | — | v0.4.0 | ☐ |
每个模块完成后:
1. 更新本文件状态
2. 更新 PROJECT_EVALUATION.md 对应行
3. git commit message 格式: `feat(k8s): M1 SyncCluster metrics 采集`