

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

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

全面檢視是有效監控 Kubernetes 部署成本的必要條件。唯一的固定和已知成本是 Amazon Elastic Kubernetes Service (Amazon EKS) 控制平面。這包括組成部署的所有其他元件，從運算和儲存到聯網，都是根據您的應用程式需求的可變數量。

您可以使用 [Kubecost](https://www.kubecost.com/) 來分析從[命名空間](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/) 的 Kubernetes 基礎設施成本，然後在儀表板中顯示資料。Kubecost 表面叢集內成本，例如運算和儲存，以及 out-of-cluster成本。 [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) [Amazon Relational Database Service ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) Kubecost 會根據此資料提出適當大小的建議，並顯示可能影響系統的關鍵警示。Kubecost 可與 [整合](https://www.ibm.com/docs/en/kubecost/self-hosted/1.x?topic=integrations-aws-cloud-billing-integration)[AWS Cost and Usage Report](https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html)，以顯示 [Compute Savings Plans](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>

[Amazon EKS Finhack 研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/c4ab40ed-0299-4a4e-8987-35d90ba5085e/en-US)會教導您如何在 AWS 擁有的帳戶中部署設定為使用 Kubecost 的 Amazon EKS 環境。這可讓您取得 技術的實作體驗。如果您有興趣在您的組織中執行此研討會，請聯絡您的客戶團隊。

若要使用 [Helm](https://helm.sh/) 將 Kubecost 部署到您的 Amazon EKS 叢集，請參閱 AWS 部落格上的 [AWS 和 Kubecost 協作，為 EKS 客戶提供成本監控](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/)。或者，您可以參考[官方 Kubecost 文件](https://www.ibm.com/docs/en/kubecost/self-hosted/3.x?topic=installation)，以取得有關安裝和設定 Kubecost 的說明。如需 Windows 節點的 Kubecost 支援相關資訊，請參閱 [Kubecost 文件中的 Windows 節點支援](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 Spot 執行個體](https://aws.amazon.com/ec2/spot/)來大幅節省成本，但您也可以受益於 Windows 工作負載往往具有狀態。Spot 執行個體的使用取決於應用程式，建議您驗證它們是否適用於您的使用案例。

若要取得 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 | 20 GB | 18 GB | 
| 執行個體明細 | 2 c5.xlarge \$1 其他 2 個 | 5 t3a.medium | 2 c5n.large \$1 其他 1 個 | 

如 Kubecost 部落格文章所述 [尋找 Kubernetes 叢集的最佳節點集](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)。這些指示說明如何在 [Auto Scaling 群組](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) 中，從導覽列選擇 **Savings**，然後前往**請求適當大小建議**頁面。此頁面顯示 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 會分析叢集中工作者節點的使用情況，並針對正確調整節點大小以降低成本提出建議。有兩種類型的節點群組可與 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`** **（使用 m5.2xlarge EC2 執行個體） 的 Windows 節點群組，而且您想要將 Pod 遷移到名為`ng-windows-t3-large`** **（由 t3.large EC2 執行個體支援以節省成本） [的新節點群組](https://docs.aws.amazon.com/eks/latest/userguide/launch-windows-workers.html)。

若要在使用 所部署的節點群組時遷移至新的節點群組`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>

此方法適用於自我管理或受管節點群組的任意組合。[無縫遷移工作負載從 EKS 自我管理節點群組到 EKS 受管節點群組](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 的 **Savings** 儀表板中將這些視為建議。Kubecost 也可以透過其[叢集控制器功能](https://github.com/kubecost/cluster-turndown)為您實作其中一些建議。

我們建議您檢閱 和 Kubecost 協作中的step-by-step部署，以從 AWS 容器部落格為 EKS 客戶提供成本監控部落格文章。 [AWS](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 研討會](https://www.eksworkshop.com/) (Amazon EKS 研討會）
+ [AWS 和 Kubecost 協同合作，為 EKS 客戶提供成本監控](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/) (AWS 部落格）
+ [Amazon EKS Finhack 研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/c4ab40ed-0299-4a4e-8987-35d90ba5085e/en-US) (AWS Workshop Studio)
+ [上的 Windows 容器 AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/1de8014a-d598-4cb5-a119-801576492564/en-US) (AWS Workshop Studio)