システム運用管理ソリューション
お役立ち情報
製品ブログ
この記事は、CAST AI社により公開されたブログ記事を元に翻訳・作成したものです。元の記事については以下をご覧ください。
(記事最終更新日:2022年8月9日)
Amazon EKS のコストを 15 分で半分に削減する方法
過剰なプロビジョニングは、チームがクラウド料金を常に増加させている最大の理由です。しかし、AWSが提供する何百ものオプションから最適なインスタンスを選択することは難しいことです。幸いなことに、自動化を利用すれば、15分でEKSのコストを削減することができます。このケーススタディで詳細をご覧ください。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/DES-252-How-to-Reduce-Your-Amazon-EKS-Costs-COVER.png)
どれが必要なパフォーマンスを提供してくれるのか、どうやって判断すればいいのでしょうか?幸いなことに、自動化ソリューションがそれを可能にしてくれるのです。モバイルマーケティング企業のBranch.ioは、スポットインスタンスの自動化とライトサイジングを活用することで、年間数百万ドルのコスト削減を実現しました。
それらがどのように機能するかに興味がある場合は、私の旅をたどって、CAST AI を使用して Amazon EKS で Kubernetes コンテナを実行するコストを 15 分で 66% 削減した方法をご覧ください。
まず、AWS EKSの6つのm5ノード(2 vCPU、8 GiB)を持つEKSクラスタにeコマースアプリ(こちら)をプロビジョニングしました。次に、CAST AIを導入して、アプリケーションを分析し、最適化を提案しました。最後に、自動最適化を有効にして、システムが継続的に自己最適化するのを確認しました。
当初のクラスタコストは月額414 ドルでした.しかし、15分以内に、完全に自動化された方法で、6つのノードを3つのノードに減らすことによって、クラスタコストは207ドルになりました(50%の削減)。さらにその5分後、スポットインスタンスを使用してクラスタコストは月額138ドルにまで下がりました(66%の削減)。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/cast-ai-optimization1.png)
ステップ 1: アプリのデプロイと削減可能性の発見
EKSの6ノードにアプリをデプロイしました。これが導入前の状態です。すべてのノードが空っぽでした。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/6nodes-on-eks-before.png)
クラスターは eksctl により作成しました。
eksctl create cluster ?name Boutique-blog-lg -N 6 ?instance-types m5.large ?managed ?region us-east-2
そして、デプロイ後の様子がこちらです(ポッドを可視化するのに便利なオープンソースプロジェクト、kube-ops-viewを使用しています)。緑色の長方形がポッドです。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/6nodes-on-eks-after.png)
Kubernetesでは、アプリケーションのポッド(コンテナ)は、デフォルトですべてのノードに均等に分散されます。Kubernetesは公平なオーケストレーションエンジンであり、そういうものなのです。CPUは40%から50%の間です。
注:EKSのオートスケーリング機構は、CAST AIが代替するため、あえてすべて無効にしています。
さて、いよいよEKSクラスタをCAST AIに接続します。CAST AIで無料アカウントを作成し、「Connect your cluster」オプションを選択しました。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/connect-cluster.png)
CAST AIエージェントは、EKSクラスタ(その仕組みについてはこちら)を調べ、Cluster Savings Reportを作成しました。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/savings02.png)
スポットインスタンスの使用レベルに応じて、達成できる節約額が異なることがわかります。一般に、スポットのみのクラスタは最大限の節約をもたらし、スポットフレンドリーなクラスタはバランスが取れており、スポット使用しないと節約が最小となります。
ここで、6台のm5.largeインスタンスを、CAST AIが推奨する3台のc5a.largeに変更すれば、請求額を60%近く削減できることがわかりました。いい計画ですね!
スポットインスタンスを使用すると、さらに高い節約率(66.5%)を得ることができました。
ステップ 2: コスト最適化の有効化
コスト最適化を始めるには、オンボーディングスクリプトを実行する必要があります。このスクリプトは、クラスタをマネージド状態にオンボードし、自動的に最適化できるようにします。これを実行するために、CAST AIはここに説明されている追加の認証情報を必要とします。
ステップ 3: ポリシーを有効化
まず、CAST AIにクラスタ全体を管理させるか、一部のワークロードだけを管理させるかを決めなければなりません。今回はCAST AIに無視されるべきワークロードはないため、標準のオートスケーラーを選択します。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/image3.png)
次に、関連するポリシーをすべて有効にします。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/turn-on-all-the-elevant-policies.png)
オートスケーラーの設定も構成できます。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/image2.png)
このページに記載されている内容の簡単な概要は以下となります。
Unscheduled pods policy(スケジュールされていないポッドのポリシー)
このポリシーは、Kubernetesクラスターのサイズを自動的に調整し、すべてのPodが実行する場所を確保するようにします。また、ここでスポットインスタンスポリシーをオンにし、スポットフォールバックを使用して、スポットインスタンスが中断されたときにワークロードが実行する場所を確保するようにしています。
Node deletion policy(ノード削除ポリシー)
このポリシーは、ワークロードがスケジュールされなくなったノードをクラスタから自動的に削除します。これにより、クラスタは最小限のフットプリントを維持し、コストを大幅に削減することができます。設定項目のEvictorを有効にすることで、Podをより少ないノードに継続的に圧縮することができ、大幅なコスト削減が実現します!
CPU limit policy(CPU制限ポリシー)
このポリシーは、定義されたCPUリソースを定義された制限値内に維持します。クラスタは最大と最小のしきい値を超えることはできません。
Evictorを有効にして動作するように設定しました。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/image4.png)
Evictor の動作は次のようになります。
- 1つのノード(以下の赤色)が削除の候補として特定されます。
- Evictor はポッドをほかのノードに自動的に移動する「ビンパッキング」を行います。
- ノードが空になると、クラスタから削除されます。
- ステップ 1 に戻ります。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/evictor-before.png)
1 つのノードが削除されます。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/evictor-after1.png)
Evictorのログは次のとおりです。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/image1.png)
これで、2 番目と 3 番目のノードが削除され、残りの 3 つのノードは次のようになります。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/evictor-after2.png)
約10分後、Evictorは3つのノードを削除し、3つのノードを稼働させたままにしています。なお、CPUの稼働率は80%とかなり健全な状態になっています。
このクラスタのコストは現在、月額207.36ドル です。これは、初期コストの月額414ドルの半分です。
予想された削減額である80%を達成することができました。CAST AIのダッシュボードに表示された内容は以下となります。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/savings01.png)
ステップ 4: 継続的な最適化のためにフルリバランスを実行する
ステップ1、2、3は完全に自動化されています。CAST AIは、無駄や過剰なプロビジョニングを排除することで、クラスタを徐々に縮小していきます。これは、ポッドをビンパッキングし、ノードを1つずつ空にすることで行われます。その瞬間からクラスタは最適化され、Evictorは時間をかけてさらなる最適化の機会を継続的に探します。
次のステップは、CAST AIがクラスタ内のすべてのノードを評価し、一部(またはすべて)を、ワークロード要件を満たす最もコスト効率の良いノードに置き換えるフルリバランシングを実行することです。
ノードが遮断されます。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/nodes-are-cordoned.png)
最初の 2 つのノードは排出され、AI エンジンはこれらのノードに最適なインスタンス タイプを選択します。これは、CAST AI ダッシュボードで見たものです
最初の2つのノードは廃棄され、AIエンジンはこれらのノードに最も適したインスタンスタイプを選択します。CAST AIダッシュボードでは以下のように表示されます。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/cast-ai-dashboard.png)
ご覧のとおり、クラスタは現在2ノードのみとなり、月額コストは138ドルになりました。当初、EKSの月々の請求額が414.72ドルだったとは想像しがたいですね!
概要
最適化されていないセットアップから、完全に最適化されたセットアップに移行するのは簡単でした。CAST AIはセットアップを分析し、コスト削減の機会を見つけ、15分でクラスタを迅速に最適化しました。EKSの請求額は、15分で414ドルから207ドルへに半減しました。
次にCAST AIにノードを、より最適化されたノードに置き換えるよう依頼し、高度な節約を有効化し、さらなるコスト削減を達成したことで、最終的に請求額は138ドルとなりました。
さらにクラスタを全体もしくは部分的にリバランスすることで、より節約と最適化されたクラスタ状態となりました。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/cast-ai-optimization2.png)
無料の CAST AI Savings Report を実行して、どれだけ節約できるかを確認してください。これは、クラウド コストの最適化へのあらゆる旅の出発点として最適です。
![](/operationsmanagement/sp/column/blog/20221128_castai_01/image/image5.png)
よくある質問
Amazon EKS とは何ですか?
Amazon EKS(Elastic Kubernetes Service)は、Kubernetes コントロール プレーンを提供および管理する便利なサービスです。EKS は、マネージド AWS インフラストラクチャ上にコントロール プレーンと Kubernetes API を作成し、Kubernetes ワークロードを実行することができます。kubectl、Kubernetes ダッシュボード、Helm、Terraform などのネイティブ K8s ツールを使用してワークロードをデプロイできます。なお、EKS のマスター ノードは別の AWS アカウントにあるため、アクセスできません。
Amazon EKS の利点は何ですか?
Amazon EKS にはいくつかの利点があります。
Kubernetes コントロール プレーンをセットアップ、実行、または管理する必要はありません。
Kubernetes のオープンソース コミュニティ ツールとプラグインをすばやくデプロイできます。
EKS は、どの DevOps エンジニアよりも優れた負荷分散と並列処理を自動化します。
EKS を使用することで、保有するKubernetesの資産を AWS サービスで問題なく動作できます。
EKS は VPC ネットワークを使用します。
EKS ベースのアプリケーションは、既存の Kubernetes 環境のアプリケーションと互換性があります。
EKS に移行するためにコードを変更する必要はありません。
大幅なコスト削減につながるスポット インスタンスを使用するマネージド ノード グループを持つ EC2 スポット インスタンスをサポートします。
Amazon EKS は高価ですか?
EKSにより、Kubernetesクラスタごとに、1時間あたり0.1ドルの課金が発生します。これは、1クラスタあたり毎月74ドル程度を意味し、これは特に、Kubernetesのスケーラビリティレベルをうまく処理できている場合は、大した金額ではありません。請求額に 74 ドルを追加しても、全体のコンピューティング コストと比べて大きな違いはありません。
当然ながら、EKSのセットアップにかかるコストは、どのような環境で実行するかによって異なります。EC2やAWS Fargateを使ってAWS上でEKSを稼働させることができます。また、AWS Outpostsを使ったオンプレミスもあります。EC2(EKSマネージドノードグループとともに)を使用することにした場合、Kubernetesワーカーノードを実行するために作成したすべてのAWSリソースに対して支払いを行います。ほかのAWSサービスと同様に、使用した分だけ支払います。
AWS での Kubernetes の費用はいくらですか?
まず、Amazon EKSは、作成するクラスタごとに、1時間あたり0.10ドルの料金がかかります。これは、1クラスタあたり月額74ドル程度になります。Kubernetesの名前空間とIAMセキュリティポリシーのおかげで、1つのAmazon EKSクラスタを使用して複数のアプリケーションを実行することができます。
次に、コンピュートコストです。AWS上ではEC2やAWS Fargateを使ってEKSを運用することができます。
EC2の場合、ワーカーノードを実行するために作成されたすべてのAWSリソース(例えば、EC2インスタンスやEBSボリューム)に対して料金が発生します。最低料金や前払いのコミットメントはなく、使用した分だけ支払います。
また、AWS Fargateを選んだ場合、コンテナイメージのダウンロードを開始してからAmazon EKSポッドが終了するまでに使用したvCPUとメモリーリソースに基づいて料金が計算されます(金額は最も近い秒で切り上げられます)。ここでは最低料金は1分間が適用されます。