成本监控 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

成本监控

Amazon EKS 支持 Kubecost,您可以使用该功能监控按 Kubernetes 资源(包括 pods、节点、命名空间和标签)细分的成本。作为 Kubernetes 平台管理员和财务主管,您可以使用 Kubecost 可视化 Amazon EKS 费用明细、分配成本以及向应用程序团队等组织部门退款。您可以根据内部团队和业务部门的实际 Amazon 账单为其提供透明、准确的成本数据。此外,您还可以根据他们的基础设施环境及其集群内的使用模式获得定制的成本优化建议。有关 Kubecost 的详细信息,请参阅 Kubecost 文档。

Amazon EKS 提供 Amazon 优化的 Kubecost 捆绑包,以实现集群成本可视化。您可以使用现有的 Amazon 支持协议获取支持。

先决条件

  • 现有 版 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。集群必须具有 Amazon EC2 节点,因为您无法在 Fargate 节点上运行 Kubecost。

  • 您的设备或 Amazon CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.22,则可以将 kubectl 版本 1.211.221.23 用于它。要安装或升级 kubectl,请参阅 安装或更新 kubectl

  • 您的设备或 Amazon CloudShell 上配置了 3.9.0 版或更高版本的 Helm。要安装或更新 Helm,请参阅 将 Helm 与 Amazon EKS 结合使用

  • 如果您的集群是 1.23 版或更高版本,您必须在集群上安装 Amazon EBS CSI 驱动程序

安装 Kubecost

  1. 使用以下命令安装 Kubecost。您可以将 1.96.0 替换为更高版本。您可以在 Amazon ECR Public Gallery 中的 kubecost/cost-analyzer 上查看可用的版本。

    helm upgrade -i kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 1.96.0 \ --namespace kubecost --create-namespace \ -f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/develop/cost-analyzer/values-eks-cost-monitoring.yaml

    Kubecost 定期发布新版本。您可以使用 helm upgrade 更新您的版本。默认情况下,安装包括本地 Prometheus 服务器和 kube-state-metrics。您可以按照与 Amazon EKS 成本监控集成中的文档来自定义部署,以使用 Amazon Managed Service for Prometheus。有关您可以配置的所有其他设置的列表,请参阅 GitHub 上的示例配置文件

  2. 确保所需的容器组(pod)正在运行。

    kubectl get pods -n kubecost

    输出示例如下。

    NAME READY STATUS RESTARTS AGE kubecost-cost-analyzer-b9788c99f-5vj5b 2/2 Running 0 3h27m kubecost-kube-state-metrics-99bb8c55b-bn2br 1/1 Running 0 3h27m kubecost-prometheus-server-7d9967bfc8-9c8p7 2/2 Running 0 3h27m
  3. 在您的设备上,启用端口转发以公开 Kubecost 控制面板。

    kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090

    或者,您可以使用 Amazon Load Balancer Controller 公开 Kubecost 并将 Amazon Cognito 用于身份验证、授权和用户管理。有关更多信息,请参阅如何使用应用程序负载均衡器和 Amazon Cognito 为您的 Kubernetes Web 应用程序用户进行身份验证

  4. 在完成上一步的同一台设备上,打开 Web 浏览器并输入以下地址。

    http://localhost:9090

    浏览器中将显示 Kubecost 概述页面。Kubecost 收集指标可能需要 5-10 分钟。您可以查看 Amazon EKS 支出,包括累计的集群成本、关联的 Kubernetes 资产成本和每月聚合支出。

    
                    Kubecost 控制面板
  5. 要跟踪集群级别的成本,请标记您的 Amazon EKS 资源以进行计费。有关更多信息,请参阅标记资源以便于计费

在控制面板的左侧窗格中,您还可以选择以下信息进行查看:

  • 成本分配 – 查看过去七天内每个命名空间和其他维度的 Amazon EKS 月度成本和累计成本。这有助于了解应用程序的哪些部分产生 Amazon EKS 支出。

  • 资产 – 查看与您的 Amazon EKS 资源关联的 Amazon 基础设施资产的成本。

其他功能

  • 导出成本指标 – Amazon EKS 优化的成本监控使用 Kubecost 和 Prometheus 部署,这是一个开源监控系统和时间序列数据库。Kubecost 从 Prometheus 读取指标,然后执行成本分配计算并将指标写回 Prometheus。Kubecost 前端从 Prometheus 中读取指标并在 Kubecost 用户界面上显示这些指标。此架构如下图所示。

    
                    Kubecost 架构

    预装 Prometheus 后,您可以编写查询,以将 Kubecost 数据提取到当前的商业智能系统,进行进一步分析。您也可以将其用作当前 Grafana 控制面板的数据来源,以显示您的内部团队熟悉的 Amazon EKS 集群成本。要了解有关如何编写 Prometheus 查询的更多信息,请参阅 GitHub 上的 Prometheus 配置 readme 文件,或者使用在 Kubecost Github 存储库 中作为引用的示例 Grafana JSON 模型。

  • Amazon Cost and Usage Report 集成 – 要为您的 Amazon EKS 集群执行成本分配计算,Kubecost 会从 Amazon 价目表 API 中检索 Amazon Web Services 和 Amazon 资源的公开定价信息。您还可以将 Kubecost 和 Amazon Cost and Usage Report 集成,以提高特定于 Amazon Web Services 账户 的定价信息的准确性。这些信息包括企业折扣计划、预留实例使用情况、Savings Plans 以及 Spot 使用情况。要了解有关 Amazon Cost and Usage Report 集成工作原理的更多信息,请参阅 Kubecost 文档中的 Amazon 云集成

删除 Kubecost

您可以使用以下命令从您的集群删除 Kubecost。

helm uninstall kubecost --namespace kubecost kubectl delete ns kubecost

常见问题

请参阅有关将 Kubecost 与 Amazon EKS 配合使用的以下常见问题和答案。

Amazon 与 Kubecost 合作提供了一个自定义版本的 Kubecost。此版本包括一部分商业功能,无需额外付费。除了 Kubecost 的所有开源功能外,此版本还包括成本效益测量、包含 Amazon Cost and Usage Report 集成的退款,以及企业支持。它不包括 Kubecost 的未命名的和未来的企业功能、多云支持,以及业务和企业优化及治理。

不收费。您可以免费使用此版本的 Kubecost。如果您需要未包括在此捆绑包中的其他 Kubecost 功能,可以通过 Amazon Web Services Marketplace 或直接从 Kubecost 购买 Kubecost 的企业许可证。

是。您可以通过联系 Amazon 借助 Amazon 支持团队打开支持案例。

否。

是。您可以将 Kubecost 配置为从 Amazon Cost and Usage Report 摄取数据,以获取准确的成本可见性,包括折扣、竞价型定价、预留实例定价,以及其他内容。有关更多信息,请参阅 Kubecost 文档中的 Amazon 云集成

不支持。此版本仅与 Amazon EKS 集群兼容。

Kubecost 已尽最大努力显示 Fargate 上的 Amazon EKS 的集群成本可见性,但准确性低于 Amazon EC2 上的 Amazon EKS。这主要是由于您的使用计费方式不同。使用 Fargate 上的 Amazon EKS,将针对消耗的资源为您计费。使用 Amazon EC2 节点上的 Amazon EKS,将针对预调配的资源为您计费。Kubecost 将根据节点规格(包括 CPU、RAM 和临时存储)计算 Amazon EC2 节点的成本。使用 Fargate,将根据为 Fargate 容器组 (pod) 请求的资源计算成本。

您可以使用标准 Helm 升级程序升级您的 Kubecost 版本。最新版本位于 Amazon ECR Public Gallery 中。

支持。Kubectl-cost 是一个通过 Kubecost(Apache 2.0 许可证)使用的开源工具,提供针对 Kubernetes 成本分配指标的 CLI 访问权限。要安装 kubectl-cost,请参阅 GitHub 上的安装

Kubecost 提供了一个 Web 控制面板,您可以通过 kubectl 端口转发、入口或负载均衡器访问该控制面板。您也可以使用 Amazon Load Balancer Controller 公开 Kubecost,并使用 Amazon Cognito 进行身份验证、授权和用户管理。有关更多信息,请参阅 Amazon 博客上的如何使用应用程序负载均衡器和 Amazon Cognito 对您的 Kubernetes Web 应用程序的用户进行身份验证

否。