feat(k8s): M2 Pod Metrics 详情页接入 — ListPods 注入 metrics

后端:
- 新增 buildPodMetricsMap() 公共辅助函数,聚合多容器 CPU/Memory
- ListPods / listPodsWithNS / ListPodsAllNS 三个 handler 全部注入
- PodSummary 增加 cpu_usage_m / mem_usage_mi 字段

前端:
- KubernetesWorkloads Pod 表格增加 CPU/内存列
- NamespaceResourcePage Pod 表格增加 CPU/内存列

验证:
- 17 个 Pod 全部返回真实 metrics (argocd/demo-jar)
- curl /kubernetes-clusters/1/pods → cpu_usage_m='2m' mem_usage_mi='61Mi'

文档:
- ROADMAP M1→done, M2→done, 验收标准全部勾选
- TDD_PLAN M2 通过标准补充
- PROJECT_EVALUATION P0 缺失项移除
This commit is contained in:
attacker committed 2026-06-23 00:54:54 +08:00
1 parent 8c272a6fa6
commit 4f1ffd1275
27 files changed
+2617 -352

No files matched your search

+188
View File
@@ -0,0 +1,188 @@
package models
import "time"
// ============================================
// DeployTool 工具配置(懒加载/预装/禁用)
// 按 deploy_ 前缀,与 PipelineRepo/Registry 同属发布配置域
// ============================================
// ToolInstallMethod 安装方式
type ToolInstallMethod string
const (
ToolPreinstall ToolInstallMethod = "preinstall" // 预装在 Dockerfile 中
ToolLazy ToolInstallMethod = "lazy" // 懒加载:首次使用时自动下载
ToolDisabled ToolInstallMethod = "disabled" // 禁用:不安装
)
// ToolStatus 安装状态
type ToolStatus string
const (
ToolNotInstalled ToolStatus = "not_installed" // 未安装
ToolInstalling ToolStatus = "installing" // 安装中
ToolInstalled ToolStatus = "installed" // 已安装
ToolFailed ToolStatus = "failed" // 安装失败
)
// DeployTool 工具配置表
type DeployTool struct {
ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"`
Name string `gorm:"type:varchar(64);uniqueIndex;not null;comment:工具名称(英文标识)" json:"name"`
DisplayName string `gorm:"type:varchar(128);not null;comment:显示名称" json:"display_name"`
Description string `gorm:"type:varchar(256);comment:工具描述" json:"description,omitempty"`
Category string `gorm:"type:varchar(32);default:other;comment:分类: k8s/build/deploy/automation" json:"category"`
InstallMethod ToolInstallMethod `gorm:"type:varchar(16);default:lazy;comment:安装方式: preinstall/lazy/disabled" json:"install_method"`
CheckCommand string `gorm:"type:varchar(256);comment:检测命令(如 kubectl version --client)" json:"check_command,omitempty"`
BinaryName string `gorm:"type:varchar(64);comment:二进制文件名(如 kubectl/mvn/node)" json:"binary_name,omitempty"`
InstallPath string `gorm:"type:varchar(256);comment:安装目标路径(如 /usr/local/bin)" json:"install_path,omitempty"`
DownloadURL string `gorm:"type:varchar(512);comment:下载地址模板(支持 {version})" json:"download_url,omitempty"`
VersionURL string `gorm:"type:varchar(512);comment:版本查询地址(如 stable.txt)" json:"version_url,omitempty"`
InstallScript string `gorm:"type:text;comment:自定义安装脚本(Shell)" json:"install_script,omitempty"`
DefaultVersion string `gorm:"type:varchar(32);comment:默认版本号" json:"default_version,omitempty"`
Status ToolStatus `gorm:"type:varchar(16);default:not_installed;comment:当前安装状态" json:"status"`
InstalledVer string `gorm:"type:varchar(128);comment:已安装版本号" json:"installed_version,omitempty"`
LastCheck *time.Time `gorm:"comment:最后检测时间" json:"last_check,omitempty"`
ErrorMsg string `gorm:"type:varchar(512);comment:安装失败原因" json:"error_msg,omitempty"`
Enabled bool `gorm:"default:true;comment:是否启用" json:"enabled"`
SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"`
CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"`
}
// TableName 表名
func (DeployTool) TableName() string {
return "deploy_tools"
}
// ============================================
// 预置工具定义(Seeder)
// ============================================
// PredefinedTools 返回系统预置的工具配置列表
func PredefinedTools() []DeployTool {
return []DeployTool{
{
Name: "kubectl",
DisplayName: "Kubectl",
Description: "Kubernetes 命令行工具,用于 K8s 集群交互",
Category: "k8s",
InstallMethod: ToolLazy,
BinaryName: "kubectl",
InstallPath: "/usr/local/bin/kubectl",
CheckCommand: "kubectl version --client --short 2>/dev/null || kubectl version --client 2>/dev/null",
VersionURL: "https://dl.k8s.io/release/stable.txt",
DownloadURL: "https://dl.k8s.io/release/{version}/bin/linux/amd64/kubectl",
DefaultVersion: "v1.32.0",
SortOrder: 1,
},
{
Name: "maven",
DisplayName: "Maven",
Description: "Java 项目构建工具,流水线 Java 构建阶段使用",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "mvn",
InstallPath: "/usr/local/bin/mvn",
CheckCommand: "mvn --version 2>/dev/null",
DownloadURL: "https://dlcdn.apache.org/maven/maven-3/{version}/binaries/apache-maven-{version}-bin.tar.gz",
VersionURL: "https://dlcdn.apache.org/maven/maven-3/",
DefaultVersion: "3.9.9",
InstallScript: `#!/bin/sh
# Maven lazy install — download & extract
MAVEN_VERSION="${TOOL_VERSION:-3.9.9}"
MAVEN_URL="https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
echo "[Maven] Downloading ${MAVEN_VERSION}..."
cd /tmp
curl -sL "$MAVEN_URL" -o maven.tar.gz
tar xzf maven.tar.gz
mkdir -p /usr/local/share
mv apache-maven-${MAVEN_VERSION} /usr/local/share/maven
ln -sf /usr/local/share/maven/bin/mvn /usr/local/bin/mvn
rm -f maven.tar.gz
echo "[Maven] Installed: $(mvn --version 2>&1 | head -1)"
`,
SortOrder: 2,
},
{
Name: "nodejs",
DisplayName: "Node.js + npm",
Description: "前端构建工具,流水线 npm install/build 阶段使用",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "node",
InstallPath: "/usr/local/bin/node",
CheckCommand: "node --version 2>/dev/null",
DownloadURL: "https://nodejs.org/dist/{version}/node-{version}-linux-x64.tar.xz",
VersionURL: "https://nodejs.org/dist/latest-v22.x/",
DefaultVersion: "v22.14.0",
InstallScript: `#!/bin/sh
# Node.js lazy install — download & extract
NODE_VERSION="${TOOL_VERSION:-v22.14.0}"
NODE_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"
echo "[Node.js] Downloading ${NODE_VERSION}..."
cd /tmp
curl -sL "$NODE_URL" -o node.tar.xz
tar xJf node.tar.xz
mkdir -p /usr/local/share
mv node-${NODE_VERSION}-linux-x64 /usr/local/share/node
ln -sf /usr/local/share/node/bin/node /usr/local/bin/node
ln -sf /usr/local/share/node/bin/npm /usr/local/bin/npm
ln -sf /usr/local/share/node/bin/npx /usr/local/bin/npx
rm -f node.tar.xz
npm config set registry https://registry.npmmirror.com
echo "[Node.js] Installed: $(node --version) / npm $(npm --version)"
`,
SortOrder: 3,
},
{
Name: "helm",
DisplayName: "Helm",
Description: "Kubernetes 包管理工具,Chart 部署使用",
Category: "k8s",
InstallMethod: ToolLazy,
BinaryName: "helm",
InstallPath: "/usr/local/bin/helm",
CheckCommand: "helm version --short 2>/dev/null",
VersionURL: "https://get.helm.sh/",
DownloadURL: "https://get.helm.sh/helm-{version}-linux-amd64.tar.gz",
DefaultVersion: "v3.16.0",
InstallScript: `#!/bin/sh
# Helm lazy install — download & extract
HELM_VERSION="${TOOL_VERSION:-v3.16.0}"
HELM_URL="https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz"
echo "[Helm] Downloading ${HELM_VERSION}..."
cd /tmp
curl -sL "$HELM_URL" -o helm.tar.gz
tar xzf helm.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
rm -rf helm.tar.gz linux-amd64
echo "[Helm] Installed: $(helm version --short 2>&1)"
`,
SortOrder: 4,
},
{
Name: "git",
DisplayName: "Git",
Description: "版本控制工具,流水线代码拉取使用",
Category: "build",
InstallMethod: ToolPreinstall,
BinaryName: "git",
InstallPath: "/usr/bin/git",
CheckCommand: "git --version 2>/dev/null",
SortOrder: 5,
},
{
Name: "docker-cli",
DisplayName: "Docker CLI",
Description: "Docker 命令行工具,流水线镜像构建/推送使用",
Category: "deploy",
InstallMethod: ToolPreinstall,
BinaryName: "docker",
InstallPath: "/usr/bin/docker",
CheckCommand: "docker --version 2>/dev/null",
SortOrder: 6,
},
}
}