4. Kubecost核心视图与成本分配

Kubecost 的价值不在于“把账单显示出来”,而在于把云账单拆解到 Kubernetes 的工作负载、命名空间、团队和标签上,并让每一笔钱都能回答三个问题:谁花的、花在什么资源上、还能省多少。Kubecost 的五个核心视图正是围绕这三个问题分工协作的:Allocation 回答“谁花的”,Assets 回答“花在什么资源上”,Cloud Costs 回答“云厂商账单与集群账本是否对得上”,Savings 回答“还能省多少”,Health 回答“成本数据本身是否可信”。理解它们之间的数据流与归属关系,是后续成本治理工程的基础。

五个视图的定位与数据流关系

这五个视图并非彼此独立,而是共享同一套成本模型,只是从不同维度切分同一份数据。下图展示了它们之间的数据来源与职责分工:

Prometheus 指标 CPU / 内存 / GPU 请求量 云厂商账单 API AWS CUR / GCP Billing K8s API / 标签 Namespace / Label / Owner 定价配置 Spot / On-Demand Kubecost 统一成本模型(Cost Model) 按资源 × 时间 × 价格 计算,再按归属规则分摊 Allocation 按工作负载/命名空间 /标签分摊成本 谁花的? Assets 节点/磁盘/LB/GPU 等资产成本 花在什么上? Cloud Costs 云账单与集群账本 对账与差异分析 对得上吗? Savings 闲置资源/请求优化 /Spot 建议 还能省多少? Health 数据完整性/采集 状态/告警 数据可信吗? 成本归属分析闭环 Allocation 定位责任方 → Assets 定位资源类型 → Savings 定位优化点 → Cloud Costs 验证总额 → Health 校验数据质量

Allocation:把成本分摊到责任主体

Allocation 视图是日常使用频率最高的视图。它把集群总成本按 Namespace、Controller(Deployment/StatefulSet)、Label、Pod 等维度拆分,并区分 CPU、内存、GPU、网络、存储、共享开销 等成本项。Kubecost 默认采用“请求量(Request)”作为 CPU 和内存的分摊依据,而不是实际使用量,这一点非常关键:如果某个 Pod 申请了 2 核但只用了 0.3 核,它仍然按 2 核承担成本,这正是“请求浪费”能被 Savings 视图识别出来的原因。

在 Allocation 中做成本归属分析,通常按以下顺序操作:

  1. 选择聚合维度:在 Allocation 页面顶部将 Aggregate by 设为 namespace 或 label:team,先看整体分布。
  2. 过滤时间窗口:默认 7 天,建议与财务月结周期对齐,例如设为 Last 30 days。
  3. 下钻到 Controller:点击某个命名空间,展开到 Deployment 级别,定位具体工作负载。
  4. 查看成本构成:在右侧面板查看该工作负载的 CPU、内存、网络、存储占比,判断成本驱动因素。

一个典型的教学示例:假设 team-a 命名空间下有一个 api-server Deployment,3 副本,每副本请求 1 核 CPU、2Gi 内存。若节点单价折算为 CPU 0.04 美元/核·小时、内存 0.005 美元/Gi·小时,则单副本每小时成本约为 1×0.04 + 2×0.005 = 0.05 美元,3 副本 30 天约 0.05×3×720 = 108 美元。若实际 CPU 使用率仅 15%,则 Allocation 中该工作负载仍显示 108 美元,而 Savings 会提示可下调请求量以释放约 70% 的 CPU 成本。这个对比正是成本归属分析的核心价值。

Assets:从资源资产视角看成本

Assets 视图与 Allocation 互补。Allocation 是“按消费者切”,Assets 是“按资源对象切”。它列出集群中的节点、磁盘、负载均衡器、GPU、网络等资产,并给出每项资产的月度成本、使用率和关联的工作负载。当需要回答“这台节点为什么这么贵”“这块 PV 被谁在用”时,Assets 比 Allocation 更直接。

Assets 的典型用法包括:识别长期低利用率的节点、发现未被任何 Pod 挂载的 PV、检查 LoadBalancer 数量是否超出预期。例如在 Assets 中看到某节点 CPU 分配率仅 20%、内存分配率 35%,但月成本 420 美元,就可以结合 Allocation 确认该节点上运行的工作负载,再决定是否缩容或迁移。

Cloud Costs:账单对账与差异定位

Cloud Costs 视图接入云厂商账单(如 AWS CUR、GCP Billing Export),把云账单与 Kubecost 基于集群资源推算的成本做对比。两者之间的差异通常来自:未纳入集群的云资源(如 RDS、S3、NAT 网关)、云厂商折扣与信用额度、以及 Kubecost 定价配置与实际账单的偏差。

对账时建议关注三个指标:账单总额、集群内可归属成本、未归属差异。若差异持续超过 10%,应检查定价配置是否使用了正确的 Spot/On-Demand 比例,以及是否有命名空间未被 Kubecost 采集。Cloud Costs 还支持按云服务类型(EC2、EBS、S3)查看,便于把集群外成本也纳入整体成本视图。

Savings:把成本数据转化为优化动作

Savings 视图基于 Allocation 和 Assets 的数据,自动识别四类优化机会:闲置资源(如未挂载的 PV、空闲的 LoadBalancer)、请求量过大(Request 远高于实际使用)、未使用 Spot 实例、节点利用率过低。每条建议都会给出预估月度节省金额和涉及的工作负载。

使用 Savings 时不要直接照单全收。建议按“节省金额 × 实施风险”排序:先处理低风险高收益项(如删除未挂载 PV),再评估需要调整副本数或请求量的项。对于请求量优化,可结合 kubectl top pod 与历史 P95 使用量,把 Request 调整到合理水位,而不是简单按当前使用量设置。

Health:成本数据可信度的守门人

Health 视图检查 Kubecost 自身的数据采集与计算状态,包括 Prometheus 抓取是否正常、云账单是否成功导入、定价配置是否完整、是否有命名空间未被采集等。如果 Health 显示异常,Allocation 和 Savings 的数字就不可信。因此,在做任何成本归属分析之前,应先确认 Health 为绿色状态。

实践建议:把五个视图串成一条固定分析路径——先看 Health 确认数据可信,再用 Cloud Costs 核对总额,然后用 Allocation 定位责任方,用 Assets 确认资源类型,最后用 Savings 制定优化动作。这条路径能避免“只看 Allocation 就下结论”的常见误区。

成本归属分析的落地要点

要让成本归属真正可用,标签体系是前提。建议在部署时统一注入 team、env、app、cost-center 四类标签,并在 Allocation 中把 label:team 设为默认聚合维度。对于共享资源(如 Ingress Controller、监控组件),可通过 Kubecost 的共享成本分摊功能按命名空间请求量比例分摊,避免“公共成本无人认领”。

最后需要明确:Kubecost 给出的是基于配置和假设的估算成本,不是财务最终账单。它的价值在于提供可下钻、可归因、可行动的相对成本视图,帮助团队在日常工程决策中建立成本意识,而不是替代财务核算。把 Allocation 的责任归属、Assets 的资源视角、Cloud Costs 的对账能力、Savings 的优化建议和 Health 的数据校验结合起来,才能形成完整的成本治理闭环。