支出意识 - Amazon EKS

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

支出意识

支出意识是了解谁在哪里以及是什么原因导致了您的 EKS 集群中的支出。准确了解这些数据将有助于提高人们对支出的认识,并突出需要补救的领域。

建议

使用 Cost Explorer

AWS Cost Explorer 有一个 easy-to-use界面,可让您直观地了解、了解和管理您的 AWS 成本和使用情况。您可以使用 Cost Explorer 中提供的筛选器分析不同级别的成本和使用数据。

EKS 控制飞机和 EKS Fargate 成本

使用筛选器,我们可以查询控制平面和 Fargate Pod 的 EKS 成本所产生的成本,如下图所示:

Cost Explorer-EKS 控制平面

使用筛选器,我们可以查询 EKS 中各个区域的 Fargate Pod 产生的总成本,其中包括每个 CPU 的 vCPU 小时数和 GB 小时数,如下图所示:

Cost Explorer-EKS Fargate

为资源加标签

Amazon EK S 支持向您的亚马逊 EKS 集群添加 AWS 标签。这样可以轻松控制对用于管理集群的 EKS API 的访问权限。添加到 EKS 集群的标签特定于 AWS EKS 集群资源,它们不会传播到集群使用的其他 AWS 资源,例如 EC2 实例或负载均衡器。如今,所有新的和现有的 EKS 集群都支持通过 AWS API、控制台和 SDKs进行集群标记。

AWS Fargate 是一项为容器提供按需、大小合适的计算容量的技术。您必须先定义至少一个 Fargate 配置文件,以指定 Pod 在启动时哪些 Pod 应该使用 Fargate,然后才能安排在集群中的 Fargate 上运行的 Pod。

向 EKS 集群添加和列出标签:

$ aws eks tag-resource --resource-arn arn:aws:eks:us-west-2:xxx:cluster/ekscluster1 --tags team=devops,env=staging,bu=cio,costcenter=1234 $ aws eks list-tags-for-resource --resource-arn arn:aws:eks:us-west-2:xxx:cluster/ekscluster1 { "tags": { "bu": "cio", "env": "staging", "costcenter": "1234", "team": "devops" } }

AWS Cost Explorer 中激活成本分配标签后,AWS 会使用成本分配标签在成本分配报告中整理资源成本,以便您更轻松地对自己的 AWS 成本进行分类和跟踪。

标签对 Amazon EKS 没有任何语义意义,应严格按字符串进行解析。例如,您可以为 Amazon EKS 集群定义一组标签,以帮助您跟踪每个集群的拥有者和堆栈级别。

使用 AWS Trusted Advisor

AWS Trusted Advisor 提供了五个类别的一系列丰富的最佳实践检查和建议:成本优化、安全、容错、性能和服务限制。

为了实现成本优化,Trusted Advisor 可帮助消除未使用和闲置的资源,并建议对预留容量做出承诺。有助于 Amazon EKS 的关键行动项目将围绕低利用率 EC2 实例、未关联的弹性 IP 地址、空闲负载均衡器、未充分利用的 EBS 卷等。完整的检查清单可在-practice https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-checklist/ 中找到

Trusted Advisor 还为 EC2 实例和 Fargate 提供储蓄计划和预留实例建议,允许您承诺稳定的使用量以换取折扣费率。

注意

来自 Trusted Advisor 的建议是一般性建议,并不特定于 EKS。

使用 Kubernetes 控制面板

Kubernetes 控制面板

Kubernetes 控制面板是一个适用于 Kubernetes 集群的通用基于 Web 的用户界面,它提供有关 Kubernetes 集群的信息,包括集群、节点和容器级别的资源使用情况。亚马逊 EKS 文档中描述了在亚马逊 EKS 集群上部署 Kubernetes 控制面板的情况。

控制面板提供每个节点和 Pod 的资源使用情况明细,以及有关 Pod、服务、部署和其他 Kubernetes 对象的详细元数据。通过这些整合信息,您可以了解您的 Kubernetes 环境。

Kubernetes 控制面板

kubectl top 然后描述命令

使用 kubectl top 和 kubectl describe 命令查看资源使用指标。kubectl top 将显示集群中容器或节点或特定容器或节点的当前 CPU 和内存使用情况。kubectl describe 命令将提供有关特定节点或 Pod 的更多详细信息。

$ kubectl top pods $ kubectl top nodes $ kubectl top pod pod-name --namespace mynamespace --containers

使用 top 命令,输出将显示节点正在使用的 CPU(以内核为单位)和内存(以 MiB 为单位)的总量,以及这些数字所代表的节点可分配容量的百分比。然后,通过添加 --c ontainers标志,你可以深入到容器中的下一个级别,即容器级别。

$ kubectl describe node <node> $ kubectl describe pod <pod>

kubectl des cribe 返回每个资源请求或限制所代表的总可用容量的百分比。

kubectl 在 kubernetes pod、节点和容器中描述、跟踪关键资源(例如 CPU、内存和存储)的利用率和可用性。这种意识将有助于了解资源使用情况并有助于控制成本。

使用 CloudWatch 容器见解

使用 CloudWatch Container Insights 收集、汇总和汇总来自容器化应用程序和微服务的指标和日志。容器见解适用于亚马逊 Elastic Kubernetes Service、亚马逊上的 Kubernetes 平台和亚马逊 EC2上的 Kubernetes 平台。 EC2指标包括资源的使用率,如 CPU、内存、磁盘和网络。

文档中给出了见解的安装。

CloudWatch 创建集群、节点、Pod、任务和服务级别的聚合指标作为 CloudWatch 指标。

以下查询显示了按节点 CPU 平均利用率排序的节点列表

STATS avg(node_cpu_utilization) as avg_node_cpu_utilization by NodeName
| SORT avg_node_cpu_utilization DESC

按容器名称划分的 CPU 使用率

stats pct(container_cpu_usage_total, 50) as CPUPercMedian by kubernetes.container_name
| filter Type="Container"

按容器名称划分的磁盘使用情况

stats floor(avg(container_filesystem_usage/1024)) as container_filesystem_usage_avg_kb by InstanceId, kubernetes.container_name, device
| filter Type="ContainerFS"
| sort container_filesystem_usage_avg_kb desc

更多示例查询在《容器见解》文档中给出

这种意识将有助于了解资源使用情况并有助于控制成本。

使用 Kubecost 进行支出意识和指导

诸如 kubecost 之类的第三方工具也可以部署在 Amazon EKS 上,以了解运行 Kubernetes 集群的成本。有关使用 Kubecost 跟踪成本的信息,请参阅此 AWS 博客

使用 Helm 3 部署 kubecost:

$ curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash $ helm version --short v3.2.1+gfe51cd1 $ helm repo add stable https://kubernetes-charts.storage.googleapis.com/ $ helm repo add stable https://kubernetes-charts.storage.googleapis.com/c^C $ kubectl create namespace kubecost namespace/kubecost created $ helm repo add kubecost https://kubecost.github.io/cost-analyzer/ "kubecost" has been added to your repositories $ helm install kubecost kubecost/cost-analyzer --namespace kubecost --set kubecostToken="aGRoZEBqc2pzLmNvbQ==xm343yadf98" NAME: kubecost LAST DEPLOYED: Mon May 18 08:49:05 2020 NAMESPACE: kubecost STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: --------------------------------------------------Kubecost has been successfully installed. When pods are Ready, you can enable port-forwarding with the following command: kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090 Next, navigate to http://localhost:9090 in a web browser. $ kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090 NOTE: If you are using Cloud 9 or have a need to forward it to a different port like 8080, issue the following command $ kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 8080:9090

Kubecost 控制面板- Kubernetes Cluster Auto Scaler logs

使用 Kubernetes 成本分配和容量规划分析工具

Kubernetes Opex Analytics 是一种工具,可帮助组织跟踪其 Kubernetes 集群消耗的资源,以防止多付钱。为此,它会生成短期(7 天)、中期(14 天)和长期(12 个月)使用报告,显示有关每个项目在一段时间内花费的资源量的相关见解。

Kubernetes 运营支出分析

Yotascale

Yotascale 有助于准确分配 Kubernetes 成本。Yotascale Kubernetes 成本分配功能利用实际成本数据(包括预留实例折扣和竞价实例定价,而不是通用的市场价格估计)来告知 Kubernetes 的总成本占用空间

更多细节可以在他们的网站上找到。

Alcide 顾问

Alcide 是 AWS 合作伙伴网络 (APN) 的高级技术合作伙伴。Alcide Advisor 可帮助确保您的 Amazon EKS 集群、节点和容器配置经过调整,使其根据安全最佳实践和内部指南运行。Alcide Advisor 是一项针对 Kubernetes 审计和合规性的无代理服务,旨在通过在进入生产之前强化开发阶段来确保 DevSecOps 流畅和安全的流程。

更多细节可以在此博客文章中找到。

其他工具

Kubernetes 垃圾收集

Kubernetes 垃圾收集器的作用是删除某些曾经拥有所有者但不再拥有所有者的对象。

Fargate 计数

Fargatecount 是一个有用的工具,它允许 AWS 客户使用自定义 CloudWatch 指标跟踪特定账户特定区域中已在 Fargate 上部署的 EKS 容器总数。这有助于跟踪在 EKS 集群中运行的所有 Fargate 吊舱。

Popeye-Kubernetes 集群消毒器

Popeye-Kubernetes 集群清理器是一个实用程序,用于扫描实时的 Kubernetes 集群并报告已部署资源和配置的潜在问题。它会根据已部署的内容而不是磁盘上的内容对集群进行清理。通过扫描您的集群,它可以检测错误配置并帮助您确保最佳实践到位

资源

要详细了解成本优化的最佳实践,请参阅以下资源。

文档和博客

工具