ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

OpenCost 入门与实践:Kubernetes 与多云成本监控及 MCP Server 智能接入指南 OpenCost 入门与实践Kubernetes 与多云成本监控及 MCP Server 智能接入指南【免费下载链接】opencostCost monitoring for Kubernetes workloads and cloud costs项目地址: https://gitcode.com/GitHub_Trending/op/opencostOpenCost 是面向 Kubernetes 工作负载与多云支出的开源成本监控工具提供集群内资源分配Allocation与云端资产Asset的实时、历史成本可见性。本文以仓库根目录 README.md 为主线系统讲解 OpenCost 的安装方式、功能矩阵并重点展开其内置的 MCPModel Context ProtocolServer——如何让 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-premKubernetes 集群集群内资源分配覆盖 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 的 MCPModel Context ProtocolServer 为 AI Agent 提供标准化的成本分配与资产数据访问接口。它是本仓库 README 中篇幅最大、最值得深入的功能模块以下从设计原则、部署配置、客户端接入到源码实现逐层展开。设计原则与关键特性默认关闭Opt-inMCP 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.enabledtrue # 通过端口转发访问 MCP Server示例 kubectl port-forward svc/opencost 8081:8081Helm 配置汇总MCP Server 在 Helm Chart 中默认禁用。常见配置项如下配置命令说明默认helm install opencost opencost/opencostMCP 默认关闭启用--set opencost.mcp.enabledtrue在 8081 端口启用 MCP Server自定义端口--set opencost.mcp.port9091使用不同端口调试模式--set opencost.mcp.extraEnv.MCP_LOG_LEVELdebug开启调试日志自定义配置的完整示例# 启用 MCP Server helm install opencost opencost/opencost \ --set opencost.mcp.enabledtrue # 自定义 MCP 端口 helm install opencost opencost/opencost \ --set opencost.mcp.port9091 # 开启调试日志 helm install opencost opencost/opencost \ --set opencost.mcp.extraEnv.MCP_LOG_LEVELdebugMCP 客户端配置配置你的 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、30maggregate否聚合属性如namespace、pod、nodestep否解析步长大小accumulate否是否随时间累积share_idle否是否分摊空闲成本include_idle否是否包含空闲资源get_asset_costs获取资产成本数据包括节点、磁盘、负载均衡器等。参数必填说明window是时间窗口如7d、1h、30mget_cloud_costs获取云成本数据支持提供商、服务、区域过滤。参数必填说明window是时间窗口如7d、1h、30maggregate否聚合属性如provider、service、regionaccumulate否时间累积day、week、monthprovider否按云提供商过滤如aws、gcp、azureservice否按服务过滤如ec2、compute、s3category否按类别过滤如compute、storage、networkregion否按区域过滤如us-west-1、us-central1accountID否按账户 ID 过滤get_efficiency获取资源效率指标包含规格建议rightsizing与成本节约分析。参数必填说明window是时间窗口如7d、1h、30maggregate否聚合属性如pod、namespace、controllerfilter否分配数据的过滤表达式buffer_multiplier否建议缓冲倍数默认 1.2即 20% 余量step否查询步长如1h、6h更小的步长通过分批处理大窗口降低峰值内存但可能增加查询时间/请求数支持的资产类型Node计算实例含 CPU、RAM、GPU 详情Disk存储卷含用量与成本分解LoadBalancer负载均衡实例含 IP 与私有状态Network网络相关成本与用量Cloud云服务成本含信用credit信息ClusterManagementKubernetes 集群管理成本。示例用法配置完成后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包含必填的QueryType与Window字段并通过validate:required,oneofallocation asset cloudcost efficiency做结构校验杜绝非法类型进入处理流程。不同查询类型携带各自的参数结构AllocationParams、AssetParams、CloudCostParams、EfficiencyParams。请求处理主流程ProcessMCPRequest是 MCP Server 的核心入口其流程为校验请求通过validator校验QueryType与Window等必填字段查询分发根据QueryType分发到对应的QueryAllocations、QueryAssets、QueryCloudCosts、QueryEfficiency浮点净化调用sanitizeNonFiniteFloats将计算结果中的 NaN/±Inf 替换为 0——因为 MCP SDK 使用encoding/json序列化工具输出而上游成本计算可能产生非有限浮点数如 0/0 分解或开销比例若不清理会导致整个工具调用失败构造响应包装Data与QueryInfo含随机生成的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 的CPUCoreHours、GPUCount、Discount、Preemptible及 CPU/RAM 分解Disk 的StorageClass、ClaimName、ByteHoursUsed等。QueryCloudCosts需要 CloudCost Querier未配置时返回错误提示检查 cloud-integration.json。它构建cloudcost.QueryRequest将provider、service、category、accountID、invoiceEntityID、labels等参数转换为过滤表达式并以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_PORTMCP 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_total、generation_tokens_total、prefill/decode 时序、KV 缓存命中结合 OpenCost 分配层的 GPU/CPU/RAM/共享基础设施成本在allocation与usage两种成本口径下计算混合及区分输入/输出的每百万 token 成本并通过 Prometheus gauge 指标与/inferenceCost/total、/inferenceCost/timeseries两个 REST API 对外提供。启用方式为设置INFERENCE_COST_ENABLEDtrue。完整的环境变量表、指标语义、成本计算示例与故障排查请阅读 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),仅供参考
返回列表