news 2026/9/17 3:27:23

OpenCost 入门与实践:Kubernetes 与多云成本监控及 MCP Server 智能接入指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCost 入门与实践:Kubernetes 与多云成本监控及 MCP Server 智能接入指南

OpenCost 入门与实践:Kubernetes 与多云成本监控及 MCP Server 智能接入指南

【免费下载链接】opencostCost monitoring for Kubernetes workloads and cloud costs项目地址: https://gitcode.com/GitHub_Trending/op/opencost

OpenCost 是面向 Kubernetes 工作负载与多云支出的开源成本监控工具,提供集群内资源分配(Allocation)与云端资产(Asset)的实时、历史成本可见性。本文以仓库根目录 README.md 为主线,系统讲解 OpenCost 的安装方式、功能矩阵,并重点展开其内置的 MCP(Model Context Protocol)Server——如何让 AI Agent 通过标准化接口查询成本分配、资产与云成本数据,最后结合 pkg/mcp/server.go 等源码剖析底层实现原理。读完本文,你将能独立完成 OpenCost 的 Helm 部署、开启并配置 MCP Server、接入 MCP 客户端(如 Cursor),并理解成本查询的完整调用链路。

OpenCost 是什么

OpenCost 为团队提供当前与历史的 Kubernetes 及云支出、资源分配可见性。其成本模型在多应用、多团队、多部门并存的 Kubernetes 环境中提供成本透明度,同时覆盖多云提供商的云成本。项目由 Kubecost 最初开发并开源,采用规范(Specification)+ Go 语言实现的组合形态:规范定义于 spec/,最新版本为 spec/opencost-specv01.md,是厂商中立的、面向 Kubernetes 环境实现 OpenCost 监控的需求基线;Web UI 则托管在独立的 opencost-ui 仓库。

核心功能矩阵

  • 实时成本分配:按集群、节点、命名空间、控制器类型(Controller Kind)、控制器、服务或 Pod 维度进行成本归因;
  • 多云成本监控:覆盖 AWS、Azure、GCP 上的全部云服务;
  • 动态按需定价:通过集成 AWS、Azure、GCP 的计费 API 获取 Kubernetes 资产的按需价格;
  • 本地集群支持:通过自定义 CSV 定价支持本地(on-prem)Kubernetes 集群;
  • 集群内资源分配:覆盖 CPU、GPU、内存、持久卷(PV)等集群内 K8s 资源;
  • Prometheus 导出:通过/metrics端点将定价数据导出到 Prometheus;
  • 碳成本:提供云资源的碳排放估算;
  • MCP 支持:内置 MCP Server,供 AI Agent 查询成本数据(默认关闭、按需开启);
  • AI 推理成本追踪:面向基于 vLLM(含 llm-d 及兼容部署)的推理工作负载,提供每百万 token 成本(输入/输出)、KV 缓存修正定价、共享基础设施归因,以及 REST API 与 Prometheus 指标,详见 docs/inference-cost-tracking.md;
  • 外部成本接入:通过 OpenCost Plugins 支持 Datadog 等外部成本;
  • 自由开源:基于 Apache 2.0 协议分发,见 LICENSE。

快速开始:Helm 安装

OpenCost 目前仅通过官方 Helm Chart 安装与管理,独立的 Kubernetes manifest 文件已被移除,所有安装与升级请一律使用 Helm。

在任意 Kubernetes 1.20+ 集群上快速安装:

helm repo add opencost https://opencost.github.io/opencost-helm-chart helm repo update helm install opencost opencost/opencost

面向分片 Prometheus 用户的提示:如果你以分片(HA)方式运行 Prometheus,请将PROMETHEUS_SERVER_ENDPOINT设置为全局查询端点(如 Thanos Query、Cortex 或 Mimir)。若只指向单个 Prometheus Pod,可能导致导出结果不完整或间歇性缺失。更多细节可参考仓库内 PROMETHEUS.md。

安装完成后,OpenCost 对外暴露的核心使用入口包括:

  • Cost APIs/allocation/assets等成本查询接口;
  • CLI / kubectl cost:命令行成本查看工具;
  • Prometheus Metrics/metrics端点导出成本指标;
  • User Interface:基于 opencost-ui 的 Web 界面;
  • AI 推理成本追踪:docs/inference-cost-tracking.md。

深入 MCP Server:让 AI Agent 查询成本数据

OpenCost 的 MCP(Model Context Protocol)Server 为 AI Agent 提供标准化的成本分配与资产数据访问接口。它是本仓库 README 中篇幅最大、最值得深入的功能模块,以下从设计原则、部署配置、客户端接入到源码实现逐层展开。

设计原则与关键特性

  • 默认关闭(Opt-in):MCP Server 在所有 OpenCost 部署中默认禁用,以最小化攻击面,必须显式开启;
  • 完全可控:用户可自由启用、配置端口与各项设置;
  • Allocation 查询:支持过滤与聚合的成本分配数据查询;
  • Asset 查询:访问节点、磁盘、负载均衡器等资产的详细信息;
  • Cloud Cost 查询:支持按提供商、服务、区域过滤的云成本查询;
  • HTTP 传输:使用 HTTP 与 MCP 客户端可靠通信;
  • 配置简单:通过标准环境变量即可启用;
  • Helm 集成:内置于官方 Helm Chart,便于生产部署。

快速开始

开发模式:Tilt
# 克隆并启动带 MCP Server 的 OpenCost # 可能还需要克隆 opencost-ui 与 opencost-helm-charts 仓库 # 确保克隆的仓库与 opencost 位于同一父级目录下 git clone https://github.com/opencost/opencost.git cd opencost tilt up

默认配置下,UI 与 Prometheus 都运行在 9090 端口,如需同时访问两者,可能需要端口转发到非默认端口。

关于 Tilt 配置(云成本):仓库根目录的 tilt-values.yaml 包含额外的环境变量,用于在开发环境中启用 Cloud Cost 摄取:

# tilt-values.yaml (excerpt) opencost: exporter: extraEnv: CLOUD_COST_ENABLED: "true" CLOUD_COST_CONFIG_PATH: "/var/cloud-integration/cloud-integration.json"
  • CLOUD_COST_ENABLED设为"true"以开启云成本摄取;
  • CLOUD_COST_CONFIG_PATH指向 Tilt 挂载的云集成文件(例如/var/cloud-integration/cloud-integration.json);
  • 开发过程中可按需调整tilt-values.yaml中的其他值。
生产模式:Helm
# 添加 OpenCost Helm 仓库 helm repo add opencost https://opencost.github.io/opencost-helm-chart helm repo update # 启用 MCP Server 部署(opt-in) helm install opencost opencost/opencost --set opencost.mcp.enabled=true # 通过端口转发访问 MCP Server(示例) kubectl port-forward svc/opencost 8081:8081

Helm 配置汇总

MCP Server 在 Helm Chart 中默认禁用。常见配置项如下:

配置命令说明
默认helm install opencost opencost/opencostMCP 默认关闭
启用--set opencost.mcp.enabled=true在 8081 端口启用 MCP Server
自定义端口--set opencost.mcp.port=9091使用不同端口
调试模式--set opencost.mcp.extraEnv.MCP_LOG_LEVEL=debug开启调试日志

自定义配置的完整示例:

# 启用 MCP Server helm install opencost opencost/opencost \ --set opencost.mcp.enabled=true # 自定义 MCP 端口 helm install opencost opencost/opencost \ --set opencost.mcp.port=9091 # 开启调试日志 helm install opencost opencost/opencost \ --set opencost.mcp.extraEnv.MCP_LOG_LEVEL=debug

MCP 客户端配置

配置你的 MCP 客户端(例如 Cursor)连接到 OpenCost MCP Server:

默认配置(端口 8081):

{ "mcpServers": { "opencost": { "type": "http", "url": "http://localhost:8081" } } }

自定义端口配置:

{ "mcpServers": { "opencost": { "type": "http", "url": "http://localhost:9091" } } }

Kubernetes 集群内部署:

{ "mcpServers": { "opencost": { "type": "http", "url": "http://opencost.opencost.svc.cluster.local:8081" } } }

外部访问(通过 LoadBalancer/Ingress):

{ "mcpServers": { "opencost": { "type": "http", "url": "http://your-opencost-domain.com:8081" } } }

可用 MCP 工具

MCP Server 为 AI Agent 提供以下工具:

get_allocation_costs

获取带过滤与聚合的成本分配数据。

参数必填说明
window时间窗口(如"7d""1h""30m"
aggregate聚合属性(如"namespace""pod""node"
step解析步长大小
accumulate是否随时间累积
share_idle是否分摊空闲成本
include_idle是否包含空闲资源
get_asset_costs

获取资产成本数据,包括节点、磁盘、负载均衡器等。

参数必填说明
window时间窗口(如"7d""1h""30m"
get_cloud_costs

获取云成本数据,支持提供商、服务、区域过滤。

参数必填说明
window时间窗口(如"7d""1h""30m"
aggregate聚合属性(如"provider""service""region"
accumulate时间累积("day""week""month"
provider按云提供商过滤(如"aws""gcp""azure"
service按服务过滤(如"ec2""compute""s3"
category按类别过滤(如"compute""storage""network"
region按区域过滤(如"us-west-1""us-central1"
accountID按账户 ID 过滤
get_efficiency

获取资源效率指标,包含规格建议(rightsizing)与成本节约分析。

参数必填说明
window时间窗口(如"7d""1h""30m"
aggregate聚合属性(如"pod""namespace""controller"
filter分配数据的过滤表达式
buffer_multiplier建议缓冲倍数(默认 1.2,即 20% 余量)
step查询步长(如"1h""6h");更小的步长通过分批处理大窗口降低峰值内存,但可能增加查询时间/请求数

支持的资产类型

  • Node:计算实例,含 CPU、RAM、GPU 详情;
  • Disk:存储卷,含用量与成本分解;
  • LoadBalancer:负载均衡实例,含 IP 与私有状态;
  • Network:网络相关成本与用量;
  • Cloud:云服务成本,含信用(credit)信息;
  • ClusterManagement:Kubernetes 集群管理成本。

示例用法

配置完成后,AI Agent 可以这样查询成本数据:

// 获取最近 7 天的成本分配 const allocation = await mcpClient.callTool('get_allocation_costs', { window: '7d', aggregate: 'namespace,node' }); // 获取最近 24 小时的资产成本 const assets = await mcpClient.callTool('get_asset_costs', { window: '1d' }); // 获取 AWS EC2 在 us-west-1 的云成本 const cloudCosts = await mcpClient.callTool('get_cloud_costs', { window: '7d', aggregate: 'service', provider: 'aws', service: 'ec2', accumulate: 'day', filter: 'regionID:"us-west-1"' }); // 获取效率指标与规格建议 const efficiency = await mcpClient.callTool('get_efficiency', { window: '7d', aggregate: 'namespace,controller', step: '6h', buffer_multiplier: 1.2 });

源码级剖析:MCP Server 的实现原理

MCP Server 的实现集中在 pkg/mcp/server.go,下面结合该文件与相关模块,梳理请求从进入到返回的完整链路。

查询类型与请求模型

QueryType定义了四种查询类型,与 MCP 工具一一对应:

  • allocation— 成本分配查询;
  • asset— 资产查询;
  • cloudcost— 云成本查询;
  • efficiency— 效率与规格建议查询。

统一请求结构OpenCostQueryRequest包含必填的QueryTypeWindow字段,并通过validate:"required,oneof=allocation asset cloudcost efficiency"做结构校验,杜绝非法类型进入处理流程。不同查询类型携带各自的参数结构(AllocationParamsAssetParamsCloudCostParamsEfficiencyParams)。

请求处理主流程

ProcessMCPRequest是 MCP Server 的核心入口,其流程为:

  1. 校验请求:通过validator校验QueryTypeWindow等必填字段;
  2. 查询分发:根据QueryType分发到对应的QueryAllocationsQueryAssetsQueryCloudCostsQueryEfficiency
  3. 浮点净化:调用sanitizeNonFiniteFloats将计算结果中的 NaN/±Inf 替换为 0——因为 MCP SDK 使用encoding/json序列化工具输出,而上游成本计算可能产生非有限浮点数(如 0/0 分解或开销比例),若不清理会导致整个工具调用失败;
  4. 构造响应:包装DataQueryInfo(含随机生成的QueryID、时间戳、处理耗时)。

该函数接受context.Context,支持超时处理与取消。

各查询类型的实现要点

  • QueryAllocations:先通过opencost.ParseWindowWithOffset解析窗口,step默认取整个窗口时长;aggregate按逗号拆分;若传入filter字符串则用 allocation 过滤器解析器校验;最终调用costModel.QueryAllocation并转换为 MCP 响应格式。返回的Allocation包含 CPU/GPU/RAM/PV/网络/共享/外部成本的明细及对应的用量指标(CPU 核时、RAM 字节时等)。
  • QueryAssets:仅需window,通过costModel.ComputeAssets(start, end)计算资产集合,再按资产类型(Disk、Node、LoadBalancer、Network、Cloud、ClusterManagement)提取各自专属字段——例如 Node 的CPUCoreHoursGPUCountDiscountPreemptible及 CPU/RAM 分解,Disk 的StorageClassClaimNameByteHoursUsed等。
  • QueryCloudCosts:需要 CloudCost Querier(未配置时返回错误,提示检查 cloud-integration.json)。它构建cloudcost.QueryRequest,将providerservicecategoryaccountIDinvoiceEntityIDlabels等参数转换为过滤表达式,并以AND逻辑组合后交给过滤器解析器处理;查询使用env.GetMCPQueryTimeout()提供的超时上下文。响应中的CloudCostSummary汇总了净成本、摊销成本、开票成本,以及按提供商/服务/区域拆分的成本分解,还有按净成本加权的 Kubernetes 占比。
  • QueryEfficiency:默认按pod聚合,buffer_multiplier默认 1.2(即保留 20% 余量)。step未指定时由defaultEfficiencyStep按窗口时长自动缩放(≥30 天取 24h,≥7 天取 6h,≥1 天取 1h,否则取整个窗口),以控制大窗口查询的峰值内存;各 allocation set 通过 goroutine 并发计算效率指标。computeEfficiencyMetric以“实际用量 / 请求量”计算 CPU 与内存效率,推荐值 = 实际用量 × 缓冲倍数,并设最小下限(CPU 0.001 核、RAM 1MB),再基于请求量(而非用量)的单价估算推荐成本与节约额。测试用例见 pkg/mcp/server_test.go。

环境变量与集成点

MCP Server 的开关与端口由 pkg/env/costmodel.go 中的环境变量控制:

  • MCP_SERVER_ENABLED:是否启用 MCP Server(默认关闭);
  • MCP_HTTP_PORT:MCP HTTP 端口;
  • MCP_QUERY_TIMEOUT_SECONDS:云成本等查询的超时秒数,默认 60 秒(实现见 pkg/env/opencost.go 的GetMCPQueryTimeout)。

在 pkg/cmd/costmodel/costmodel.go 中,当MCPServerEnabled && Kubernetes 可用时调用StartMCPServer启动服务;若启用了 Cloud Cost,还会将 CloudCost Querier 注入 MCP Server,使get_cloud_costs可用。若 MCP 已启用但 Kubernetes 不可用,则会记录告警日志。此外,在 Kubernetes 未启用时,若MCP_SERVER_ENABLED未设置,会提示“MCP server 默认关闭,如需使用请设置该环境变量为 true”。

延伸:AI 推理成本追踪

README 中重点提及的AI inference cost tracking是 OpenCost 面向生成式 AI 场景的能力:它收集 vLLM 暴露的 token 指标(prompt_tokens_totalgeneration_tokens_total、prefill/decode 时序、KV 缓存命中),结合 OpenCost 分配层的 GPU/CPU/RAM/共享基础设施成本,在allocationusage两种成本口径下计算混合及区分输入/输出的每百万 token 成本,并通过 Prometheus gauge 指标与/inferenceCost/total/inferenceCost/timeseries两个 REST API 对外提供。启用方式为设置INFERENCE_COST_ENABLED=true。完整的环境变量表、指标语义、成本计算示例与故障排查,请阅读 docs/inference-cost-tracking.md。

结语

OpenCost 以“规范 + Go 实现”的开放形态,覆盖了从集群内资源分配到多云账单、从传统成本监控到 AI 推理成本追踪的完整成本观测链条;而 MCP Server 的加入,则让 AI Agent 能以标准协议直接消费这些成本数据,为智能化的成本治理、资源优化与自动报告打开了新的入口。从 README.md 出发,配合 spec/opencost-specv01.md、pkg/mcp/server.go 与 docs/inference-cost-tracking.md,你可以按需选择并落地 OpenCost 的每一项能力。

【免费下载链接】opencostCost monitoring for Kubernetes workloads and cloud costs项目地址: https://gitcode.com/GitHub_Trending/op/opencost

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 3:26:58

Matlab车牌识别系统:模板匹配法GUI实现与调试指南

简介:本资源是一套基于MATLAB实现的完整车牌识别系统,面向图像处理初学者、自动化专业学生及智能交通课程实践者,解决蓝底与黄底车牌的定位、分割与字符识别等核心问题。系统采用经典模板匹配法,集成GUI交互界面,含RGB…

作者头像 李华
网站建设 2026/9/17 3:26:20

RK3566/RK3568平台OS02N10摄像头Bring Up实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 3:24:14

xiaomusic Docker部署完整指南:小爱音箱用语音播放本地音乐

xiaomusic Docker部署完整指南:小爱音箱用语音播放本地音乐 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 早上六点四十分,你说了一句"…

作者头像 李华
网站建设 2026/9/17 3:20:41

局域网远程桌面全攻略:从RDP到RustDesk的搭建与排错

局域网远程桌面这件事,听起来简单,真弄起来一堆幺蛾子。我在公司管过机房,自己家里也常年摆着两三台电脑互控,踩过的坑快能写一本小册子了。这篇文章不打算只丢给你一个“工具推荐列表”,而是把局域网里远程桌面能走的…

作者头像 李华
网站建设 2026/9/17 3:18:16

vCenter证书过期修复实战:certificate-manager重置与密码恢复全指南

1. 写在动手前:vCenter证书过期到底是个什么坑先聊几句题外话。干虚拟化运维的朋友,多少都经历过这种场景:某天早上打开vSphere Client,登录页还能正常显示,输完账号密码点登录,结果直接报错“HTTP状态500”…

作者头像 李华