コストが最適化された Kubernetes アプリケーションを GKE で実行するためのベスト プラクティス

このドキュメントでは、Google Cloud に備えられた柔軟性を活用するため、コストが最適化されたアプリケーションを GKE で実行するための Google Kubernetes Engine(GKE)の機能、オプション、ベスト プラクティスについて説明します。このドキュメントは、Kubernetes、Google Cloud、GKE、自動スケーリングを十分に理解していることを前提としています。

はじめに

Kubernetes の普及に伴い、ワークロードにマルチテナント Kubernetes クラスタを使用する企業、Platform-as-a-Service(PaaS)プロバイダ、Software as a Service(SaaS)プロバイダが増えています。これは、1 つのクラスタで、さまざまなチーム、部門、顧客、環境に属するアプリケーションを実行できることを意味します。Kubernetes で提供されるマルチテナンシーを使用すると、企業は複数の小規模なクラスタではなく、少数の大規模なクラスタを管理できるようになり、適切なリソースの使用、管理の簡素化、断片化の減少などのメリットが得られます。

時間が経つにつれて、Kubernetes クラスタが急速に拡大している企業の中には、コストの大幅な増加を経験することがあります。これは、Kubernetes のようなクラウドベースのソリューションを採用している従来型の企業の中に、クラウドの専門知識を持つ開発者や運用担当者がいないことが原因となって起こります。このようなクラウドの readiness が不足している場合、アプリケーションが自動スケーリング中に不安定になる(たとえば、1 日の中の定期的な時間帯でトラフィックが不安定になる)こと、または突然のバーストや急激な増加(テレビ コマーシャルや、ブラック フライデーやサイバー マンデーなど、記録的なスケールのイベントなど)につながります。この問題の「修正」を試みるとき、こうした企業では、柔軟性に欠ける環境で、今まで通りのやり方を使用してクラスタを過剰にプロビジョニングする傾向があります。過剰にプロビジョニングすると、アプリケーションで使用される CPU とメモリ割り当てが、1 日のほとんどの時間帯で大幅に増加します。

このドキュメントでは、GKE でコスト最適化された Kubernetes ワークロードを実行するためのベスト プラクティスについて説明します。次の図に、この方法の概要を示します。

費用に応じて Kubernetes アプリケーションを最適化する方法。

コストが最適化されたアプリケーションを構築するための基本は、チーム間にコスト削減の文化を広めることです。この方法では、コストについての検討を開発プロセスの始めに行うだけでなく、アプリケーションが実行されている環境(ここでは GKE 環境)をよく理解する必要があります。

低コストで安定したアプリケーションを実現するには、自動スケーリング、マシンタイプ、リージョンの選択など、いくつかの機能と構成を正しく設定または調整する必要があります。また、ワークロードの種類についても検討が必要です。ワークロードの種類とアプリケーションの要件によっては、コストをさらに削減するために、別の構成が必要になることがあります。最後に、開発サイクルの早い段階でベスト プラクティスを実施できるように、費用のモニタリングとガードレールの作成を行う必要があります。

次の表は、GKE が解決をサポートする課題をまとめたものです。ドキュメント全体をお読みになることをおすすめしますが、この表に全体の内容の概要を示しています。

課題 アクション
GKE で簡単に費用を削減したい。 適切なリージョンを選択し、確約利用割引を申し込みE2 マシンタイプを使用します。
GKE の費用について理解する必要がある。 GKE クラスタを観察し、推奨事項を確認して、GKE 使用状況測定を有効化します。
既存のワークロードで GKE の弾力性を最大限に利用したい。 HorizontalPodAutoscalerクラスタ オートスケーラーを確認し、オートスケーラーとオーバープロビジョニングのベスト プラクティスを理解します。
最も効率的なマシンタイプを使用したい。 ワークロードに適切なマシンタイプを選択します。
クラスタ内の多くのノードがアイドル状態になる。 クラスタ オートスケーラーのベスト プラクティスを確認します。
バッチジョブのコスト削減を強化する必要がある。 バッチ ワークロードのベスト プラクティスを確認します。
サービス ワークロードのコスト削減を強化する必要がある。 サービス ワークロードのベスト プラクティスを確認します。
Pod のリソース リクエストのサイジング方法がわかりません。 VerticalPodAutoscaler(VPA)を使用しますが、HorizontalPodAutoscaler(HPA)と VPA の組み合わせのベスト プラクティスに注意してください。
自動スケーリングやメンテナンス アクティビティ中にアプリケーションが不安定になる。 Kubernetes 用のクラウドベースのアプリケーションを用意して、Metrics Server の仕組みとモニタリング方法を理解します。
アプリケーションのリソース使用量に開発者の注意を向けるにはどうすればよいですか? コスト削減の文化を広めGKE Enterprise Policy Controller の使用を検討し、コスト節約手法を適用するための CI/CD パイプラインを設計して、Kubernetes リソース割り当てを使用します
エコシステムのコストをさらに削減するには、他にどのようなことを考慮する必要がありますか? 小規模な開発クラスタを確認し、ロギングとモニタリングの戦略を確認して、リージョン クラスタとマルチゾーン クラスタにおけるリージョン間の下り(外向き)トラフィックを確認します。

GKE のコスト最適化機能とオプション

コストが最適化された Kubernetes アプリケーションは、GKE の自動スケーリングに大きく依存します。GKE での費用、信頼性、スケーリングのパフォーマンスのバランスをとるには、自動スケーリングの仕組みとどのような選択肢があるのかを理解する必要があります。このセクションでは、GKE 自動スケーリングと、サービス ワークロードとバッチ ワークロードの両方に役立つ、その他のコスト最適化の構成について説明します。

GKE 自動スケーリングを微調整する

自動スケーリングは、Google Cloud のお客様がインフラストラクチャの稼働時間を最小化することによって、必要なインフラストラクチャに対してのみ料金を支払うようにするために GKE が使用するものです。つまり、自動スケーリングでは、1)ワークロードとその基盤となるインフラストラクチャが需要の増加前に開始され、2)需要が落ちた場合はシャットダウンすることで、コストを節約します。

次の図に、このコンセプトを示します。Kubernetes では、ワークロードは Pod 内で実行されるコンテナ化されたアプリケーションであり、一連のノードで構成される基盤となるインフラストラクチャは、ワークロードを実行するために十分なコンピューティング能力を提供する必要があります。

自動スケーリングでは、1)ワークロードとその基盤となるインフラストラクチャを需要が増加する前に開始し、2)需要が落ちたときにシャットダウンすることにより、コストを削減します。

次の図に示すように、この環境ではスケーラビリティの次元が 4 つあります。ワークロードとインフラストラクチャは、Pod や Node の追加と削除によって水平スケーリングが可能であり、Pod や Node のサイズを増減することで垂直にスケーリングできます。

コストが最適化された環境の 4 つのスケーラビリティ ディメンション。

GKE では、次のような機能を使用してこれらの自動スケーリングのシナリオを処理します。

次の図に、こうしたシナリオを示します。

HPA、VPA、CA、およびノードの自動プロビジョニングのシナリオを使用する。

以降、このセクションでは、GKE の自動スケーリング機能の詳細と、サービス ワークロードとバッチ ワークロードの両方に役立