支出意識 - 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 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 環境。

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 這類第三方工具,以掌握執行 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 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 是一種有用的工具,可讓 AWS 客戶使用自訂 CloudWatch 指標,追蹤已部署在特定帳戶特定區域中 Fargate 上的 EKS Pod 總數。這有助於追蹤跨 EKS 叢集執行的所有 Fargate Pod。

Popeye - Kubernetes 叢集清理程式

Popeye - Kubernetes Cluster Sanitizer 是一種公用程式,可掃描即時 Kubernetes 叢集,並報告已部署資源和組態的潛在問題。它會根據部署的內容而非磁碟上的內容來淨化您的叢集。透過掃描叢集,它可偵測組態錯誤,並協助您確保最佳實務已就緒

資源

請參閱下列資源,進一步了解成本最佳化的最佳實務。

文件和部落格

工具