利用 AWS 分摊成本分配数据提升 Amazon EKS 的成本可见性 云财务管理
提升 Amazon EKS 成本可见性
关键要点
增强的成本可见性:AWS 为 Amazon EKS 提供了细粒度的成本可见性,支持分析、优化和费用回收。分摊成本分配数据:允许用户根据 Kubernetes 应用对共享 EC2 CPU 和内存资源的消耗,将应用成本分配给各个业务单元和团队。全区域可用性:Split Cost Allocation Data 在所有 AWS 商业区域可用,除了中国区域,无需额外费用。复杂的监控挑战:用户在跟踪 Kubernetes 成本时面临的难题,以及现有监控机制的不足。开始使用:通过简单的两步过程即可启用“分摊成本分配数据”。我们很高兴地宣布,AWS Cost and Usage Reports (CUR) 已经为 Amazon Elastic Kubernetes Service (Amazon EKS) 提供了增强的成本可见性,这将帮助您分析、优化并回收 Kubernetes 应用的相关成本和使用情况。借助 AWS 分摊成本分配数据,客户现在可以根据 Kubernetes 应用对共享 EC2 CPU 和内存资源的消耗,将应用成本分配到各个业务单元和团队。分摊成本分配数据对所有 AWS 商业区域的客户不包括中国区域均可用,且不会产生额外费用。

监控和分配容器成本的挑战
Kubernetes 帮助客户自动管理、扩展和部署容器化应用。使用 Amazon EKS,客户可以使用一个托管服务,免去安装、操作和维护自己的 Kubernetes 控制平面的需求。然而,获取 Kubernetes 成本的精细可见性并不容易。这是因为传统的 FinOps 成本分配方法例如,将资源成本映射回团队或项目并不适用。您无法仅仅将一个资源例如 EC2 实例的成本分配给一个标签或标签,因为 EC2 实例可能同时运行多个容器,而每个容器可能支撑不同的应用。资源也可能与组织内不同的成本中心关联。客户希望对运行在 Amazon EKS 上、共享 AWS 资源如 Amazon EC2 实例的应用成本提供更细粒度的可见性。根据 CNCF 最新的微型调查报告,几乎一半49的受访者认为 Kubernetes 使用推动了云支出的增加。报告还指出,客户在成本监控方面存在差距,40的受访者表示他们仅仅是估算 Kubernetes 成本,而38的人没有监控机制。此外,报告还发现,19 的客户进行准确的费用展示,只有 2 的客户进行费用回收,而 38 的客户完全没有监控机制。
尽管客户可以使用 AWS Cost and Usage Reports 跟踪他们的 Kubernetes 控制平面和 EC2 成本,但他们需要更深入的见解,以准确跟踪按命名空间、集群、Pod 或组织实体例如团队或应用等进行的 Kubernetes 资源级成本。例如,为了确定某个特定 Pod 组所使用的资源,客户过去常常需要投资复杂的解决方案,以理解 Pod 级使用情况,并将其与 AWS Cost and Usage Reports 的 EC2 成本数据进行整合。容器的生命周期通常较短,并且按不同级别伸缩,因此资源使用情况随着时间的推移而波动,进一步增加了这一方程的复杂性。Amazon EKS 常在动态和多租户环境中使用,这需要专门的功能来实现准确的成本监控。
通过分摊成本分配数据获取细粒度的成本可见性
使用分摊成本分配数据,您现在可以轻松地根据 Kubernetes Pod 实际消耗的 CPU 和内存,分配 Amazon EC2 实例的成本。细粒度的容器级成本信息可以让您分析容器化应用的成本效益,并简化对业务实体的收费过程。
启用分摊成本分配数据后,它将扫描您在 Amazon EKS 集群中所有 Kubernetes Pod,并获取 Kubernetes 属性,如命名空间、节点、集群以及 Pod 的 CPU 和内存请求。分摊成本分配数据还将读取您的 Amazon Managed Service for Prometheus 工作区,以获取 Kubernetes CPU 和内存使用指标。然后,它会计算 Kubernetes Pod 级别的成本指标,例如分摊成本、未使用成本、实际使用和预留使用即资源请求,包括在折扣后的净成本指标,并将这些数据提供给您的 AWS Cost and Usage Report。
分摊成本分配数据将为某些 Kubernetes 属性创建新的成本分配标签。这些标签包括 awseksclustername、awseksnamespace、awseksnode、awseksworkloadtype、awseksworkloadname 和 awseksdeployment。有关这些标签的更多详细信息,请访问 理解分摊成本分配数据。
国外加速器下载开始使用分摊成本分配数据要启用“分摊成本分配数据”,您需完成简单的两步授权过程。
步骤 1:首先,作为付款账户的拥有者,您需要从 AWS Billing and Cost Management / AWS Cost Management 偏好页面选择“分摊成本分配数据”。您需要选择 Amazon Elastic Kubernetes Service,并有两个额外选项可供选择:
资源请求:仅支持根据 Kubernetes Pod CPU 和内存资源请求分配您的 EC2 成本。通过资源请求分配成本,可以激励应用团队仅按照需要配置资源。Amazon Managed Service for Prometheus:支持根据 Kubernetes Pod CPU 和内存资源请求以及实际利用率中的较高者分配您的 EC2 成本。这样可以确保每个应用团队仅根据实际使用情况付款。有关设置 Amazon Managed Service for Prometheus 工作区的相关设置请参见下面的部分。步骤 2:然后,您将在 AWS Billing and Cost Management 控制台的成本和用量报告偏好页面为新建或现有的 CUR 报告启用“分摊成本分配数据”。您也可以在 AWS Billing and Cost Management 控制台的数据导出页面为新建或现有的 CUR 20 报告启用“分摊成本分配数据”。我们建议包括资源 ID,并设置为每小时报告,以获取最细粒度的数据。
有关启用过程的详细信息,请访问 启用分摊成本分配数据。
启用后,报告将自动扫描整个合并账单家族所有属于成员账户的各个集群中的 Kubernetes Pod,并为当前月份开始准备细粒度的成本数据。24 小时内,您的 CUR 报告将准备好包含新的 EKS 成本和使用情况指标。
设置 Amazon Managed Service for PrometheusAmazon EKS 的分摊成本分配数据需要设置一个可观察性指标存储,以根据内存和 CPU 的实际使用情况来分配成本。要了解如何设置 Amazon Managed Service for Prometheus 工作区,请点击 这里。您可以通过以下两种方式将 EKS 监控数据转发到 Amazon Managed Service for Prometheus,以供分摊成本分配数据处理:
在 EKS 集群上设置一个 Prometheus 服务器,将数据远程写入 Amazon Managed Service for Prometheus 工作区。使用托管的 Amazon Managed Service for Prometheus 收集器。有关更多详细信息,请阅读文档 使用分摊成本分配数据与 Amazon Managed Service for Prometheus。
工作原理为了帮助您理解成本模型的工作原理,我们将首先解释一些关键术语和计算逻辑。EKS 的分摊成本分配数据收集每个与 EKS 集群相关联的 EC2 实例的计算和内存资源的请求和实际使用数据。只有在您选择参与 Amazon Managed Service for Prometheus 时,才会收集实际使用数据。如果您选择的是仅请求选项,则实际使用被视为0。然后,它根据请求量和使用量之间的较大值,计算每个 Kubernetes Pod 的分配 CPU 和内存数据。
由于多个 Kubernetes Pod 可以在单个 EC2 实例上运行,EKS 的分摊成本分配数据会计算该实例上所有 Pod 的分配 CPU 和内存。接着,它将计算一个分割使用比例,即每个 Kubernetes Pod 分配的 CPU 或内存与该 EC2 实例的整体 CPU 或内存之比。还将识别该实例上的未使用能力。
在将 EC2 实例的成本在所有 Kubernetes Pod 之间进行分摊时,分摊成本分配数据会总计分摊成本,然后根据 POD 的实例利用率按比例重新分配未使用的成本。
让我们通过一个示例来展示这一过程如何在实践中运作。
示例:多个 Kubernetes Pod 的 EC2 成本分配现在,插入一些数字,展示如何将 EC2 实例的成本分配在多个运行在该实例上的 Kubernetes Pod 上。
在下表中,您可以看到在单个的 m7g2xlarge EC2 实例具有 8 vCPU 和 32GB RAM上运行的 EKS 集群,共同运行 4 个 Kubernetes Pod,分布在一个 Amazon EKS 集群中的 2 个命名空间中。我们将使用 m7g2xlarge 的按需定价进行演示,但请注意分摊成本分配数据将使用 EC2 实例的摊销成本包括 Savings Plan 或预留实例的前期和部分前期费用。分摊成本分配数据根据 91 的比例使用 CPU 和内存的相对单位权重。这是根据 AWS Fargate 定价的 vCPU 与内存的平均相对价格推导得出的。通过这些权重,它计算每个 vCPU 小时的成本和每个 GB 小时的成本分别为 0029 和 0003。
在下面的表格中列出了 4 个 Kubernetes Pod 的 vCPU 和内存请求与实际使用情况。Pod 2 使用的 CPU 和内存超过了请求的数量,因为它没有配置限制。如前所述,分摊成本分配数据基于请求和实际使用之间的较大值计算分配的 vCPU 和内存。在此示例中,我们没有未使用的 vCPU,但有 2GB 的未分配内存。
分摊成本分配数据计算的分割使用比例是 Kubernetes Pod 分配的 CPU 或内存占 EC2 实例的总体 CPU 或内存的百分比。它还计算未使用比例,即 Kubernetes Pod 分配的 CPU 或内存占 EC2 实例总分配的 CPU 或内存的百分比即不考虑实例上未分配的 CPU 或内存。例如,实例上有 2GB 的未分配内存,占总实例内存的 2/32 = 0063。Pod 1 分配了 6GB,这相当于 6/32 = 0188 占总实例内存。因此,Pod 1 的总未使用内存比例为 0188 / (10063) = 0200。
Pod 级分摊成本基于分割使用比例乘以每个 vCPU 小时的成本和每个 GB 小时的成本进行计算。如果存在未使用资源在这种情况下是未使用的 2GB 内存,则未使用的实例成本0006将根据为每个 Pod 计算的未使用比例进行按比例分配。每个 Pod 的总分配成本将是分摊成本与按比例分配的未使用成本之和。一旦 EC2 成本可在 Pod 级别获得,您可以计算聚合的命名空间级成本。在此示例中,命名空间 1 和命名空间 2 的总分配成本分别为 0142 和 0188。您还可以使用 Cost Categories 或新添加到 Kubernetes Pod 的 EKS 成本分配标签,对成本进行按您希望的业务实体级别计算。
新的成本和用量报告列是什么?随着分摊成本分配数据计算 Kubernetes Pod 级别的指标,您将在 CUR 报告中看到新的列。例如,“SplitLineItem/SplitUsage”是指定时间段内分配给 Kubernetes Pod 的 CPU 或内存的使用情况。您可以查看 CUR 数据字典,获取新 CUR 列的完整列表及其定义。
最后,通过我们的示例,下面是一个演示 CUR 报告。您可以看到数据如何显示在新的 CUR 列中。
您还可以使用 容器成本分配仪表板 在 Amazon QuickSight 中查询和可视化您的 EKS 成本,并使用 CUR 查询库 通过 Amazon Athena 查询您的 EKS 成本。
结论
EKS 成本数据的可见性提供了改善效率和成本优化的洞察。 立即启用这种细粒度的成本数据并了解有关该功能的更多信息 此功能。
标签:成本分配
Shubir Kapoor
Shubir Kapoor 是 AWS 计费与成本管理服务的首席产品经理。他专注于为客户挖掘价值、做出明智决策和优化云成本的产品。
![Mihir Surani](https//d2908q01vomqb2cloudfrontnet/2e01e17467891f7c933dbaa00e1459d23db3fe4f/2024/04/11/MihirSur