# 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 集成 [pending] **目标**: 接通顶部菜单的暂停更新和 CI/CD 按钮 **改动**: - 后端 `POST .../deployments/:name/pause` 和 `/resume` - CI/CD 按钮跳转到已有 Pipeline 页面(传递 namespace+deployment 上下文) **验收标准**: - [ ] 可暂停/恢复 Deployment 滚动更新 - [ ] 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 采集`