

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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/)から個々の[ポッド](https://kubernetes.io/docs/concepts/workloads/pods/)に至るまで Kubernetes インフラストラクチャのコストを分析し、そのデータをダッシュボードに表示できます。Kubecost は、コンピューティングやストレージなどのクラスター内コストと、[Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) バケットや [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) インスタンスなどのクラスター外コストを明らかにします。Kubecost は、このデータに基づいて適切なサイズ設定の推奨を行い、システムに影響を与える可能性のある重要なアラートを表示します。Kubecost は [AWS Cost and Usage Report](https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html) と[統合](https://www.ibm.com/docs/en/kubecost/self-hosted/1.x?topic=integrations-aws-cloud-billing-integration)して、[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 デプロイのコストを視覚化するレポートとダッシュボードを提供します。これにより、クラスターから、コントローラー、サービス、ノード、ポッド、ボリュームなどのさまざまな各コンポーネントにドリルダウンできます。また、これにより、Amazon EKS 環境で実行されているアプリケーションの全体像を把握できます。この可視性を有効にすると、Kubecost の推奨事項に基づいて行動したり、各アプリケーションのコストをきめ細かく表示したりできます。Amazon EKS ノードグループのサイズを適切に設定すると、標準の EC2 インスタンスと同じ削減可能額が得られます。コンテナとノードのサイズを適切に設定できる場合は、コンテナの実行に必要なインスタンスのサイズと Auto Scaling グループに必要な 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 Workshop](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 のインストールと設定の手順については、[Kubecost の公式ドキュメント](https://www.ibm.com/docs/en/kubecost/self-hosted/3.x?topic=installation)を参照することもできます。Windows ノードの Kubecost サポートの詳細については、Kubecost ドキュメントの「[Windows Node Support](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 スポットインスタンス](https://aws.amazon.com/ec2/spot/)を使用すると大幅なコスト削減を実現できますが、Windows ワークロードがステートフルである傾向があるという事実からもメリットを得ることができます。スポットインスタンスの使用はアプリケーションによって異なります。ユースケースに該当するかどうかを確認することをお勧めします。

Windows アプリケーションの詳細なコスト内訳を取得するには、[Kubecost にログイン](https://auth.app.kubecost.com/login)します。ナビゲーションページで、**[削減額]** を選択します。

### クラスターノードを適切にサイズ設定する
<a name="kubecost-overview-rec-rightsize-cluster"></a>

[Kubecost](https://auth.app.kubecost.com/login) で、ナビゲーションバーから **[削減額]** を選択し、**[クラスターノードを適切なサイズにする]** を選択します。

クラスターが vCPU と RAM の両方の点で過剰にプロビジョニングされていることを Kubecost が報告する例を考えてみましょう。次の表は、Kubecost の詳細と推奨事項を示しています。


****  

|   | Current | 推奨事項: シンプル | 推奨事項: 複雑 | 
| --- | --- | --- | --- | 
| 合計数 | 1 か月あたり 3,462.57 USD | 1 か月あたり 137.24 USD | 1 か月あたり 303.68 USD | 
| ノード数 | 4 | 5 | 4 | 
| CPU | 74 個の vCPU | 10 個の vCPU | 8 個の vCPU | 
| RAM | 152 GB | 20 GB | 18 GB | 
| インスタンスの内訳 | 2 個の c5.xlarge \$1 他 2 個 | 5 個の t3a.medium | 2 個の c5n.large \$1 他 1 個 | 

Kubecost ブログ記事「[Find an optimal set of nodes for a Kubernetes cluster](https://blog.kubecost.com/blog/cluster-right-sizing/)」で説明されているように、シンプルなオプションでは単一のノードグループを使用しますが、複雑なオプションではマルチノードグループのアプローチを使用します。**[導入する方法]** ボタンを使用すると、ワンクリックでクラスターのサイズ変更を実行できます。これには、[Kubecost Cluster Controller](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)を使用している場合は、「[Updating an existing self-managed node group](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) で、ナビゲーションバーから **[削減額]** を選択し、**[適切なサイズの推奨事項をリクエストする]** ページに移動します。このページには、ポッドの[効率](https://www.ibm.com/docs/en/kubecost/self-hosted/2.x?topic=dashboard-efficiency-idle)、適切なサイズの推奨事項、および推定コスト削減額が表示されます。**[カスタマイズ]** ボタンを使用して、**クラスター**、**ノード**、**名前空間\$1コントローラー**などでフィルタリングできます。

例えば、CPU と RAM (メモリ) の点で一部のポッドが過剰にプロビジョニングされていると Kubecost が計算したとします。その場合、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) で、ナビゲーションバーから **[削減額]** を選択し、**[使用率の低いノードを管理する]** を選択します。

クラスター内の 1 つのノードが CPU と RAM (メモリ) の点で十分に使用されていないため、ドレインして終了するかサイズ変更できることがページに示されている例を考えてみましょう。ノードとポッドのチェックに合格しないノードを選択すると、ドレインできない理由の詳細が表示されます。

### 中止されたワークロードを修復する
<a name="kubecost-overview-rec-abandoned-workloads"></a>

[Kubecost](https://auth.app.kubecost.com/login) で、ナビゲーションバーから **[削減額]** を選択し、**[中止されたワークロード]** ページを選択します。この例では、**windows** と呼ばれる名前空間でフィルタリングします。このページには、トラフィックのしきい値を満たしておらず、中止されたと見なされるポッドが表示されます。ポッドは、定義された期間に一定量のネットワークトラフィックを送受信する必要があります。

1 つ以上のポッドが中止されていることを慎重に検討した後、レプリカの数をスケールダウンしたり、デプロイを削除したり、消費するリソースが少なくなるようにサイズを変更したり、デプロイが中止されたと思われることをアプリケーション所有者に通知したりすることで、コストを削減できます。

### 推奨事項に基づいて行動する
<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)の 2 つのタイプがあります。

### セルフマネージドノードを更新する
<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 ノードグループがあり、ポッドを `ng-windows-t3-large`** **(コストを削減するために t3.large EC2 インスタンスによってバックアップされる) という[新しいノードグループ](https://docs.aws.amazon.com/eks/latest/userguide/launch-windows-workers.html)に移行するとします。

`eksctl` によってデプロイされたノードグループを使用するときに新しいノードグループに移行するには、以下を実行します。

1. ポッドが現在存在するノードを見つけるには、`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` コマンドを再度実行します。出力は、ポッドがすべて再び**実行中**状態になっていることを示しています。

1. ポッドが現在ノードグループ `ng-windows-t3-large` で実行されていることを表示するには、`kubectl describe pod <pod_name> -n <namespace>` コマンドと `kubectl describe node <node_name>` コマンドを再度実行します。

### 代替のサイズ変更方法
<a name="kubecost-overview-rec-alternative-resizing"></a>

この方法は、セルフマネージド型またはマネージド型ノードグループの任意の組み合わせに適用されます。ブログ記事「[Seamlessly migrate workloads from EKS self-managed node group to EKS-managed node groups](https://aws.amazon.com/blogs/containers/seamlessly-migrate-workloads-from-eks-self-managed-node-group-to-eks-managed-node-groups/)」には、ダウンタイムなしで、オーバーサイズのインスタンスタイプを持つ 1 つのノードグループから、適切にサイズ設定されたノードグループにワークロードを移行する方法に関するガイダンスが記載されています。

## 次の手順
<a name="kubecost-next-steps"></a>

Kubecost を使用すると、Amazon EKS 環境のコストを簡単に視覚化できます。Kubecost と Kubernetes および AWS APIs の深い統合は、潜在的なコスト削減を見つけるのに役立ちます。これらは、Kubecost の **[削減額]** ダッシュボードで推奨事項として確認できます。Kubecost は、[クラスターコントローラー機能](https://github.com/kubecost/cluster-turndown)を通じて、これらの推奨事項の一部を実装することもできます。

「」のstep-by-stepデプロイ[AWS 」と「Kubecost collaborate to deliver cost monitoring for EKS customers](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/)」のブログ記事を AWS Containers ブログから参照することをお勧めします。

## その他のリソース
<a name="kubecost-additional-resources"></a>
+ 「[Amazon EKS Workshop](https://www.eksworkshop.com/)」(Amazon EKS Workshop)
+ [AWS と Kubecost が共同で EKS 顧客のコストモニタリングを提供](https://aws.amazon.com/blogs/containers/aws-and-kubecost-collaborate-to-deliver-cost-monitoring-for-eks-customers/) (AWS ブログ)
+ [Amazon EKS Finhack Workshop](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)