本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
支出意識
支出意識是了解 EKS 叢集中造成支出的人員、位置和原因。準確了解這些資料將有助於提高對支出的意識,並重點介紹要修復的領域。
建議
使用 Cost Explorer
AWS Cost Explorer
EKS 控制平面和 EKS Fargate 成本
使用篩選條件,我們可以查詢控制平面和 Fargate Pod 的 EKS 成本所產生的成本,如下圖所示:

使用篩選條件,我們可以查詢 EKS 中跨區域 Fargate Pod 產生的彙總成本,其中包括每個 CPU 的 vCPU 小時數和 GB 小時數,如下圖所示:

資源的標記
Amazon EKS 支援將 AWS 標籤新增至您的 Amazon EKS 叢集。這可讓您輕鬆控制對 EKS API 的存取,以管理您的叢集。新增至 EKS 叢集的標籤專屬於 AWS EKS 叢集資源,不會傳播到叢集使用的其他 AWS 資源,例如 EC2 執行個體或負載平衡器。目前,所有新的和現有的 EKS 叢集都支援透過 AWS API、主控台和 SDKs叢集標記。
AWS Fargate 是一種技術,可為容器提供隨需、大小適中的運算容量。您必須定義至少一個 Fargate 描述檔,指定哪些 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 磁碟區等。檢查的完整清單提供於 https://https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-practice-checklist/
Trusted Advisor 也為 EC2 執行個體和 Fargate 提供 Savings Plans 和預留執行個體建議,可讓您遞交一致的用量,以換取折扣費率。
注意
Trusted Advisor 的建議是一般建議,而不是 EKS 特有的建議。
使用 Kubernetes 儀表板
Kubernetes 儀表板
Kubernetes Dashboard 是 Kubernetes 叢集的一般用途 Web 型 UI,可提供 Kubernetes 叢集的相關資訊,包括叢集、節點和 Pod 層級的資源使用量。Amazon EKS 叢集上的 Kubernetes 儀表板部署如 Amazon EKS 文件所述。
Dashboard 提供每個節點和 Pod 的資源用量明細,以及有關 Pod、服務、部署和其他 Kubernetes 物件的詳細中繼資料。此合併資訊可讓您了解 Kubernetes 環境。

kubectl top 和描述命令
使用 kubectl top 和 kubectl 來檢視資源用量指標描述命令。kubectl top 會顯示叢集中 Pod 或節點,或特定 Pod 或節點的目前 CPU 和記憶體用量。kubectl describe 命令會提供特定節點或 Pod 的詳細資訊。
$ kubectl top pods $ kubectl top nodes $ kubectl top pod pod-name --namespace mynamespace --containers
使用頂端命令,輸出會顯示節點正在使用的 CPU (以核心為單位) 和記憶體 (以 MiB 為單位) 總量,以及這些數字代表的節點可配置容量百分比。然後,您可以透過新增 --containers 旗標,在 Pod 內向下切入至下一個層級的容器層級。
$ kubectl describe node <node> $ kubectl describe pod <pod>
kubectl 描述會傳回每個資源請求或限制所代表的總可用容量百分比。
kubectl top 和 描述、追蹤關鍵資源的使用率和可用性,例如 CPU、記憶體和跨 kubernetes Pod、節點和容器的儲存。此意識有助於了解資源用量,並協助控制成本。
使用 CloudWatch Container Insights
使用 CloudWatch Container Insights 從您的容器化應用程式和微服務收集、彙總和摘要指標和日誌。Container Insights 適用於 EC2 上的 Amazon Elastic Kubernetes Service 和 Amazon EC2 上的 Kubernetes 平台。指標包含 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
Container Insights 文件中會提供更多範例查詢
此意識有助於了解資源用量,並協助控制成本。
使用 Kubecost 提高支出意識和指導
也可以在 Amazon EKS 上部署 kubecost
使用 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 成本分配和容量規劃分析工具
Kubernetes Opex Analytics

Yotascale
Yotascale 有助於準確分配 Kubernetes 成本。Yotascale Kubernetes 成本分配功能利用實際成本資料,其中包含預留執行個體折扣和 Spot 執行個體定價,而非一般市價估算,以通知 Kubernetes 總成本足跡
如需更多詳細資訊,請參閱其網站
Alcide Advisor
Alcide 是 AWS 合作夥伴網路 (APN) 進階技術合作夥伴。Alcide Advisor 可協助確保您的 Amazon EKS 叢集、節點和 Pod 組態根據安全最佳實務和內部準則進行調校以執行。Alcide Advisor 是 Kubernetes 稽核和合規的無代理程式服務,其建置目的是在進入生產環境之前強化開發階段,以確保無摩擦且安全的 DevSecOps 流程。
您可以在此部落格文章
其他工具
Kubernetes 垃圾回收
Kubernetes 垃圾收集器
Fargate 計數
Fargatecount
Popeye - Kubernetes 叢集清理程式
Popeye - Kubernetes Cluster Sanitizer
資源
請參閱下列資源,進一步了解成本最佳化的最佳實務。