Files
aiops/ROADMAP.md
T
attacker 2e66908e20 feat(k8s): M5 Deployment 暂停更新 + CI/CD 集成
- 后端: PauseDeployment/ResumeDeployment 客户端方法 (PATCH spec.paused)
- 后端: ID路由 + Kuboard code路由 pause/resume handlers
- 后端: Deployment 列表 summary 增加 paused 字段
- 前端: 操作菜单增加「暂停更新/恢复更新」动态切换 + 暂停 Badge
- 前端: CI/CD 发布按钮跳转流水线页面 (namespace+deployment 上下文)
- 前端: api.ts 增加 pauseDeployment/resumeDeployment 方法
- 验证: 5项端到端测试全部通过 (Python urllib)
2026-06-23 03:06:13 +08:00

195 lines
7.5 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编辑器 [pending]
**目标**: 三模式切换(查看/可视化编辑/YAML编辑)+ 基本信息 Tab
**改动**:
- `DeploymentWorkload.tsx`: 模式切换从 2 tab → 3 tab(查看模式 / 编辑模式 / YAML编辑)
- 新增 `DeploymentEditBasic.tsx`: 基本信息 Tab — name/namespace/labels/annotations/replicas
- `YamlViewer.tsx` 升级: 引入 Monaco Editor(或 CodeMirror),支持 YAML 语法高亮 + 行号 + 基本校验
- 路由扩展: `:mode` 增加 `yaml` 值
**验收标准**:
- [ ] 三模式 tab 切换正常,YAML 模式打开 Monaco 编辑器
- [ ] 基本信息 Tab 可编辑 labels/annotations/replicas 并保存
- [ ] YAML 编辑器有语法高亮和行号
---
### M7: 容器信息 Tab(工作容器 + 初始化容器)[pending]
**目标**: 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)
**验收标准**:
- [ ] 可添加/删除工作容器和初始化容器
- [ ] 每个容器的所有常规字段可编辑
- [ ] 保存后 K8s 中实际生效
---
### M8: 存储挂载 + 高级设置 Tab [pending]
**目标**: 数据卷定义/挂载 + Deployment 高级调度策略
**改动**:
- 新增 `DeploymentEditStorage.tsx`:
- 数据卷定义区: 添加/删除 volume(PVC/EmptyDir/HostPath/NFS/ConfigMap/Secret)
- 数据卷挂载区: 选择 volume → 挂载到容器的路径(自动读容器列表)
- 新增 `DeploymentEditAdvanced.tsx`:
- 更新策略: RollingUpdate(maxSurge/maxUnavailable) / Recreate + minReadySeconds + revisionHistoryLimit
- 节点调度: nodeSelector (key-value) + tolerations (key/operator/effect)
- 亲和性/反亲和性: 简化 UI(podAntiAffinity topologyKey)
- DNS 配置: dnsPolicy + dnsConfig(nameservers/searches/options)
- 主机别名: hostAliases (ip/hostnames)
- ServiceAccountName
- 主机设置: hostNetwork/hostIPC/hostPID/shareProcessNamespace
- Pod 安全上下文: runAsUser/runAsGroup/fsGroup/runAsNonRoot/seLinuxOptions
**验收标准**:
- [ ] 可定义 6 种数据卷并挂载到容器
- [ ] 可编辑更新策略和调度策略
- [ ] 保存后 K8s 中实际生效
---
### M9: 服务/应用路由 Tab + 整体联调 [pending]
**目标**: Service/Ingress 可视化创建 + 编辑器整体联调
**改动**:
- 新增 `DeploymentEditService.tsx`:
- 服务发布: Service 名称/类型(ClusterIP/NodePort/LoadBalancer)/选择器/端口映射
- 应用路由: Ingress 名称/规则(host/path/service/port)
- 如果已有关联 Service/Ingress → 显示编辑;没有 → 提供创建
- 整体联调:
- 5 Tab 数据合并为一个完整 manifest → PUT 到 K8s API
- 编辑模式顶部增加「保存」/「取消」/「预览 YAML」
- 取消旧 `DeploymentEdit.tsx`(374 行浅层编辑器)
**验收标准**:
- [ ] 可在编辑器内创建/编辑关联 Service
- [ ] 5 Tab 编辑的数据合并保存成功
- [ ] 旧 DeploymentEdit.tsx 删除,无残留引用
---
## 后续规划(P2+)
| 模块 | 描述 |
|------|------|
| M10 | Node 详情页(PID/容器运行时/分配率) |
| 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 采集`