Kubernetesのリソースに何百万ドルも浪費

By 清水 孝郎 - MARCH 2, 2023

SHARE:

Mercari

本文の内容は、2023年3月2日に JAVIER MARTÍNEZ が投稿したブログ(https://sysdig.com/blog/millions-wasted-kubernetes)を元に日本語に翻訳・再構成した内容となっております。 Sysdig 2023年度クラウドネイティブセキュリティおよび利用状況レポートは、組織がクラウド環境をどのように管理しているのかに光を当てました。実際のお客様をベースに、数十億のコンテナのデータを集約し、2023年のクラウドネイティブの状況をスナップショットとしてまとめたレポートです。 当社のレポートでは、以下の分野のクラウドプロジェクトからデータを取得しています。

  • CPUとメモリの使用量が必要以上に少ないコンテナの数
  • CPUのリミットが設定されていないコンテナの数
  • オーバーアロケーションと推定損失

リミットとリクエスト

この1年間で、リミットとリクエストの重要性を取り上げてきました。簡単に言えば、これらはそれぞれコンテナに対するコンピューティング・リソースの最大量と保証量を指定する方法を提供するものです。 しかし、それだけではなく、特定のプロセスに対する企業の意思を示すものでもあります。また、そのコンテナを実行するPodのeviction ティアレベルやQoSを定義することも可能です。 私たちの調査によると:
  • 49% のコンテナで、メモリのリミットが設定されていません。
  • 59%のコンテナで、CPUのリミットが設定されていません。
メモリリミットを設定すると副作用があるかもしれませんが、CPUリミットを設定して、プロセスや特定のコンテナのCPU消費量が急激に増加するような飢餓状態を回避することが重要です。 Millions wasted charts 1

59% のコンテナで CPU リミットが設定されていない

当社の調査では、59%のコンテナでCPUリミットがまったく設定されていないことがわかりました。通常、CPUリミットを設けるとスロットリングになる可能性がありますが、このレポートでは、購入したCPUの平均69%が未使用であり、キャパシティプランニングが行われていないことが示唆されています。

メモリリミットのないコンテナが49%存在

コンテナーのほぼ半分には、メモリリミットがまったくありませんでした。 メモリにリミットを追加すると最終的に OOM エラーが発生する可能性があるため、この特定のケースは特別です。

Kubernetesのオーバーアロケーション

クラウドプロバイダーは、クリックするだけの簡単な操作でアプリケーションを実行できるオプションをたくさん提供しており、これは監視の旅を始めるには最適な方法です。しかし、クラウドネイティブの企業は、飽和状態になるのを避けるためだけにリソースを割り当てる傾向があり、これが天文学的なコストにつながることがあります。 なぜこのようなことが起こるのでしょうか?
  • 迅速なスケーリングの必要性
  • リソース消費の可視化不足
  • マルチテナント・スケーリング
  • Kubernetesの知識不足
  • キャパシティプランニングの欠如
Millions wasted charts 2 CPUはクラウドインスタンスで最もコストのかかるリソースであるため、企業は決して使用しないものに過剰に費用を掛けている可能性があります。 CPUとメモリをベースにしたノードのAWS価格の平均コストを使用することで、これらの問題に対処する企業の平均節約額を計算することができます。 具体的には、1,000台以上のノードを持つ企業では、年間1,000万ドルの無駄なリソースを削減することができることが示されました。 Millions wasted charts 3

CPUオーバーコミットメント

設定されたリミットが実際のCPUよりも高い場合、Kubernetesノードが表示されます:
Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.)
これは、Kubernetesが一部のプロセスをスロットルして、より高いCPU使用率を提供することを意味します。

コスト削減戦略

キャパシティプランニング

アプリケーションを使用してリソースの使用状況を追跡し、キャパシティプランニングを実行することで、企業はこれらのコストを軽減し、明確な投資/リターンの純益を得ることができます。リミットとリクエストはどちらも使用量を制限するのに便利なツールですが、Podのevictionや過剰なコミットメントにつながる可能性があり、面倒な場合もあります。 リミットレンジは、ネームスペース内のすべてのコンテナに対して、リミットとリクエストの両方の値域を自動的に割り当てる便利なツールです。

オートスケーリング

垂直オートスケーリング(必要に応じてリソースサイズを増やす)と水平オートスケーリング(利用率に基づいてPodの量を増減する)の両方を使用して、クラウドネイティブなソリューションの現在のニーズに動的に適応させることができます。

リソースクォータ

マルチテナントのソリューションを持つ企業では、リソースの面で他のプロジェクトよりも要求の高いプロジェクトがあるという問題に思い当たるかもしれません。このため、同じリソースを割り当てると、最終的に過剰な出費を招く可能性があります。 そのため、ResourceQuotasを使用して、ネームスペース内のすべてのプロセスで消費されるリソースの最大量を設定することができます。

まとめ

近年、クラウド・ソリューションに投資する企業が急増しています。 しかし、大きな力には大きな責任が伴います。クラウド・プロジェクトでは、CPUやメモリなどのリソースのバランスを取りたいと思うかもしれません。 一般的には、飽和状態にならないような十分なリソースを割り当てたいと考えます。しかし一方で、過剰に割り当てれば、未使用のリソースに膨大な費用がかかることになります。 ソリューション? キャパシティ プランニング、自動スケーリング、およびコストの可視化は、クラウド ネイティブの支出を管理するための最適なツールです。

Sysdig MonitorでKubernetesのコストを削減する

Sysdig Monitorは、「監視の旅」の次のステップに到達するためのお手伝いをします。 Cost Advisorを利用すれば、Kubernetesのリソースの無駄を最大40%削減できます。 また、アウトオブボックスのKubernetesダッシュボードを利用すれば、数回のクリックで十分に活用されていないリソースを発見できます。 Custom metrics monitoring 30日間無料でお試しください!