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 图展示了完整的成本映射链路。
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 图展示存储成本映射的完整流程:
3.6 实践建议:成本映射配置清单
在实施成本分摊前,请确认以下配置项已就绪:
- 资源 Requests 设置:所有生产 Pod 必须设置 CPU 和内存的 Requests,否则分摊基准缺失。
- Namespace 标签标准化:每个 Namespace 绑定
cost-center、environment、team标签。 - 存储类标签映射:为每个 StorageClass 定义单价标签,如
cost-per-gib-month: 0.10。 - Metrics Server 部署:用于采集 Pod 实际使用量,支持 Usage 分摊模型。
- 成本分摊工具集成:推荐使用 Kubecost、OpenCost 或云厂商原生工具(如 AWS Cost Explorer for EKS)。
关键公式总结:
Pod 成本 = (CPU 请求量 / 节点 CPU 总量) × 节点实例费 × 运行时长 + (内存请求量 / 节点内存总量) × 节点实例费 × 运行时长 + 存储成本
Namespace 成本 = Σ(Pod 成本) + 共享成本分摊(控制面、网络、监控等)
Pod 成本 = (CPU 请求量 / 节点 CPU 总量) × 节点实例费 × 运行时长 + (内存请求量 / 节点内存总量) × 节点实例费 × 运行时长 + 存储成本
Namespace 成本 = Σ(Pod 成本) + 共享成本分摊(控制面、网络、监控等)