翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
支出認識
支出認識とは、誰が、どこで、何が EKS クラスターで支出を引き起こしているかを理解することです。このデータを正確に把握することで、支出に対する認識を高め、修復すべき領域を強調できます。
レコメンデーション
Cost Explorer を使用する
AWS Cost Explorer
EKS コントロールプレーンと EKS Fargate のコスト
フィルターを使用すると、次の図に示すように、コントロールプレーンと Fargate Pod で EKS コストに対して発生したコストをクエリできます。

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

リソースのタグ付け
Amazon EKS は、Amazon EKS クラスターへの AWS タグの追加をサポートしています。これにより、クラスターを管理するための 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 でコスト配分タグをアクティブ化すると、AWS はコスト配分タグを使用してコスト配分レポートのリソースコストを整理し、AWS コストの分類と追跡を容易にします。
タグには Amazon EKS に関する意味論的な意味はなく、完全に文字列として解釈されます。例えば Amazon EKS クラスターに一連のタグを定義して、各クラスターの所有者とスタックレベルを追跡できます。
AWS Trusted Advisor を使用する
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 ダッシュボードを使用する
Kubernetes ダッシュボード
Kubernetes Dashboard は、Kubernetes クラスター用の汎用ウェブベースの UI で、クラスター、ノード、ポッドレベルでのリソース使用量など、Kubernetes クラスターに関する情報を提供します。Amazon EKS クラスターへの Kubernetes ダッシュボードのデプロイについては、Amazon EKS ドキュメントで説明されています。
ダッシュボードには、各ノードとポッドのリソース使用状況の内訳と、ポッド、サービス、デプロイ、その他の Kubernetes オブジェクトに関する詳細メタデータが表示されます。この統合された情報により、Kubernetes 環境を可視化できます。

kubectl 上部および describe コマンド
kubectl 上部と kubectl でリソース使用状況メトリクスを表示すると、コマンドが記述されます。kubectl 上部には、クラスター全体のポッドまたはノード、または特定のポッドまたはノードの現在の 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 を使用する
CloudWatch Container Insights を使用して、コンテナ化されたアプリケーションとマイクロサービスからメトリクスとログを収集、集計、要約します。Container Insights は、EC2 上の Amazon Elastic Kubernetes Service、および Amazon EC2 上の Kubernetes プラットフォームで使用できます。このメトリクスには、CPU、メモリ、ディスク、ネットワークなどのリソース使用率が含まれます。
インサイトのインストールについては、 ドキュメントを参照してください。
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 ドキュメントでは、さらに多くのサンプルクエリが提供されています。
この認識は、リソースの使用状況を理解し、コストを制御するのに役立ちます。
支出の認識とガイダンスに Kubecost を使用する
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 は、Kubernetes コストを正確に配分するのに役立ちます。Yotascale Kubernetes Cost Allocation 機能は、一般的な市場レートの見積もりではなく、リザーブドインスタンスの割引とスポットインスタンスの料金を含む実際のコストデータを利用して、Kubernetes のコストフットプリントの合計を通知します。
詳細については、ウェブサイト
Alcide Advisor
Alcide は AWS パートナーネットワーク (APN) アドバンストテクノロジーパートナーです。Alcide Advisor は、Amazon EKS クラスター、ノード、ポッドの設定を、セキュリティのベストプラクティスと内部ガイドラインに従って実行するように調整するのに役立ちます。Alcide Advisor は、Kubernetes 監査とコンプライアンスのためのエージェントレスサービスであり、本番環境に移行する前に開発ステージを強化することで、摩擦がなく安全な DevSecOps フローを保証するように構築されています。
詳細については、このブログ記事
その他のツール
Kubernetes ガベージコレクション
Kubernetes ガベージコレクター
Fargate の数
Fargatecount
ポップアイ - Kubernetes クラスターサニタイザー
Popeye - Kubernetes クラスターサニタイザー
リソース
コスト最適化のベストプラクティスの詳細については、以下のリソースを参照してください。