在ACK集群中,Pod作为最小的可部署单元,是衡量集群成本的关键因素。但不同Pod可能有不同的资源配置、调度策略和生命周期,导致其成本估算较为复杂。ACK提供一种通用性的成本数据模型定义和计算方法,帮您准确地衡量云上ACK集群的成本,并将成本分摊给不同维度(集群、命名空间、应用等)的业务单元。
相关概念
下表为本文涉及的概念及解释。
概念 | 说明 |
集群总成本 | 运行一个ACK集群所需的全部成本。 |
集群资产成本 | 集群下所有云资源账单的总和。 |
集群间接成本 | 管理ACK集群所需的额外费用或间接开销,例如集群管理费用。 |
集群分配成本 | 集群中已分配的空间按比例分摊集群资产成本时,分摊的成本数额。 |
集群闲置成本 | 集群中未被分配的空间按比例分摊集群资产成本,分摊的成本数额。 |
Pod分摊成本 | 一个Pod在特定周期内分摊集群资产成本的数额。 |
一个ACK集群的总成本包括集群资产成本和集群间接成本:集群总成本 = 集群资产成本 + 集群间接成本
。
集群资产成本可以进一步区分为集群分配成本和集群闲置成本:集群资产成本 = 集群分配成本 + 集群闲置成本
。
集群分配成本由Pod成本分摊确定,表示集群内所有Pod分摊的成本总和,是集群资产成本中已被分配的部分:集群分配成本 = Σ (集群下Pod分摊成本)
关系如下图所示。
成本数据模型
集群资产成本
一个ACK集群通常包含节点、负载均衡、磁盘等基础云资源,以及Prometheus、NAT网关等可选云资源。集群资产成本是集群关联云资源的账单总和。
集群自动创建的云资源:在ACK集群中,可以通过集群ID的唯一标签(
ack.aliyun.com:<集群ID>
)来拆分集群关联云资源的全部账单,在账单累加后得到集群的总资产成本。非集群自动创建的云资源:可以为这些云资源手动添加集群ID的资源标签,使其纳入集群资产成本统计范围。
Pod分摊成本
计算公式
Pod通常并不直接出账,需要从集群资产成本中按比例拆算Pod分摊的成本,从而准确聚合集群不同维度的业务账单。因此,计算一个Pod的分摊成本时,核心是计算一个Pod在集群中的成本占比。
Pod分摊成本 = Pod成本占比 * 集群资产成本
Pod成本占比是Pod模拟成本在待分摊总成本的占比。
Pod成本占比 = Pod模拟成本 / 待分摊总成本
Pod模拟成本由Pod模拟单价和时长决定。要计算一个Pod的模拟单价,需要考虑Pod上各资源(例如CPU、内存、GPU)的分配量以及资源单价。
Pod模拟成本 = Pod模拟单价 * 时长
Pod模拟单价 = Σ(资源单价 * 资源分配量 )
资源单价是决定Pod成本的核心因素,在不同场景可能存在多种单价定价方式。您可以直接从云服务商获取(已知资源单价),也可以自定义资源单价(未知资源单价)进行内部成本核算。
示例一:已知计算资源单价
例如,在常见的通过计算资源估算Pod成本的场景下,您可以参见以下公式完成Pod成本的分摊:
Pod成本占比 = Pod模拟成本 / Σ(集群下Node成本)
Pod模拟成本 = (CPU单价 * CPU分配量 + 内存单价 * 内存分配量 + GPU单价 * GPU分配量 )* 时长
示例二:未知计算资源单价
对于未直接提供计算资源单价的场景(例如阿里云ECS直接提供了节点总价格),需要使用权重分摊模型拆分计算。权重分摊的方式给模型自定义带来更多灵活度。
Pod计算资源的单价 = 资源权重 * 节点单价 / 节点资源总量
Σ(资源权重) = 1
此时,资源权重是决定资源价值的核心因素。ACK默认使用资源调度水位来决定该资源在集群中的“昂贵”程度,即根据资源调度水位的占比确定资源的推荐权重。您也可以根据实际情况自定义权重数值。
命名空间、应用成本
参见前文完成Pod分摊成本的计算后,您可以通过聚合Pod分摊成本,进一步计算命名空间、应用(工作负载)的成本。
命名空间是一组具有相同字段的Pod的聚合。
命名空间成本 = Σ(命名空间下Pod的分摊成本)
工作负载是命名空间下具有相同Label的Pod的聚合。
工作负载成本 = Σ(相同Label Pod的分摊成本)
相关文档
您可以通过HTTP API命令查看上报数据,便于您基于成本数据进行二次开发,请参见通过API获取成本数据概述。
您可以基于集群调度水位估算Pod成本,包括单资源(CPU、内存)估算和权重混合(CPU-内存混合)的资源估算,请参见成本估算策略介绍。