

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 了解您的 Amazon EKS 成本
<a name="kubecost-main"></a>

## 概述
<a name="kubecost-overview"></a>

要有效监控 Kubernetes 部署的成本，需要从整体角度进行考量。唯一固定且已知的成本是 Amazon Elastic Kubernetes Service（Amazon EKS）控制面板的成本。其中包括构成部署的所有其他组件，从计算和存储到网络，其数量根据您的应用程序需求而定。

您可以使用 [Kubecost](https://www.kubecost.com/) 来分析 Kubernetes 基础设施的成本，从[命名空间](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/)和[服务](https://kubernetes.io/docs/concepts/services-networking/service/)一直到各个[容器组（pod）](https://kubernetes.io/docs/concepts/workloads/pods/)，然后在控制面板中显示数据。Kubecost显示了计算和存储等集群内成本，以及[亚马逊简单存储服务 (Amazon S3) 存储桶和亚马逊关系数据库服务 (Ama [z](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) on RDS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 实例 out-of-cluster等成本。Kubecost 将根据此数据提出调整建议，并显示可能影响系统的关键提醒。Kubecost 可以与 [AWS 成本和使用情况报告](https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html) [集成](https://www.ibm.com/docs/en/kubecost/self-hosted/1.x?topic=integrations-aws-cloud-billing-integration)，以显示通过[计算类节省计划](https://docs.aws.amazon.com/savingsplans/latest/userguide/what-is-savings-plans.html)、[预留实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html)及其他折扣计划实现的节省。

## 成本优势
<a name="kubecost-cost-benefits"></a>

Kubecost 提供报告和控制面板，用于可视化您的 Amazon EKS 部署成本。它使您能够从集群向下钻取到各个组件，例如控制器、服务、节点、容器组（pod）和卷。这使您可以全面了解在 Amazon EKS 环境中运行的应用程序。通过启用此可见性，您可以按照 Kubecost 建议采取行动，或者精细地查看每个应用程序的成本。调整 Amazon EKS 节点组可以像调整标准 EC2 实例一样节省成本。如果您可以调整容器和节点，则可以从运行容器所需的实例大小和自动扩缩组中所需的 EC2 实例数量中消除计算膨胀。

## 成本优化建议
<a name="kubecost-rec"></a>

要利用 KubeCost，我们建议您执行以下操作：

1. 将 Kubecost 部署到您的环境中

1. 获取 Windows 应用程序的详细成本明细

1. 调整集群节点

1. 调整容器请求

1. 管理未充分利用的节点

1. 补救放弃的工作负载

1. 根据建议采取行动

1. 更新自行管理的节点

### 将 Kubecost 部署到您的环境中
<a name="kubecost-overview-rec-deploy"></a>

[亚马逊 EKS Finhack 研讨](https://catalog.us-east-1.prod.workshops.aws/workshops/c4ab40ed-0299-4a4e-8987-35d90ba5085e/en-US)会教你如何部署配置为在自有账户中使用 Kubecost 的 Amazon EKS 环境。 AWS 这可让您获得有关技术方面的实践经验。如果您有兴趣在组织中举办此讲习会，请联系您的客户团队。

要使用 [Helm](https://helm.sh/) 将 Kubecost 部署到你的 Amazon EKS 集群，请参阅博客上[AWS 和 Kubecost 合作为 EKS 客户提供成本监控的](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/)帖子。 AWS 或者，您可以参阅 [Kubecost 官方文档](https://www.ibm.com/docs/en/kubecost/self-hosted/3.x?topic=installation)，了解有关安装和配置 Kubecost 的说明。有关 Kubecost 对 Windows 节点的支持的信息，请参阅 Kubecost 文档中的 [Windows Node Support](https://www.ibm.com/docs/en/kubecost/self-hosted/3.x?topic=configuration-windows-node-support)。

### 获取 Windows 应用程序的详细成本明细
<a name="kubecost-overview-rec-granular-cost"></a>

虽然使用 [Amazon EC2 竞价型实例](https://aws.amazon.com/ec2/spot/)可以节省大量成本，但您也可以从 Windows 工作负载往往是有状态这一事实中受益。竞价型实例的使用取决于应用程序，我们鼓励您验证它们是否适用于您的使用案例。

要获取 Windows 应用程序的详细成本明细，请[登录 Kubecost](https://auth.app.kubecost.com/login)。在导航页面中，选择**节省**。

### 调整集群节点
<a name="kubecost-overview-rec-rightsize-cluster"></a>

在 [Kubecost](https://auth.app.kubecost.com/login) 中，从导航栏中选择**节省**，然后选择**调整集群节点**。

举一个例子，Kubecost报告集群在 vCPU 和 RAM 方面都被过度预调配。下表显示了 Kubecost 的详细信息和建议。


****  

|   | Current | 建议：简单 | 建议：复杂 | 
| --- | --- | --- | --- | 
| 总数 | 每月 3462.57 美元 | 每月 137.24 美元 | 每月 303.68 美元 | 
| 节点计数 | 4 | 5 | 4 | 
| CPU | 74 VCPUs | 10 VCPUs | 8 VCPUs | 
| RAM | 152 GB | 20GB | 18 GB | 
| 实例明细 | 2 个 c5.xlarge \$1 外加 2 个 | 5 个 t3a.medium | 2 个 c5.xlarge \$1 外加 1 个 | 

正如 Kubecost 博客文章 [Find an optimal set of nodes for a Kubernetes cluster](https://blog.kubecost.com/blog/cluster-right-sizing/) 中所述，简单选项使用单节点组，而复杂选项使用多节点组方法。**了解如何采用**按钮可以一键调整集群大小。它需要安装 [Kubecost 集群控制器](https://www.ibm.com/docs/en/kubecost/self-hosted/3.x?topic=configuration-cluster-controller)。

如果您使用的是非 [eksctl](https://eksctl.io/) 创建的[自行管理的 Windows 节点](https://docs.aws.amazon.com/eks/latest/userguide/launch-windows-workers.html)，请参阅[更新现有的自行管理的节点组](https://docs.aws.amazon.com/eks/latest/userguide/update-stack.html)。这些说明向您展示了如何在[自动扩缩组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)使用的 Amazon EC2 启动模板中更改实例类型。

### 调整容器请求
<a name="kubecost-overview-rec-rightsize-container-requests"></a>

在 [Kubecost](https://auth.app.kubecost.com/login) 中，从导航栏中选择**节省**，然后转到**请求调整建议**页面。本页面显示了容器组（pod）的[效率](https://www.ibm.com/docs/en/kubecost/self-hosted/2.x?topic=dashboard-efficiency-idle)、调整建议及预计的成本节省。您可以使用**自定义**按钮按**集群**、**节点**、**命名空间\$1控制器**等进行筛选。

举个例子，假设 Kubecost 计算出您的某些容器组（pod）在 CPU 和 RAM（内存）方面被过度预调配。然后，Kubecost 建议您调整到新的 CPU 和 RAM 值，以实现其预计的每月节省。要更改 CPU 和 RAM 值，您必须更新[部署清单](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)文件。

### 管理未充分利用的节点
<a name="kubecost-overview-rec-underutilized-nodes"></a>

在 [Kubecost](https://auth.app.kubecost.com/login) 中，从导航栏中选择**节省**，然后选择**管理未充分利用的节点**。

举一个例子，页面显示集群中的一个节点在 CPU 和 RAM（内存）方面未充分利用，因此可能会耗尽、终止或调整大小。选择未通过节点和容器组（pod）检查的节点可让您更详细了解为什么它们无法被耗尽。

### 补救放弃的工作负载
<a name="kubecost-overview-rec-abandoned-workloads"></a>

在 [Kubecost](https://auth.app.kubecost.com/login) 中，从导航栏中选择**节省**，然后选择**放弃的工作负载**页面。在此示例中，您按名为 **windows** 的命名空间进行筛选。此页面显示了尚未达到流量阈值且视为已放弃的容器组（pod）。容器组（pod）需要在定义的时间段内发送或接收一定数量的网络流量。

在仔细确认一个或多个容器组（pod）已废弃后，您可以通过缩减副本数量、删除部署、调整其大小以消耗更少的资源或通知应用程序所有者您认为部署已放弃来节省成本。

### 根据建议采取行动
<a name="kubecost-overview-rec-act-rec"></a>

在**调整集群节点**部分中，Kubecost 分析了集群中 Worker 节点的使用情况，并就如何调整节点以降低成本提出了建议。以下两种类型的节点组可与 Amazon EKS 一起使用：[自行管理](https://docs.aws.amazon.com/eks/latest/userguide/worker.html)和[托管式](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)。

### 更新自行管理的节点
<a name="kubecost-overview-rec-selfmanaged-nodes"></a>

有关更新自行管理节点的信息，请参阅 Amazon EKS 文档中的[自行管理的节点更新](https://docs.aws.amazon.com/eks/latest/userguide/update-workers.html)。它指出，使用 `eksctl` 创建的节点组无法更新，且必须将其迁移到具有新配置的新节点组。

例如，假设您有一个名为 `ng-windows-m5-2xlarge`** **的 Windows 节点组（使用 m5.2xlarge EC2 实例），并且您想将容器组（pod）迁移到名为 `ng-windows-t3-large`** **的[新节点组](https://docs.aws.amazon.com/eks/latest/userguide/launch-windows-workers.html)（由 t3.large EC2 实例支持，以节省成本）。

要在使用由 `eksctl` 部署的节点组时迁移到新的节点组，请执行以下操作：

1. 要查找容器组（pod）当前所在的节点，请运行 `kubectl describe pod <pod_name> -n <namespace>` 命令。

1. 运行 `kubectl describe node <node_name>` 命令。输出显示该节点正在一个 m5.2xlarge 实例上运行。它还与节点组名称 (`ng-windows-m5-2xlarge`) 匹配。

1. 要将部署更改为使用节点组 `ng-windows-t3-large`，请删除节点组 `ng-windows-m5-2xlarge` 并运行 `kubectl describe svc,deploy,pod -n windows`。由于节点组已删除，部署将立即开始重新部署。
**注意**  
删除节点组后，服务将停机。

1. 在几分钟后再次运行 `kubectl describe svc,deploy,pod -n windows` 命令。输出显示容器组（pod）都再次处于**正在运行**状态。

1. 要显示容器组（pod）现在正在节点组 `ng-windows-t3-large` 上运行，请再次运行 `kubectl describe pod <pod_name> -n <namespace>` 和 `kubectl describe node <node_name>` 命令。

### 其他调整大小方法
<a name="kubecost-overview-rec-alternative-resizing"></a>

此方法适用于自行管理或托管式节点组的任意组合。[Seamlessly migrate workloads from EKS self-managed node group to EKS-managed node groups](https://aws.amazon.com/blogs/containers/seamlessly-migrate-workloads-from-eks-self-managed-node-group-to-eks-managed-node-groups/) 博客文章提供了如何将工作负载从实例类型过大的一个节点组迁移到已调整的节点组，而无需任何停机的指引。

## 后续步骤
<a name="kubecost-next-steps"></a>

Kubecost 可轻松地可视化 Amazon EKS 环境的成本。Kubecost与Kubernetes的深度集成 AWS APIs 可以帮助你找到潜在的成本节约。您可以在 Kubecost 的**节省**控制面板中查看这些建议。Kubecost 还可以通过[集群控制器功能](https://github.com/kubecost/cluster-turndown)为您实施其中一些建议。

我们建议您在 AWS 容器博客中查看 step-by-step部署情况 [AWS ，Kubecost 合作为 EKS 客户提供成本监控](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/)。

## 其他资源
<a name="kubecost-additional-resources"></a>
+ [Amazon EKS Workshop](https://www.eksworkshop.com/)（Amazon EKS 研讨会）
+ [AWS 与 Kubecost 合作为 EKS 客户提供成本监控（AWS 博客](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/)）
+ [亚马逊 EKS Finhack AWS 研讨会](https://catalog.us-east-1.prod.workshops.aws/workshops/c4ab40ed-0299-4a4e-8987-35d90ba5085e/en-US)（工作室工作室）
+ [Windows 容器已开启 AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/1de8014a-d598-4cb5-a119-801576492564/en-US)（工作AWS 室工作室）