2. Kubecost 核心架构:组件概览、数据采集管道、成本分配模型与集成关系
理解 Kubecost 的核心架构是实施 eBPF 配额校准与高风险变更治理的基础。本章将拆解 Kubecost 的四大核心模块:组件构成、数据采集管道、成本分配模型,以及它与 Prometheus/Grafana 的集成方式。
2.1 Kubecost 组件概览
Kubecost 采用微服务架构,主要组件包括以下五个核心服务:
| 组件名称 | 功能职责 | 关键端口/协议 |
|---|---|---|
| cost-model | 核心成本计算引擎,负责资源定价、分摊与分配 | 9001 (HTTP), 9003 (gRPC) |
| kubecost-prometheus | 内置 Prometheus 实例,存储指标与成本数据 | 9090 (HTTP) |
| kubecost-cost-analyzer | 前端 UI 与 API 网关,提供仪表盘与告警 | 9090 (前端), 9001 (API) |
| network-costs | 基于 eBPF 的网络流量成本采集器(DaemonSet) | 9001 (指标暴露) |
| kubecost-scheduler | 定时任务调度器,执行数据聚合与清理 | — |
架构要点: network-costs 组件以 DaemonSet 方式运行在每个节点上,利用 eBPF 程序捕获 Pod 粒度的网络流量,这是实现配额校准的关键数据源。在后续章节中,我们将基于此组件校准资源配额。
2.2 数据采集管道
Kubecost 的数据采集管道分为三个层次,从底层指标采集到上层成本聚合:
- 指标采集层:Kubecost 通过 Prometheus 的
kube-state-metrics、cadvisor和node-exporter采集集群资源使用数据。同时,network-costs组件通过 eBPF 程序捕获网络流量指标。 - 成本计算层:
cost-model从 Prometheus 拉取原始指标,结合云供应商定价(AWS/GCP/Azure 价目表)或自定义定价,计算出 Pod、Deployment、Namespace 粒度的成本。 - 聚合与存储层:计算结果写回 Prometheus 的自定义指标(如
kubecost_pod_cost),同时由scheduler执行每日/每小时的聚合任务,生成历史成本数据。
eBPF 采集关键指标:
kubecost_network_internet_egress_cost— 互联网出口流量成本kubecost_network_region_egress_cost— 跨区域出口流量成本kubecost_network_zone_egress_cost— 跨可用区出口流量成本kubecost_network_cross_cluster_cost— 跨集群流量成本
2.3 成本分配模型
Kubecost 采用按比例分摊的成本分配模型,核心原则如下:
| 资源类型 | 分配依据 | 分摊粒度 |
|---|---|---|
| CPU | 实际使用量(毫核) vs 请求量 | 容器 → Pod → Deployment → Namespace |
| 内存 | 实际使用量(MiB) vs 请求量 | 容器 → Pod → Deployment → Namespace |
| 存储(PV) | 声明容量与使用量 | PVC → Pod → Namespace |
| 网络流量 | eBPF 捕获的字节数 + 目的地分类 | Pod → Deployment → Namespace |
| GPU | GPU 分配数量与使用时长 | Pod → Namespace |
成本分配公式(以 CPU 为例):
Pod_CPU_Cost = (Pod_CPU_Usage / Namespace_CPU_Usage) × Namespace_CPU_Total_Cost
配额校准关键点: 默认情况下,Kubecost 使用 请求量(Requests) 作为分配基准。当 Pod 实际使用量远低于请求量时,会导致成本虚高。eBPF 配额校准的核心目标是将分配基准从“请求量”切换为“实际使用量”,从而暴露资源浪费。
2.4 与 Prometheus / Grafana 的集成关系
Kubecost 与 Prometheus、Grafana 的集成是双向且紧密的:
- Prometheus 作为数据后端:Kubecost 依赖 Prometheus 存储所有原始指标和计算后的成本指标。Kubecost 内置了一个 Prometheus 实例,但也支持对接外部 Prometheus。
- Grafana 作为可视化扩展:Kubecost 提供预置的 Grafana 仪表盘模板,用户可以通过 Grafana 创建自定义的成本视图、告警规则和趋势分析。
- 数据流路径:
kube-state-metrics+cadvisor+network-costs→ Prometheus →cost-model→ Prometheus(写入成本指标) → Grafana / Kubecost UI。
2.5 集成配置示例
以下是一个对接外部 Prometheus 的 Kubecost 配置片段(values.yaml):
global:
prometheus:
enabled: false # 禁用内置 Prometheus
fqdn: http://prometheus.monitoring.svc.cluster.local:9090
queryServicePort: 9090
networkCosts:
enabled: true # 启用 eBPF 网络成本采集
config:
services:
- name: aws
region: us-east-1
pricingSource: "aws-pricing-api"
集成最佳实践: 在生产环境中,建议使用外部 Prometheus 以避免数据冗余。同时,确保
network-costs 的 eBPF 程序在节点上具有 SYS_ADMIN 或 BPF 权限,否则网络流量采集将失败。