Files
aiops/ROADMAP.md
T
attacker 87b7755094 feat(k8s): M10 Node 详情页 — PID/容器运行时/分配率
- 后端: GetNodeDetail handler — 获取单个节点完整信息
  * 系统信息: container_runtime/architecture/kubelet/os/kernel
  * 资源分配率: 遍历 Pod 计算 CPU/Memory/Pods requested vs allocatable
  * metrics-server 数据注入 (cpu_usage_m/mem_usage_mi)
  * 全量 conditions/taints/labels + 节点上的 Pod 列表
- 后端: K8s 客户端扩展
  * NodeTaint/NodeCondition 扩展字段 (reason/message)
  * NodeInfo 增加 architecture/operatingSystem
  * GetNode(name) 单节点查询方法
  * parseCpuToMilli()/parseMemToMi() 资源解析辅助函数
- 后端: 注册路由
  * GET /kubernetes/:clusterCode/nodes/:name (Kuboard code)
  * GET /kubernetes-clusters/:id/nodes/:name (ID)
- 前端: NodeDetailPage.tsx (~330行)
  * 系统信息卡片 + 资源分配率卡片(进度条)
  * 条件卡片 + 污点卡片 + 标签卡片 + Pod 列表
- 前端: 节点名称可点击跳转 (ClusterOverviewPage)
- 验证: API/SPA/TS/Vite 全部通过
2026-06-23 17:57:09 +08:00

234 lines
10 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 编辑 [done]
**目标**: 目前只读,增加在线编辑能力
**改动**:
- 后端 `UpdateResourceYAMLNS` 端点已支持 configmaps/secrets(无需改动)
- 前端 `YamlViewer` 增加 `autoEdit` prop — 打开即进入编辑模式
- `NamespaceResourcePage` ConfigMap/Secret 行增加显式编辑按钮(铅笔图标)
- 统一 `cleanBeforeEdit=true` — 编辑前自动清理 status/managedFields/uid 等只读字段
- `k8s-yaml-utils.ts` 的 `cleanYAML()` 提供行级清理
**验收标准**:
- [x] 可在线编辑 ConfigMap 并保存
- [x] 保存后 K8s 中实际生效(curl 验证 label 增删 → GET 确认)
---
### M5: Deployment 暂停更新 + CI/CD 集成 [done]
**目标**: 接通顶部菜单的暂停更新和 CI/CD 按钮
**改动**:
- 后端 `POST .../deployments/:name/pause` 和 `/resume`(ID 路由 + Kuboard code 路由)
- 客户端 `PauseDeployment()` / `ResumeDeployment()` — PATCH `spec.paused` 布尔字段
- Deployment 列表 summary 增加 `paused` 字段,前端可读取暂停状态
- 前端操作菜单增加「暂停更新/恢复更新」动态切换 + 暂停 Badge
- CI/CD 按钮跳转到流水线页面(传递 namespace+deployment 上下文)
**验收标准**:
- [x] 可暂停/恢复 Deployment 滚动更新
- [x] CI/CD 按钮可跳转到流水线页面
---
## 当前冲刺:P1 — Deployment 可视化编辑器(Kuboard 风格)
### M6: 编辑器基础设施 + 基本信息 Tab + YAML编辑器 [done]
**目标**: 三模式切换(查看/可视化编辑/YAML编辑)+ 基本信息 Tab
**改动**:
- `DeploymentWorkload.tsx`: 模式切换从 2 tab → 3 tab(查看模式 / 编辑模式 / YAML编辑)
- 新增 `DeploymentEditBasic.tsx`: 基本信息 Tab — name/namespace(只读) + replicas/labels/annotations/selector(可编辑)
- `YamlViewer.tsx` 升级: 引入 CodeMirror 6(`@uiw/react-codemirror` + `@codemirror/lang-yaml`),支持 YAML 语法高亮 + 行号 + 折叠 + 括号匹配
- `YamlViewer.tsx` 新增 `inline` 模式 — 非弹窗内联展示,适合 YAML 编辑 Tab
- `DeploymentDetailPage.tsx`: `mode` 类型扩展为 `'view' | 'edit' | 'yaml'`
- `DeploymentWorkload.tsx` 新增 `EditModeContainer` — 编辑模式 Tab 导航(基本信息✅ / 容器信息M7 / 存储M8 / 高级M8 / 服务M9)
- 路由 `:mode` 参数自动支持 `yaml` 值(无需改 App.tsx 路由表)
**验收标准**:
- [x] 三模式 tab 切换正常,YAML 模式打开 CodeMirror 编辑器
- [x] 基本信息 Tab 可编辑 labels/annotations/replicas 并保存
- [x] YAML 编辑器有语法高亮和行号
- [x] YAML 编辑器支持内联模式(inline prop)
- [x] 编辑模式 Tab 导航系统就绪(M7-M9 预留占位)
---
### M7: 容器信息 Tab(工作容器 + 初始化容器)[done]
**目标**: Kuboard 风格的容器编辑器,替代当前浅层 DeploymentEdit
**改动**:
- 新增 `DeploymentEditContainers.tsx`: 容器列表卡片(initContainers + containers)
- 每个容器卡片可编辑:
- 容器镜像 + ImagePullSecret + 镜像拉取策略
- 命令 (command + args)
- 环境变量(key-value 动态列表)
- 资源需求/限制(CPU/Memory/GPU)
- 端口(name/port/protocol 动态列表)
- 健康检查(liveness/readiness/startup — httpGet/tcpSocket/exec 三种)
- 生命周期回调(postStart/preStop)
- 安全上下文(runAsUser/runAsNonRoot/privileged/capabilities)
- 数据卷挂载(name/mountPath/subPath/readOnly)
**验收标准**:
- [x] 可添加/删除工作容器和初始化容器
- [x] 每个容器的所有常规字段可编辑
- [x] 保存后 K8s 中实际生效
---
### M8: 存储挂载 + 高级设置 Tab [done]
**目标**: 数据卷定义/挂载 + Deployment 高级调度策略
**改动**:
- 新增 `DeploymentEditStorage.tsx` (437 行):
- 数据卷定义区: 添加/删除 volume(EmptyDir/HostPath/ConfigMap/Secret/PVC/NFS — 6 种)
- 每种类型独立字段编辑(medium/sizeLimit/path/pathType/configMapName/secretName/pvcName/nfsServer/nfsPath/readOnly)
- 容器 volumeMounts 只读汇总(从容器信息 Tab 修改)
- 新增 `DeploymentEditAdvanced.tsx` (632 行):
- 更新策略: RollingUpdate(maxSurge/maxUnavailable) / Recreate + revisionHistoryLimit + progressDeadlineSeconds
- 节点调度: nodeSelector (key-value) + tolerations (key/operator/value/effect/tolerationSeconds)
- DNS 配置: dnsPolicy + dnsConfig(nameservers/searches/options)
- 主机别名: hostAliases (ip/hostnames)
- ServiceAccountName + restartPolicy + schedulerName + terminationGracePeriodSeconds
- 主机设置: hostNetwork/hostIPC/hostPID/shareProcessNamespace
- Pod 安全上下文: runAsUser/runAsGroup/fsGroup/runAsNonRoot
**验收标准**:
- [x] 可定义 6 种数据卷并挂载到容器
- [x] 可编辑更新策略和调度策略
- [x] 保存后 K8s 中实际生效(PUT application/yaml 直通 K8s API)
- [x] TypeScript 编译零错误 + Vite 构建成功
- [x] SPA edit 路由返回 200(非 301)
- [x] YAML API 返回有效 K8s manifest(apiVersion/kind/metadata 齐全)
---
### M9: 服务/应用路由 Tab + 整体联调 [done]
**目标**: Service/Ingress 可视化创建 + 编辑器整体联调
**改动**:
- 新增 `DeploymentEditService.tsx`:
- 服务发布: selector 匹配关联 Service(读 spec.selector.matchLabels),支持创建/删除
- 应用路由: Ingress 关联展示
- selector 双路径兼容(manifest?.spec?.selector?.matchLabels || manifest?.selector)
- 整体联调:
- 5 Tab 编辑器全部 `available: true`,统一 manifest 数据源
- 各 Tab 独立保存(PUT application/yaml),保存后刷新 manifest + loadData
- `EditModeContainer` Tab 系统(basic/containers/storage/advanced/service)
- 所有 5 Tab 已在 DeploymentWorkload.tsx EditModeContainer 中接入
**验收标准**:
- [x] 可在编辑器内创建/编辑关联 Service
- [x] 5 Tab 编辑的数据合并保存成功(各 Tab 独立 PUT 完整 manifest)
- [x] DeploymentWorkload.tsx 5 Tab 全部 available
- [x] TypeScript 编译零错误 + Vite 构建成功
---
## 后续规划(P2+)
### M10: Node 详情页(PID/容器运行时/分配率)[done]
**目标**: 节点名称可点击进入详情页,展示完整的系统信息、资源分配率、污点、条件、Pod 列表
**改动**:
- 后端:
- `kubernetesclient/client.go`: 新增 `NodeTaint` / `NodeCondition` 扩展字段 + `NodeInfo` 增加 `architecture`/`operatingSystem` + `GetNode(name)` 方法
- `kubernetes.go`: 新增 `GetNodeDetail` handler — 获取单个节点详情 + 遍历 Pod 计算资源分配率(CPU/Memory/Pods requested vs allocatable)
- `routes.go`: 注册 `GET /kubernetes/:clusterCode/nodes/:name` (Kuboard code 路由) + `GET /kubernetes-clusters/:id/nodes/:name` (ID 路由)
- 新增 `parseCpuToMilli()` / `parseMemToMi()` 辅助函数(解析 Pod resource requests)
- 前端:
- 新增 `NodeDetailPage.tsx` (~330行) — 节点详情页:系统信息卡片 + 资源分配率卡片(进度条) + 条件卡片 + 污点卡片 + 标签卡片 + Pod 列表
- `api.ts`: 新增 `getNodeDetail()` 方法
- `App.tsx`: 新增路由 `:clusterCode/nodes/:nodeName`
- `ClusterOverviewPage.tsx`: 节点名称可点击跳转详情页
**验收标准**:
- [x] `GET /kubernetes/:clusterCode/nodes/:name` 返回完整详情(container_runtime/kubelet/os/kernel/architecture)
- [x] 资源分配率正确计算(cpu_alloc_pct/mem_alloc_pct/pod_alloc_pct)
- [x] metrics-server 数据注入(cpu_usage_m/mem_usage_mi)
- [x] 节点条件全量返回(5个 conditions 含 reason/message)
- [x] 污点列表返回
- [x] 节点上的 Pod 列表返回(含 CPU/内存 requests)
- [x] 前端节点名称可点击跳转
- [x] SPA 路由返回 200(非 301)
- [x] TypeScript 零编译错误 + Vite 构建成功
---
### 后续(P3+)
| 模块 | 描述 |
|------|------|
| M11 | StatefulSet/DaemonSet 详情页(对标 Deployment) |
| M12 | 事件聚合 + 告警联动 |
| M13 | 多集群资源对比看板 |
---
## 状态标记规则
```
pending → in_progress → done / blocked
```
每个模块完成后:
1. 更新本文件状态
2. 更新 PROJECT_EVALUATION.md 对应行
3. git commit message 格式: `feat(k8s): M1 SyncCluster metrics 采集`