

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

# 支出認識
<a name="cost-opt-awareness"></a>

支出認識とは、誰が、どこで、何が EKS クラスターで支出を引き起こしているかを理解することです。このデータを正確に把握することで、支出に対する認識を高め、修復すべき領域を強調できます。

## 推奨事項
<a name="_recommendations"></a>

### Cost Explorer を使用する
<a name="_use_cost_explorer"></a>

 [AWS Cost Explorer](https://aws.amazon.com/aws-cost-management/aws-cost-explorer/) には、easy-to-useインターフェイスがあります。Cost Explorer で利用可能なフィルターを使用して、コストと使用状況のデータをさまざまなレベルで分析できます。

#### EKS コントロールプレーンと EKS Fargate のコスト
<a name="_eks_control_plane_and_eks_fargate_costs"></a>

フィルターを使用すると、次の図に示すように、コントロールプレーンと Fargate Pod で EKS コストについて発生したコストをクエリできます。

![Cost Explorer - EKS コントロールプレーン](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/eks-controlplane-costexplorer.png)


フィルターを使用すると、EKS のリージョン全体で Fargate Pod に発生した総コストをクエリできます。これには、次の図に示すように、CPU あたりの vCPU 時間数と GB 時間の両方が含まれます。

![Cost Explorer - EKS Fargate](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/eks-fargate-costexplorer.png)


#### リソースのタグ付け
<a name="_tagging_of_resources"></a>

Amazon EKS は、Amazon EKS クラスターへの [AWS タグの追加](https://docs.aws.amazon.com/eks/latest/userguide/eks-using-tags.html)をサポートしています。これにより、クラスターを管理するための EKS API へのアクセスを簡単に制御できます。EKS クラスターに追加されたタグは AWS EKS クラスターリソースに固有であり、EC2 インスタンスやロードバランサーなど、クラスターで使用される他の AWS リソースには伝達されません。現在、クラスターのタグ付けは、AWS API、コンソール、および SDKs。

AWS Fargate は、[コンテナ] に適切なサイズのコンピューティング能力をオンデマンドで提供するテクノロジーです。クラスターの Fargate でポッドをスケジューリングする前に、起動時に Fargate を使用するポッドを指定する Fargate プロファイルを少なくとも 1 つ定義する必要があります。

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](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) でコスト配分タグをアクティブ化すると、AWS はコスト配分タグを使用してコスト配分レポートのリソースコストを整理し、AWS コストの分類と追跡を容易にします。

タグには Amazon EKS に関する意味論的な意味はなく、完全に文字列として解釈されます。例えば Amazon EKS クラスターに一連のタグを定義して、各クラスターの所有者とスタックレベルを追跡できます。

### AWS Trusted Advisor を使用する
<a name="_use_aws_trusted_advisor"></a>

AWS Trusted Advisor は、コスト最適化、セキュリティ、耐障害性、パフォーマンス、サービス制限の 5 つのカテゴリにわたって、さまざまなベストプラクティスチェックと推奨事項を提供します。

コスト最適化のために、Trusted Advisor は未使用のリソースとアイドル状態のリソースを排除し、リザーブドキャパシティーへのコミットメントを推奨します。Amazon EKS に役立つ主なアクション項目は、使用率の低い EC2 インスタンス、関連付けられていない Elastic IP アドレス、アイドルロードバランサー、使用率の低い EBS ボリュームなどです。チェックの完全なリストは、https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-practice-checklist/ で入手できます。

Trusted Advisor はEC2 インスタンスと Fargate の Savings Plans とリザーブドインスタンスのレコメンデーションも提供します。これにより、割引料金と引き換えに一貫した使用量にコミットできます。

**注記**  
Trusted Advisor からの推奨事項は一般的な推奨事項であり、EKS に固有のものではありません。

### Kubernetes ダッシュボードを使用する
<a name="_use_the_kubernetes_dashboard"></a>

 ** *Kubernetes ダッシュボード* ** 

Kubernetes Dashboard は、Kubernetes クラスター用の汎用ウェブベースの UI で、クラスター、ノード、ポッドレベルでのリソース使用量など、Kubernetes クラスターに関する情報を提供します。Amazon EKS クラスターへの Kubernetes ダッシュボードのデプロイについては、[Amazon EKS ドキュメント](https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html)で説明されています。

ダッシュボードには、各ノードとポッドのリソース使用状況の内訳と、ポッド、サービス、デプロイ、その他の Kubernetes オブジェクトに関する詳細なメタデータが表示されます。この統合された情報により、Kubernetes 環境を可視化できます。

![Kubernetes ダッシュボード](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/kubernetes-dashboard.png)


 ** *kubectl 上部と describe コマンド* ** 

kubectl top および kubectl describe コマンドを使用したリソース使用状況メトリクスの表示。kubectl top は、クラスター全体のポッドまたはノード、または特定のポッドまたはノードの現在の CPU とメモリの使用状況を表示します。kubectl describe コマンドは、特定のノードまたはポッドに関する詳細情報を提供します。

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

トップコマンドを使用すると、出力にはノードが使用している CPU (コア単位) とメモリ (MiB 単位) の合計量と、それらの数値が表すノードの割り当て可能な容量の割合が表示されます。その後、--*containers *フラグを追加して、ポッド内の次のレベルのコンテナレベルにドリルダウンできます。

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

 *kubectl describe* は、各リソースリクエストまたは制限が表す使用可能な合計容量の割合を返します。

kubectl は、kubernetes ポッド、ノード、コンテナ間で CPU、メモリ、ストレージなどの重要なリソースの使用率と可用性を追跡し、説明します。この認識は、リソースの使用状況を理解し、コストを制御するのに役立ちます。

### CloudWatch Container Insights を使用する
<a name="_use_cloudwatch_container_insights"></a>

[CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) を使用して、コンテナ化されたアプリケーションとマイクロサービスからメトリクスとログを収集、集約、要約します。Container Insights は、EC2 上の Amazon Elastic Kubernetes Service、および Amazon EC2 上の Kubernetes プラットフォームで使用できます。このメトリクスには、CPU、メモリ、ディスク、ネットワークなどのリソース使用率が含まれます。

インサイトのインストールについては、 [ドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html)を参照してください。

CloudWatch は、クラスター、ノード、ポッド、タスク、サービスレベルで 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 ドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-view-metrics.html)では、さらに多くのサンプルクエリが提供されています。

この認識は、リソースの使用状況を理解し、コストを制御するのに役立ちます。

### Kubecost を使用した支出の認識とガイダンス
<a name="_using_kubecost_for_expenditure_awareness_and_guidance"></a>

[kubecost](https://kubecost.com/) などのサードパーティーツールを Amazon EKS にデプロイして、Kubernetes クラスターの実行コストを可視化することもできます。Kubecost を使用したコストの追跡については、この [AWS ブログ](https://aws.amazon.com/blogs/containers/how-to-track-costs-in-multi-tenant-amazon-eks-clusters-using-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 Cluster Auto Scaler logs](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/kube-cost.png) 

### Kubernetes コスト配分とキャパシティプランニング分析ツールを使用する
<a name="_use_kubernetes_cost_allocation_and_capacity_planning_analytics_tool"></a>

 [Kubernetes Opex Analytics](https://github.com/rchakode/kube-opex-analytics) は、組織が Kubernetes クラスターで消費されているリソースを追跡して過払いを防ぐのに役立つツールです。そのために、短期 (7 日）、中期 (14 日）、長期 (12 か月) の使用状況レポートを生成し、各プロジェクトが時間の経過とともに費やしているリソースの量に関する関連インサイトを示します。

![Kubernetes Opex 分析](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/kube-opex-analytics.png)


### ヨータスケール
<a name="_yotascale"></a>

Yotascale は、Kubernetes コストを正確に配分するのに役立ちます。Yotascale Kubernetes Cost Allocation 機能は、一般的な市場レートの見積もりではなく、リザーブドインスタンスの割引とスポットインスタンスの料金を含む実際のコストデータを利用して、Kubernetes のコストフットプリントの合計を通知します。

詳細については、[ウェブサイト](https://www.yotascale.com/)を参照してください。

### Alcide Advisor
<a name="_alcide_advisor"></a>

Alcide は AWS パートナーネットワーク (APN) アドバンストテクノロジーパートナーです。Alcide Advisor は、Amazon EKS クラスター、ノード、ポッドの設定を、セキュリティのベストプラクティスと内部ガイドラインに従って実行するように調整するのに役立ちます。Alcide Advisor は、Kubernetes 監査とコンプライアンスのためのエージェントレスサービスであり、本番環境に移行する前に開発段階を強化することで、摩擦がなく安全な DevSecOps フローを保証するように構築されています。

詳細については、この[ブログ記事](https://aws.amazon.com/blogs/apn/driving-continuous-security-and-configuration-checks-for-amazon-eks-with-alcide-advisor/)を参照してください。

## その他のツール
<a name="_other_tools"></a>

### Kubernetes ガベージコレクション
<a name="_kubernetes_garbage_collection"></a>

[Kubernetes ガベージコレクター](https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/)の役割は、以前は所有者を持っていたが、もう所有者を持たない特定のオブジェクトを削除することです。

### Fargate の数
<a name="_fargate_count"></a>

 [Fargatecount](https://github.com/mreferre/fargatecount) は便利なツールです。AWS のお客様は、カスタム CloudWatch メトリクスを使用して、特定のアカウントの特定のリージョンで Fargate にデプロイされた EKS ポッドの総数を追跡できます。これにより、EKS クラスター全体で実行されているすべての Fargate ポッドを追跡できます。

### Popeye - Kubernetes クラスターサニタイザー
<a name="_popeye_a_kubernetes_cluster_sanitizer"></a>

 [ポップアイ - Kubernetes クラスターサニタイザー](https://github.com/derailed/popeye)は、ライブ Kubernetes クラスターをスキャンし、デプロイされたリソースと設定に関する潜在的な問題をレポートするユーティリティです。ディスクに配置されているものではなく、デプロイされたものに基づいてクラスターをサニタイズします。クラスターをスキャンすることで、設定ミスを検出し、ベストプラクティスを確実に実施できます。

### リソース
<a name="_resources"></a>

コスト最適化のベストプラクティスの詳細については、以下のリソースを参照してください。

#### ドキュメントとブログ
<a name="_documentation_and_blogs"></a>
+  [Amazon EKS がタグ付けをサポート](https://docs.aws.amazon.com/eks/latest/userguide/eks-using-tags.html) 

#### ツール
<a name="_tools"></a>
+  [AWS Billing and Cost Management とは](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) 
+  [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 
+  [Kubecost を使用してマルチテナント Amazon EKS クラスターのコストを追跡する方法](https://aws.amazon.com/blogs/containers/how-to-track-costs-in-multi-tenant-amazon-eks-clusters-using-kubecost/) 
+  [Kubecost](https://kubecost.com/) 
+  [Kube Opsview](https://github.com/hjacobs/kube-ops-view) 
+  [Kubernetes Opex 分析](https://github.com/rchakode/kube-opex-analytics) 