3. Kubernetes 资源模型与成本映射:Pod、Node、Namespace、Cluster 的资源计量单位

在 FinOps 实践中,Kubernetes 的资源模型是成本分摊的基石。只有准确理解 Pod、Node、Namespace、Cluster 四个层级的资源计量单位,以及 CPU、内存、存储的成本映射关系,才能将云账单中的基础设施费用合理分摊到业务单元。本章将系统梳理资源模型的层级结构、计量单位换算规则,以及成本映射的核心公式。

3.1 资源模型四层架构

Kubernetes 的资源抽象从下到上分为四个层级,每一层都有对应的成本归属逻辑:

层级 资源计量单位 成本归属对象 典型分摊粒度
Cluster 集群总数、控制面节点数 基础设施部门 / 共享成本池 按 Namespace 资源占比分摊
Node vCPU 核数、内存 GB、本地存储 GB 节点池 / 可用区 按 Pod 资源请求量(Requests)分摊
Namespace 命名空间配额(CPU/内存/存储) 业务团队 / 项目组 按 Pod 实际使用量(Usage)分摊
Pod CPU 毫核(m)、内存 MiB/GiB、临时存储 应用 / 微服务 按 Container 资源限制(Limits)分摊
FinOps 关键原则:成本分摊的精度取决于资源计量层级。Pod 级分摊最精确,但计算开销大;Namespace 级分摊是生产环境最常用的折中方案。

3.2 CPU/内存/存储的计量单位与换算

Kubernetes 使用标准化的资源单位,FinOps 工具必须正确换算才能与云厂商账单对齐。

3.2.1 CPU 单位

  • 核心单位:1 个 vCPU(虚拟 CPU 核心)在 Kubernetes 中表示为 1 或 1000m(毫核)。
  • 换算关系:1 vCPU = 1000m;0.5 vCPU = 500m。
  • 成本映射:云厂商按 vCPU 小时计费,例如 AWS c5.xlarge 实例单价为 $0.085/vCPU·小时。

3.2.2 内存单位

  • 基础单位:字节(Byte),Kubernetes 中常用 MiB(二进制兆字节)和 GiB(二进制吉字节)。
  • 换算关系:1 GiB = 1024 MiB;1 MiB = 1024 KiB。
  • 成本映射:云厂商按 GB·小时计费,注意云厂商使用十进制 GB(1 GB = 1000 MB),而 Kubernetes 使用二进制 GiB,换算时需乘以系数 1.024。

3.2.3 临时存储(Ephemeral Storage)

  • 计量单位:字节,Kubernetes 中同样使用 MiB/GiB。
  • 成本映射:临时存储通常包含在节点实例费用中,但超出节点本地 SSD 容量后会产生额外费用。建议使用 emptyDir 的 sizeLimit 字段限制 Pod 存储用量。
换算示例:某 Pod 请求 512 MiB 内存,云厂商账单按 GB·小时计费(1 GB = 1000 MB)。实际计费量 = 512 MiB ÷ 1024 × 1.024 = 0.512 GB。若单价为 $0.01/GB·小时,则每小时成本 = 0.512 × 0.01 = $0.00512。

3.3 成本映射关系:从 Pod 到 Cluster

成本映射的核心是将节点级费用(实例费、存储费、网络费)按资源消耗比例分摊到 Pod。以下 SVG 图展示了完整的成本映射链路。

Kubernetes 成本映射链路 Kubernetes 成本映射链路:从节点费用到 Pod 分摊 Cluster 层 控制面 + 共享成本 Node 层 实例费 + 系统开销 Namespace 层 配额管理 + 聚合 Pod 层 Requests / Limits 成本映射公式 Pod 成本 = Node 实例单价 × (Pod 资源请求量 / Node 总资源量) × 运行时长 Namespace 成本 = Σ(Pod 成本) + 共享成本分摊 关键指标说明 • Requests:Pod 保证的资源量,用于成本分摊基准 • Limits:Pod 最大可用资源量,用于超卖风险控制

3.4 成本分摊模型选择

根据 FinOps 成熟度,推荐以下三种分摊模型,按场景选择:

模型名称 分摊基准 适用场景 精度 计算复杂度
Requests 分摊 Pod 的 CPU/内存 Requests 资源预留型业务,稳定性优先 中 低
Usage 分摊 Pod 实际 CPU/内存使用量(Metrics Server) 弹性负载型业务,成本优化驱动 高 中
Limits 分摊 Pod 的 CPU/内存 Limits 安全合规要求高,防止超卖 低(可能高估) 低
避坑提示:不要直接使用 Limits 作为分摊基准,因为 Limits 通常远高于实际使用量,会导致成本虚高。生产环境建议以 Requests 为主、Usage 为辅的混合分摊策略。

3.5 存储成本映射

存储成本在 Kubernetes 中分为持久卷(PV)和临时存储两类,映射规则如下:

  • 持久卷(PV):按存储类(StorageClass)的单价 × 申请容量(GiB)× 时长。例如:SSD 存储类 $0.10/GiB·月,PVC 申请 100 GiB,则月成本 = $10。
  • 临时存储:包含在节点实例费中,但超出节点本地 SSD 容量后按云厂商标准收费。建议使用 ephemeral-storage 资源字段限制 Pod 用量。
  • 快照与备份:按快照大小 × 存储时长单独计费,需通过标签(Label)关联到 Namespace。

以下 SVG 图展示存储成本映射的完整流程:

Kubernetes 存储成本映射流程 Kubernetes 存储成本映射流程 PVC 申请 容量 + 存储类 PV 绑定 动态/静态供应 成本计算 单价 × 容量 × 时长 存储成本分摊规则 1. 按 PVC 的 Namespace 标签归属到业务团队 2. 共享存储(如 NFS)按 Pod 挂载比例分摊 3. 快照成本按源 PVC 归属,不单独分摊 4. 临时存储超出节点容量时,按 Pod 使用量额外计费

3.6 实践建议:成本映射配置清单

在实施成本分摊前,请确认以下配置项已就绪:

  1. 资源 Requests 设置:所有生产 Pod 必须设置 CPU 和内存的 Requests,否则分摊基准缺失。
  2. Namespace 标签标准化:每个 Namespace 绑定 cost-center、environment、team 标签。
  3. 存储类标签映射:为每个 StorageClass 定义单价标签,如 cost-per-gib-month: 0.10。
  4. Metrics Server 部署:用于采集 Pod 实际使用量,支持 Usage 分摊模型。
  5. 成本分摊工具集成:推荐使用 Kubecost、OpenCost 或云厂商原生工具(如 AWS Cost Explorer for EKS)。
关键公式总结:
Pod 成本 = (CPU 请求量 / 节点 CPU 总量) × 节点实例费 × 运行时长 + (内存请求量 / 节点内存总量) × 节点实例费 × 运行时长 + 存储成本
Namespace 成本 = Σ(Pod 成本) + 共享成本分摊(控制面、网络、监控等)