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

成本监控

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.28,则可以将 kubectl1.271.281.29 版本与之配合使用。要安装或升级 kubectl,请参阅 安装或更新 kubectl

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

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

安装 Kubecost
  1. 确定要安装的 Kubecost 版本。您可以在 Amazon ECR Public Gallery 中的 kubecost/cost-analyzer 上查看可用的版本。有关 Kubecost 版本和 Amazon EKS 兼容性的更多信息,请参阅 Kubecost 文档中的环境要求

  2. 使用以下命令安装 Kubecost。将 kubecost-version 替换为从 ECR 中检索到的值,例如 1.108.1

    helm upgrade -i kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version kubecost-version \ --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 上的示例配置文件

  3. 确保所需的 Pods 正在运行。

    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
  4. 在您的设备上,启用端口转发以公开 Kubecost 控制面板。

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

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

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

    http://localhost:9090

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

    
                    Kubecost 控制面板
  6. 要跟踪集群级别的成本,请标记您的 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 成本和使用情况报告 集成 – 要为您的 Amazon EKS 集群执行成本分配计算,Kubecost 会从 Amazon 价目表 API 中检索 Amazon Web Services 和 Amazon 资源的公开定价信息。您还可以将 Kubecost 和 Amazon 成本和使用情况报告 集成,以提高特定于 Amazon Web Services 账户 的定价信息的准确性。这些信息包括企业折扣计划、预留实例使用情况、Savings Plans 以及 Spot 使用情况。要了解有关 Amazon 成本和使用情况报告 集成工作原理的更多信息,请参阅 Kubecost 文档中的 Amazon 云账单集成

删除 Kubecost

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

helm uninstall kubecost --namespace kubecost kubectl delete ns kubecost

常见问题

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

Amazon 与 Kubecost 合作提供了一个自定义版本的 Kubecost。此版本包括一部分商业功能,无需额外付费。有关 Kubecost 自定义捆绑包中包含的功能,请参阅下表。

功能 Kubecost 免费套餐 Amazon EKS 优化型 Kubecost 自定义捆绑包 Kubecost Enterprise
部署 用户托管 用户托管 用户托管或 Kubecost 托管(SaaS)
支持的集群数量 无限制 无限制 无限制
支持的数据库 本地 Prometheus 本地 Prometheus 或 Amazon Managed Service for Prometheus Prometheus、Amazon Managed Service for Prometheus、Cortex 或 Thanos
数据库保留支持 15 天 无限历史数据 无限历史数据
Kubecost API 保留(ETL) 15 天 15 天 无限历史数据
集群成本可见性 单个集群 统一多集群 统一多集群
混合云可见性 - Amazon EKS 和 Amazon EKS Anywhere 集群 多云和混合云支持
提醒和定期报告 - 支持效率提醒、预算提醒、支出变化提醒等 支持效率提醒、预算提醒、支出变化提醒等
保存的报告 - 基于 15 天数据的报告 基于无限历史数据的报告
云账单集成 每个单独的集群都需要 Amazon 自定义定价支持(包括多个集群和多个账户) Amazon 自定义定价支持(包括多个集群和多个账户)
节省建议 单集群洞察 单集群洞察 多集群洞察
治理:审计 - - 审计历史成本事件
单点登录(SSO)支持 - 支持 Amazon Cognito Okta、Auth0、PingID、KeyCloak
使用 SAML 2.0 的基于角色的访问控制(RBAC) - - Okta, Auth0, PingID, Keycloak
企业培训和引导 - - 全方位服务培训和 FinOps 引导
什么是 Kubecost API 保留(ETL)功能?

Kubecost ETL 功能可汇总和组织各种指标,以显示不同粒度级别的成本可见性(例如 namespace-levelpod-leveldeployment-level)。对于自定义 Kubecost 捆绑包,客户可以获得 15 天的指标数据和洞察。

什么是提醒和定期报告功能? 它包括哪些提醒和报告?

借助 Kubecost 提醒,团队可以实时获得有关 Kubernetes 支出和云支出的动态。借助定期报告,团队能够获得有关历史 Kubernetes 和云支出的自定义视图。这两者都可以使用 Kubecost UI 或 Helm 值来配置。它们支持电子邮件、Slack 和 Microsoft Teams。

保存的报告包含哪些内容?

Kubecost 保存的报告是有关成本和效率指标的预定义视图。其中包括按集群、命名空间、标签等划分的成本。

什么是云账单集成?

通过与 Amazon 账单 API 集成,可让 Kubecost 显示集群之外的成本(例如 Amazon S3 成本)。此外,通过这种集成,还可让 Kubecost 根据实际账单核对 Kubecost 的集群内预测,从而可以考虑竞价型实例使用情况、实惠配套和企业折扣。

节省建议包含哪些内容?

Kubecost 提供了相关的洞察和自动化功能,可帮助用户优化其 Kubernetes 基础设施和支出。

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

是。您可以通过 联系 Amazon,联系 Amazon Web Services Support 团队创建支持工单。

否。

是。您可以将 Kubecost 配置为从 Amazon 成本和使用情况报告 摄取数据,以获取准确的成本可见性,包括折扣、竞价型定价、预留实例定价,以及其他内容。有关更多信息,请参阅 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 Pods 请求的资源计算成本。

您可以使用标准 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 应用程序的用户进行身份验证

否。