コンテンツに移動
Containers & Kubernetes

Kubernetes のオーバー プロビジョニング解消は、GKE にお任せください

2021年7月2日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 6 月 23 日に、Google Cloud blog に投稿されたものの抄訳です。

費用の最適化は、パブリック クラウドを採用しているチーム1、特に採用を始めたばかりのチームにとって主要な取り組み、課題、労力のかかる作業の一つです。特に Kubernetes に関しては、アプリケーションのパフォーマンス、安定性、お客様のビジネスへの貢献度に悪影響を及ぼすような作業を行いたくないことから、費用の最適化は特に困難です。

言い換えれば、費用の削減は、ユーザー エクスペリエンスを犠牲にしたり、ビジネスに悪影響が及ぶリスクを冒したりしてまで行えません。

https://storage.googleapis.com/gweb-cloudblog-publish/images/gke_1.max-2000x2000.jpg

ビジネスの価値を最大限高めると同時に費用削減にも役立つ Kubernetes プラットフォームをお探しであれば、高度な費用最適化機能を複数実装した Google Kubernetes Engine(GKE)をおすすめします。これは、Kubernetes を利用したことがなく、アプリケーションのパフォーマンスと安定性のバランスを簡単に取れるだけの専門知識を持っていないため、ビジネスへの潜在的な影響を軽減するために環境を過剰にプロビジョニングする傾向があるチームにとっては朗報です。結論としては、過剰にプロビジョニングされた環境では、ヘッドルームまたは容量が不足しない傾向にあり、アプリケーションがユーザーの期待に応えるだけのパフォーマンスと信頼性を発揮できます。

費用最適化 = 費用削減 + パフォーマンス目標達成 + 安定性目標達成 + ビジネス価値の最大化

オーバー プロビジョニングは、短期的には(金銭的な費用を伴った)救済策となり、継続的な費用最適化の取り組みの一環として最初に検討すべきことの一つです。しかしながら、特に他の Kubernetes プラットフォームでオーバー プロビジョニングを控えようとした方は、ランダムな構成を試す、さまざまなクラスタのセットアップを試みるなどしていたのではないでしょうか。このように、得られる成果に比べて多大な労力が必要なため、チームとして費用最適化を諦めてしまうことも珍しくありません。ここでは、GKE が他の Kubernetes マネージド サービスとどう違うのか、過剰なプロビジョニングの必要性を減らし、費用最適化に取り組みやすくするにはどうすればよいかをご紹介します。

最も一般的な Kubernetes オーバー プロビジョニングの問題

費用最適化に役立つ GKE の機能やソリューションを見ていく前に、まずは Kubernetes クラスタのオーバー プロビジョニングにつながる 3 つの主な課題を定義しましょう。

https://storage.googleapis.com/gweb-cloudblog-publish/images/gke_2.max-1300x1300.jpg
  1. ビンパッキング - アプリケーションを Kubernetes ノードにどれだけうまく詰め込めるか。アプリをノードにうまく詰め込むほど、無駄を省けます。

  2. アプリ容量適正化 - クラスタにデプロイされるアプリケーションについて適切なリソース リクエストとワークロード自動スケーリング構成を設定する機能。Pod に設定するリソースが正確なほど、アプリケーションがより確実に実行され、大半の場合、クラスタ内の容量をより節約できます。

  3. 非ピーク時間帯のスケールダウン - 夜間などの需要が少ない時間帯に費用を削減するには、実際のトラフィックに合わせてクラスタをスケールダウンするのが理想的です。しかしながら、特にクラスタ オートスケーラーをブロックするようなワークロードやクラスタ構成では、これが期待どおりに行われない場合があります。

Google の経験上、最も過剰なプロビジョニングが行われている環境は、上述の課題のうち少なくとも 2 つが見られる傾向があります。お客様の環境の費用を効果的に最適化するには、オーバー プロビジョニングの原因となる問題に継続的に着目するよう奨励する文化を受け入れる必要があります。

GKE でのオーバー プロビジョニング対応

カスタム モニタリング システムの導入は、過剰にプロビジョニングされたリソースへの依存を減らすための一般的な手法です。ビンパッキングのため、割り振り可能なリソースと要求されたリソースを比較し、アプリ容量適正化のため、要求されたリソースと使用されたリソースを比較し、クラスタ使用率を把握するため、クラスタ オートスケーラーがスケールダウンできないかモニタリングできます。

ただし、このようなモニタリング システムの実装は非常に複雑で、プラットフォームで特定の指標、リソースの推奨、テンプレート ダッシュボード、アラート ポリシーを提示する必要があります。このようなシステムの構築方法については、GKE クラスタのモニタリングによる費用の最適化のチュートリアルをご覧ください。このチュートリアルでは、アプリケーションのパフォーマンスと安定性を損なうことなく、推奨事項に沿って GKE クラスタをチューニングできるよう、前述のような継続的な費用最適化モニタリング環境の構築方法を紹介しています。

GKE 環境で費用最適化において基本的な役割を果たすもう一つの要素が、クラスタ オートスケーラーです。クラスタ オートスケーラーは、実行する場所がない Pod にノードを提供し、使用率の低いノードを削除します。GKE では、クラスタ オートスケーラーがインフラストラクチャの費用に合わせて最適化されます。つまり、クラスタ内に複数のノードがある場合、現在の需要を満たす最も低コストなものが選択されます。

クラスタが予測どおりにスケールダウンしない場合、根本原因を把握するためにクラスタ オートスケーラーのイベントを見てみましょう。ノードプールの最小サイズを必要以上に大きく設定していることが考えられます。または、特定の Pod が再起動すると一時的な障害を引き起こす可能性があるため、クラスタ オートスケーラーが一部のノードを削除できないことが考えられます。例としては、システム Pod(metrics-server や kube-dns など)や、ローカル ストレージを使用する Pod などが挙げられます。このようなシナリオに対処する方法については、ベスト プラクティスをご覧ください。また、日中のスパイクを適切に処理するためにワークロードに対するオーバー プロビジョニングが本当に必要と判断した場合は、スケジュールされたオートスケーラーを設定することで費用を削減できます。

GKE の優れた費用最適化能力

GKE には他にも独自のモードと機能が多く備わっており、ビンパッキングやアプリ容量適正化などの作業を行う必要がありません。次に例を示します。

GKE Autopilot

GKE Autopilot は、究極の費用最適化を実現する、これまでで最高水準の GKE モードです。GKE Autopilot では、要求したリソースに対してのみ支払いを行うだけでよく、特に無駄を生む作業の一つであるビンパッキングを簡単に取り除くことができます。また Autopilot は、業界のベスト プラクティスを自動的に適用し、すべてのノード管理作業を排除して、クラスタの効率を最大限高め、より強固なセキュリティ体制を実現します。また、管理すべきインフラストラクチャが減ることで、Autopilot はデプロイメントの工数と 2 日目からの運用をさらに削減できます。

GKE Autopilot を使用しない一方で最も費用が最適化されたデフォルト設定を使用する場合は、GKE に内蔵されている「コスト最適化クラスタ」の設定ガイドをご参照ください。このガイドでは、知っておくべきインフラストラクチャの主要な機能と設定について説明しています。

ノードの自動プロビジョニング

ビンパッキングは複雑な課題であり、上述のような適切なモニタリング システムがあったとしても、常に手動での調整が必要です。GKE は、スケジュールされたワークロードに最適なノードプールを自動的に作成および削除するノード自動プロビジョニングにより、正確なノードプールの調整に伴う摩擦や運用費用を解消します。ノード自動プロビジョニングはクラスタ オートスケーラーを進化させたものですが、費用削減効果が高く、お客様側に求められる知識や労力も少なくて済みます。

また、ノードプールをさらに詰め込む場合は、使用率の最適化プロファイルを引き続き選択できます。このプロファイルは、最も使用率の高いノードに Pod をスケジューリングすることを優先し、クラスタ オートスケーラーのスケールダウンをより積極的に行います。この設定は、クラスタ自動スケーリングを完全に自動化するだけでなく、最も低コストな構成を維持します。

Pod オートスケーラー

アプリ容量適正化を行うには、お客様の方ですべてのアプリケーションの容量を完全に把握するか、その責務を Google に引き継ぐ必要があります。GKE は、定番の HorizontalPodAutoscaler に加えて、VerticalPodAutoscalerMultidimensionalPodAutoscaler も提供しています。HorizontalPodAutoscaler は、クラスタに素早く Pod を追加することでトラフィックの急増に対応するのに最適です。VerticalPodAutoscaler は、CPU とメモリの観点から Pod の容量を時間をかけて把握することで、アプリケーションの容量の適正化を図ることができます。最後に、MultidimensionalPodAutoscaler では、1 つの Kubernetes リソースを使用して、前述の 2 つのオートスケーラー動作を定義できます。これらのワークロード オートスケーラーでは、アプリケーションの容量を自動的に適正化し、同時に費用が最適化された方法でトラフィックの変動に迅速に対応できます。

最適化されたマシンタイプ

GKE は、最も一般的なオーバー プロビジョニングの問題に対する上述の解決策に加えて、デフォルトで E2 マシンタイプを使用することにより、費用削減を支援します。E2 マシンは費用を最適化した VM で、N1 マシンと比較して 31% の費用削減を実現できます。また、2021 年第 3 四半期に発売される新しい Tau マシンを選択すると、同等の汎用製品に比べて価格性能が 42% も向上します。さらに、GKE では、標準的な Compute Engine VM と比べて最大 80% も安いプリエンプティブル VM を選択することもできます(ただし、プリエンプティブル VM 上でワークロードがスムーズに動作するかを確認するには、ベスト プラクティスをお読みいただくことをおすすめします)。

運用効率の確保

費用を最適化するためには、基盤となるコンピュータの容量だけではなく、プラットフォームの構築、維持、セキュリティにかかる運用費も重要な検討事項となります。運用費は、総所有コスト(TCO)を計算する場合に見落とされがちですが、これに留意することが重要です。

GKE は、工数削減のために、市場で最も簡単なフルマネージド Kubernetes 環境を提供します。GKE コンソール、gcloud コマンドライン、Terraform または Kubernetes Resource Model を使用することで、高可用性コントロール プレーン、自動修復、自動アップグレード、ネイティブ セキュリティ機能、自動運用、SLO ベースのモニタリングなどの機能を備えたリージョン クラスタを迅速かつ容易に構成できます。

最後に、GKE は、1 つのクラスタを 15,000 ノードまでスケールできるという点で、他の追随を許しません。大多数のユーザーにとっては、このおかげでクラスタ設計において制約となるスケーラビリティが必要なくなり、必要に応じてきわめて大規模なワークロードに対応する費用、パフォーマンス、効率の限界が押し上げられます。実際、GKE の主要な機能が考慮され、適用された大規模なクラスタでは、インフラストラクチャの使用率が最大 50% 向上していることがわかります。

GKE をご利用のお客様のご意見

https://storage.googleapis.com/gweb-cloudblog-publish/images/marketlogic_1.max-500x500.jpg

Market Logic は、マーケティング分析情報プラットフォームを提供していて、GKE の 4 方向自動スケーリングとマルチクラスタ サポートにより、メンテナンスにかかる時間と費用を最小限に抑えることができたと述べています。

「GKE に移行してからは、ノードの運用費用が半分になり、メンテナンス作業も減り、需要に応じて簡単に自動でスケールアップ、スケールダウンできるようになりました。お客様の本番環境の負荷と開発環境はすべて GKE 上で動作しており、移行後は一度も致命的な問題に直面したことはありません。」 - Market Logic Software ソフトウェア開発担当ディレクター Helge Rennicke 氏

詳細は、Market Logic: Helping leading brands run an insights-driven business with a scalable platform(Market Logic: スケーラブルなプラットフォームの導入により主要ブランドによる分析情報を活用したビジネス運営を支援)をご参照ください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/konga_1.max-500x500.jpg

ナイジェリアのオンライン マーケットプレイスである Konga は、Google Kubernetes Engine 上のコンテナ化されたソリューションに切り替えることで、クラウド インフラストラクチャの費用を 3 分の 2 削減しました。

「当社は、Google Kubernetes Engine を使用して、トラフィックに合わせてスケールアップできるという点で、従来と同等以上の機能を提供していますが、最も費用がかからない状態では、本番環境クラスタの全体的な運用費用は、従来のアーキテクチャの採用時に支払う最低費用よりもはるかに安くなっています。」 - Konga テクノロジー担当ディレクター Andrew Mori 氏

詳細は、Konga: Cutting cloud infrastructure costs by two-thirds(Konga: クラウド インフラストラクチャの費用を 3 分の 2 削減)をご参照ください。

次のステップ

費用最適化の文化と習慣を組織に組み入れることで、パフォーマンス、信頼性、費用のバランスを取りやすくなります。その結果、チームとビジネスの競争力が高まり、イノベーションに集中しやすくなります。

GKE には、お客様の費用最適化の取り組みを大幅に簡素化する機能が数多く搭載されています。このプラットフォームを最大限活用するためには、継続的な取り組みとしての費用最適化の重要性について開発者とオペレータの認識を合わせてください。そのために、GKE の費用最適化のベスト プラクティス5 分間の動画シリーズ(外出先で学習する方向け)、費用最適化のチュートリアル、スキルを実践するためのセルフサービス式ハンズオン ワークショップなどの資料を準備しています。さらに、すべてのチームが GKE を最大限活用できるよう、社内でのディスカッション グループの立ち上げや、社内ワークショップの開催などを強くおすすめいたします。今後の情報もぜひともお見逃しなく。これからも、GKE による費用最適化に関するブログ投稿を掲載していきます。


1. https://info.flexera.com/CM-REPORT-State-of-the-Cloud

-ソリューション アーキテクト Fernando Rubbo

-GKE プロダクト マネージャー Roman Arcea

投稿先