了解您的 Amazon EKS 成本 - AWS 规范性指导

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

了解您的 Amazon EKS 成本

概述

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

您可以使用 Kubecost 来分析 Kubernetes 基础设施的成本,从命名空间服务一直到各个容器组(pod),然后在控制面板中显示数据。Kubecost显示了计算和存储等集群内成本,以及亚马逊简单存储服务 (Amazon S3) 存储桶和亚马逊关系数据库服务 (Ama z on RDS) 实例 out-of-cluster等成本。Kubecost 将根据此数据提出调整建议,并显示可能影响系统的关键提醒。Kubecost 可以与 AWS 成本和使用情况报告 集成,以显示通过计算类节省计划预留实例及其他折扣计划实现的节省。

成本优势

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

成本优化建议

要利用 KubeCost,我们建议您执行以下操作:

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

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

  3. 调整集群节点

  4. 调整容器请求

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

  6. 补救放弃的工作负载

  7. 根据建议采取行动

  8. 更新自行管理的节点

将 Kubecost 部署到您的环境中

亚马逊 EKS Finhack 研讨会教你如何部署配置为在自有账户中使用 Kubecost 的 Amazon EKS 环境。 AWS 这可让您获得有关技术方面的实践经验。如果您有兴趣在组织中举办此讲习会,请联系您的客户团队。

要使用 Helm 将 Kubecost 部署到你的 Amazon EKS 集群,请参阅博客上AWS 和 Kubecost 合作为 EKS 客户提供成本监控的帖子。 AWS 或者,您可以参阅 Kubecost 官方文档,了解有关安装和配置 Kubecost 的说明。有关 Kubecost 对 Windows 节点的支持的信息,请参阅 Kubecost 文档中的 Windows Node Support

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

尽管使用 Amazon EC2 Spot 实例可以节省大量成本,但您也可以从 Windows 工作负载往往是有状态这一事实中受益的。竞价型实例的使用取决于应用程序,我们鼓励您验证它们是否适用于您的使用案例。

要获取 Windows 应用程序的详细成本明细,请登录 Kubecost。在导航页面中,选择节省

调整集群节点

Kubecost 中,从导航栏中选择节省,然后选择调整集群节点

举一个例子,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 + 外加 2 个 5 个 t3a.medium 2 个 c5.xlarge + 外加 1 个

正如 Kubecost 博客文章 Find an optimal set of nodes for a Kubernetes cluster 中所述,简单选项使用单节点组,而复杂选项使用多节点组方法。了解如何采用按钮可以一键调整集群大小。它需要安装 Kubecost 集群控制器

如果您使用的是非 eksctl 创建的自行管理的 Windows 节点,请参阅更新现有的自行管理的节点组。这些说明向您展示了如何在 A uto Scaling 组使用的亚马逊 EC2 启动模板中更改实例类型。

调整容器请求

Kubecost 中,从导航栏中选择节省,然后转到请求调整建议页面。本页面显示了容器组(pod)的效率、调整建议及预计的成本节省。您可以使用自定义按钮按集群节点命名空间\控制器等进行筛选。

举个例子,假设 Kubecost 计算出您的某些容器组(pod)在 CPU 和 RAM(内存)方面被过度预调配。然后,Kubecost 建议您调整到新的 CPU 和 RAM 值,以实现其预计的每月节省。要更改 CPU 和 RAM 值,您必须更新部署清单文件。

管理未充分利用的节点

Kubecost 中,从导航栏中选择节省,然后选择管理未充分利用的节点

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

补救放弃的工作负载

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

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

根据建议采取行动

调整集群节点部分中,Kubecost 分析了集群中 Worker 节点的使用情况,并就如何调整节点以降低成本提出了建议。以下两种类型的节点组可与 Amazon EKS 一起使用:自行管理托管式

更新自行管理的节点

有关更新自行管理节点的信息,请参阅 Amazon EKS 文档中的自行管理的节点更新。它指出,使用 eksctl 创建的节点组无法更新,且必须将其迁移到具有新配置的新节点组。

举个例子,假设你有一个名为 ng-windows-m5-2xlarge(它使用 m5.2xlarge EC2 实例)的 Windows 节点组,并且你想将这些 Pod 迁移到一个名为 ng-windows-t3-large(该节点组由 t3. EC2 large 实例支持以节省成本)的新节点组

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

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

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

  3. 要将部署更改为使用节点组 ng-windows-t3-large,请删除节点组 ng-windows-m5-2xlarge 并运行 kubectl describe svc,deploy,pod -n windows。由于节点组已删除,部署将立即开始重新部署。

    注意

    删除节点组后,服务将停机。

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

  5. 要显示容器组(pod)现在正在节点组 ng-windows-t3-large 上运行,请再次运行 kubectl describe pod <pod_name> -n <namespace>kubectl describe node <node_name> 命令。

其他调整大小方法

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

后续步骤

Kubecost 可轻松地可视化 Amazon EKS 环境的成本。Kubecost与Kubernetes的深度集成 AWS APIs 可以帮助你找到潜在的成本节约。您可以在 Kubecost 的节省控制面板中查看这些建议。Kubecost 还可以通过集群控制器功能为您实施其中一些建议。

我们建议您在 AWS 容器博客中查看 step-by-step部署情况 AWS ,Kubecost 合作为 EKS 客户提供成本监控

其他资源