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 日期格式
2.9 KiB
2.9 KiB
TDD 验证计划 — K8s 管理功能
每个模块实现前先写验证用例,实现后必须跑通,不能只编译通过。
通用验证流程
# 1. 重建后端镜像
cd /srv/aiops && docker-compose up -d --build backend
# 2. 等待 healthy
sleep 10 && docker ps --format '{{.Names}} {{.Status}}' | grep aiops-backend
# 3. 获取 JWT Token
TOKEN=$(curl -s http://127.0.0.1:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"CHANGE_ME"}' | jq -r '.data.token')
# 4. 验证 API
curl -s http://127.0.0.1:8080/api/v1/kubernetes-clusters \
-H "Authorization: Bearer $TOKEN" | jq '.'
M1: SyncCluster metrics 采集
验证用例
# U1: 同步前 — 确认 DB 里 cpu_usage 为 0
docker exec aiops-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" aiops \
-e "SELECT name, cpu_usage, memory_usage FROM kubernetes_nodes WHERE cluster_id=1"
# U2: 触发同步
curl -X POST http://127.0.0.1:8080/api/v1/kubernetes-clusters/1/sync \
-H "Authorization: Bearer $TOKEN"
# U3: 同步后 — 确认 cpu_usage/memory_usage 非零
docker exec aiops-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" aiops \
-e "SELECT name, cpu_usage, memory_usage FROM kubernetes_nodes WHERE cluster_id=1"
# 期望: cpu_usage > 0 AND memory_usage > 0
# U4: 集群详情页 API — 无硬编码
curl -s http://127.0.0.1:8080/api/v1/kubernetes-clusters/1 \
-H "Authorization: Bearer $TOKEN" | jq '.data.node_count, .data.pod_count'
# 期望: node_count=2, pod_count>0
# U5: 前端构建无报错
cd /srv/aiops/frontend && npm run build 2>&1 | tail -5
# 期望: vite build 成功
通过标准
- U1: 同步前 cpu_usage=0
- U2: 同步 API 200
- U3: 同步后 cpu_usage>0
- U4: 集群计数正确
- U5: 前端构建成功
M2: Pod Metrics
验证用例
# 同步后 Pod 列表含 CPU/内存
curl -s "http://127.0.0.1:8080/api/v1/kubernetes-clusters/1/pods" \
-H "Authorization: Bearer ***" | jq '.data[0]'
# 期望: 含 cpu_usage_m / mem_usage_mi 字段
通过标准
- Pod 列表 API 返回 cpu_usage_m / mem_usage_mi 字段
- 前端 Pod 列表表格显示 CPU/内存列(KubernetesWorkloads + NamespaceResourcePage)
- 17 个 Pod 全部有真实 metrics 数据
M3: Pod 文件上传
验证用例
# 上传文件
echo "test content" > /tmp/test-upload.txt
curl -X POST "http://127.0.0.1:8080/api/v1/kubernetes/1/namespace/devops/pods/aiops-xxx/files/upload?path=/tmp&container=aiops" \
-H "Authorization: Bearer ***" \
-F "file=@/tmp/test-upload.txt"
# 期望: 200 + 文件出现在列表中
通过标准
- 上传 API 返回 200 + verify 字段匹配文件大小
- 文件列表 (ls) 能看到上传的文件
- ExecInPod 使用 WebSocket channel.k8s.io 协议(不再用 SPDY raw HTTP)
- BusyBox ls 解析兼容(Mon DD HH:MM 格式)