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 粒度的网络流量,这是实现配额校准的关键数据源。在后续章节中,我们将基于此组件校准资源配额。
Kubecost 核心组件架构 用户层 Kubectl / 浏览器 / API 客户端 服务层 cost-analyzer 前端 UI / API 网关 cost-model 成本计算引擎 scheduler 定时任务调度 数据层 Prometheus 指标存储与查询 network-costs eBPF 网络采集器 Grafana 可视化仪表盘 说明:network-costs 以 DaemonSet 运行,通过 eBPF 捕获 Pod 粒度网络流量,是配额校准的关键数据源

2.2 数据采集管道

Kubecost 的数据采集管道分为三个层次,从底层指标采集到上层成本聚合:

  1. 指标采集层:Kubecost 通过 Prometheus 的 kube-state-metrics、cadvisor 和 node-exporter 采集集群资源使用数据。同时,network-costs 组件通过 eBPF 程序捕获网络流量指标。
  2. 成本计算层:cost-model 从 Prometheus 拉取原始指标,结合云供应商定价(AWS/GCP/Azure 价目表)或自定义定价,计算出 Pod、Deployment、Namespace 粒度的成本。
  3. 聚合与存储层:计算结果写回 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。
Kubecost 数据采集与集成管道 kube-state-metrics 集群状态指标 cadvisor 容器资源使用 network-costs eBPF 网络流量 Prometheus 指标存储与查询 端口 9090 cost-model 成本计算引擎 端口 9001 写入成本指标 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 权限,否则网络流量采集将失败。