Files
aiops/ROADMAP.md
T
attacker 9ab7572b8e feat(k8s): M3 Pod文件上传 + ExecInPod WebSocket协议重写
M3: Pod 文件上传
- 后端: POST .../pods/:pod/files/upload (multipart, base64分块exec写入)
- 前端: PodFileBrowser 增加上传按钮 + FormData API
- 路由: 新增 Kuboard (:clusterCode) + 旧 (:id) 两套路由

重大修复: ExecInPod 从 raw HTTP SPDY 改为 WebSocket channel.k8s.io
- 旧方案: HTTP POST + SPDY upgrade → 无法解析响应(协议头缺失 + 帧解析复杂)
- 新方案: gorilla/websocket Dialer + channel.k8s.io 子协议 → 和 ExecTerminal 一致
- 影响: 文件浏览/下载/上传全部恢复正常

修复: BusyBox ls 解析
- BusyBox 不支持 --time-style 参数,默认输出 Mon DD HH:MM 格式
- 解析器改为自动检测 GNU vs BusyBox 日期格式
2026-06-23 02:21:29 +08:00

105 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# K8s 管理功能演进路线图
> 每个模块 = 1 个 cron 周期(6h)可完成的**中等粒度功能**。完成后更新状态。
## 当前冲刺:P0 — Metrics 数据贯通
### M1: SyncCluster 增加 metrics 采集 [done]
**目标**: 同步时采集 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 已有)
**验收标准**:
- [x] SyncCluster 后 DB `kubernetes_nodes` 表 cpu_usage/memory_usage 非零
- [x] 节点列表页 CPU/内存百分比非零
- [x] 集群详情页无硬编码 mock 数据
- [x] curl `/kubernetes-clusters/:id` 返回的 node_count/pod_count 正确
---
### M2: Pod Metrics 详情页接入 [done]
**目标**: Deployment 详情页和 Pod 列表展示真实 CPU/内存使用
**改动**:
- 后端 `ListPods` handler 注入 `GetPodMetrics()`(类似 ListNodes 已有逻辑)
- 前端 Pod 列表表格增加 CPU/内存列
- DeploymentView 容器详情区域读取 metrics
**验收标准**:
- [x] Pod 列表有 CPU/内存使用量列
- [x] Deployment 详情页容器 CPU/内存非 mock
---
### M3: Pod 文件上传 [done]
**目标**: PodFileBrowser 增加上传能力
**改动**:
- 后端新增 `POST .../pods/:pod/files/upload` — multipart 表单接收,base64 分块 exec 写入
- 前端 PodFileBrowser 增加上传按钮 + FormData 上传
- **重大修复**: `ExecInPod` 从 raw HTTP SPDY(不工作)改为 WebSocket channel.k8s.io 协议(和 ExecTerminal 一致)
- **修复**: BusyBox `ls` 不支持 `--time-style`,解析器改为兼容 BusyBox 默认日期格式
**验收标准**:
- [x] 可上传文件到 Pod 容器内
- [x] 上传后文件列表刷新可见
- [x] verify 字段返回正确文件大小
---
### 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 | 多集群资源对比看板 |
---
## 状态标记规则
```
pending → in_progress → done / blocked
```
每个模块完成后:
1. 更新本文件状态
2. 更新 PROJECT_EVALUATION.md 对应行
3. git commit message 格式: `feat(k8s): M1 SyncCluster metrics 采集`