Kubernetesを本番環境で運用していると、「なぜこんなにAWS料金が高いのか」と驚くことがあります。Kubernetesはスケーラビリティと信頼性を提供する一方で、設定を誤るとリソースの無駄遣いが発生しやすい構造を持っています。本稿では、実際のプロジェクトで効果のあったコスト最適化手法を体系的に紹介します。
コスト増加の主要因
Kubernetesクラスタのコストが想定より高くなる主な原因を整理すると、以下の3点に集約されます。
- オーバープロビジョニング:requestsとlimitsの設定が実際の使用量より大幅に高い
- アイドル時間のコスト:夜間・週末もフル稼働しているノードグループ
- スポットインスタンス未活用:On-DemandインスタンスのみでノードPOOLを構成
手法1:Vertical Pod Autoscaler (VPA) によるリソース最適化
多くのチームは、requestsとlimitsを「安全マージン」として実際の使用量の2〜3倍に設定します。これにより、スケジューラはノードに不必要な数のPodを配置できず、ノード使用率が30〜40%にとどまるケースが頻発します。VPAのRecommendationモードを活用すると、実際のCPU・メモリ使用量から適切な値を算出できます。
適用例:あるSaaSサービスでVPA推奨値を適用したところ、ノード台数を12台から7台に削減でき、月間コストが約42%低下しました。
手法2:Cluster Autoscalerとスポットインスタンスの組み合わせ
AWSのEKSでは、マネージドノードグループにスポットインスタンスを混在させることが可能です。Cluster Autoscalerと組み合わせることで、負荷が低い時間帯は自動でノードを縮小し、ピーク時に必要なノードをスポットインスタンスで動的に追加する構成が実現できます。スポットインスタンスはOn-Demandと比較して最大90%安くなるケースもあります。
注意点:ステートレスなワークロードには適しますが、データベースやキャッシュなどステートフルなワークロードへのスポット適用はデータ損失リスクがあるため避けてください。
手法3:Karpenterによるインテリジェントなノードプロビジョニング
AWSが開発したオープンソースのKarpenterは、PodのリクエストをリアルタイムでAWS APIに伝え、最適なインスタンスタイプとサイズを動的に選択します。従来のCluster Autoscalerより高速・柔軟で、特にコストとパフォーマンスのバランス最適化に優れています。
手法4:KEDA によるイベント駆動オートスケーリング
Kubernetes Event-driven Autoscaling (KEDA) を使うと、CPU/メモリだけでなく、SQSキュー深度・Kafkaパーティション・Prometheusメトリクスなど任意のシグナルに基づいてPod数を制御できます。バッチ処理やキュードリブンなワークロードでは、アイドル時のPod数を0にすることも可能です。
コスト可視化ツール比較
| ツール | 特徴 | コスト |
|---|---|---|
| Kubecost | Kubernetesネイティブのコスト可視化。Pod・Namespace単位で費用を分解 | 無料〜(商用版あり) |
| AWS Cost Explorer | AWSリソース全体のコスト分析。タグベースの分類 | 無料 |
| OpenCost | CNCFのオープンソース。Kubecostと互換性あり | 無料 |
| Spot.io (Spot by NetApp) | スポットインスタンス自動化に特化 | 有料 |
まとめ:コスト最適化は継続的なプロセス
Kubernetesのコスト最適化は、一度やれば終わりではなく、チームの文化として継続的に取り組む必要があります。重要なのは可視化(何にいくらかかっているか)→ 分析(なぜそのコストが発生しているか)→ 改善(削減または適正化)のサイクルを回し続けることです。
MidoriTech Solutionsでは、Kubernetesコスト最適化の診断から改善実施まで対応しています。まずはご相談ください。