クラスタの最適化に役立つ GKE の 5 つの機能
Google Cloud Japan Team
※この投稿は米国時間 2023 年 3 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。
この投稿では、クラスタの最適化に現在使用できる GKE の 5 つの機能について説明します。GKE でこれらの機能を試すには、Standard および Autopilot クラスタを初めて使用する際に役立つインタラクティブなチュートリアルをご確認ください。
組織の Kubernetes クラスタでワークロードを実行することに意味がある場合は、より大きなクラスタまたはより多くのクラスタにより、フットプリントが拡大する可能性があります。
どのアプローチを取る場合でも、確かなことが一つあります。それは、支払い対象となるリソースが増えるということです。そして、リソースが増えると問題が増えるとよく言われます。クラスタ全体でリソースが増えると、リソースを効率的に使用しているかどうかを確認することがよりいっそう重要になります。
Google Kubernetes Engine には多数の組み込み機能があります。クラスタ管理者は、それらの機能を使用して、GKE でのリソースの使用を最適化する継続的なプロセスに取り組むことができます。
今日から使用を開始できるそうした機能のうち 5 つを見ていきましょう。
#1 - コンソールに表示されるクラスタビューの費用の最適化
クラスタの最適化をどこから始めればよいかわからない場合、まずは特に目立つ大きな問題を探すことをおすすめします。これは、おそらくクラスタ全体のビューを見るとよくわかります。
GKE では、クラスタレベルの [費用の最適化] タブがコンソールに組み込まれています。そこには、自力で収集するのは面倒な情報が豊富に含まれています。
このタブは、次の図のように表示されます。
図 1 - Cloud コンソールの [費用の最適化] タブに移動する
このタブに移動すると、時系列のビジュアリゼーションが表示されます。
GKE Standard クラスタの場合、このビジュアリゼーションは、プロジェクト内のすべてのクラスタにおける CPU とメモリの 3 つの主要なディメンションを時系列で可視化したものです。
割り当て可能な合計 CPU / メモリ
- ユーザー ワークロードに割り当てることができる CPU 数またはメモリ容量(GB)合計 CPU / メモリ リクエスト
- ユーザー ワークロードがリクエストした CPU 数またはメモリ容量(GB)合計 CPU / メモリ使用量
- ユーザー ワークロードが実際に使用しいる CPU 数またはメモリ容量(GB)
これらのデータを互いに関連付けて分析すると、最適化に関する次のような重要な疑問に答えるのに役立ちます。
GKE Standard クラスタ全体で、アイドル状態の割り当て可能な CPU とメモリが多すぎないか?そうであれば、ノードプールで使用するマシンタイプを再評価するなどの対策は可能か?それが可能な場合は、Pod リクエストに割り当て可能なリソースの割合が高くなるため、クラスタをビンパッキングするのに役立ちます。
GKE Standard クラスタで実行されているワークロードがリクエストする未使用の CPU とメモリが多すぎないか?そうであれば、ワークロードのオーナーと協力してリクエストを調整できないか?それが可能な場合は、予想される使用量をより正確に反映するようにリクエストを設定することで、ワークロードのサイズを適正化できます。
GKE Autopilot を使用している場合は、次の図に示すように、時系列のビジュアリゼーションが若干異なるものになります。
GKE Autopilot クラスタの場合は、合計 CPU / メモリ リクエスト
と合計 CPU / メモリ使用量
のデータのみが表示可能です。しかし、実は何も欠けてはいません。
Autopilot クラスタでは、リクエストに基づいて Pod 単位でのみ支払いが発生します。Autopilot は、Pod リクエストの設定に基づいて割り当て可能なリソースを Google に提供するインフラストラクチャのプロビジョニングを自動的に処理します。ノードのプロビジョニングのオーナー権限が下取りに出されると、そのレイヤで最適化するコントロールも下取りに出されます。
クラスタ管理者にとって、この情報は、個々のクラスタを詳しく調べたり、ワークロード チームと協議してワークロードに設定されたリクエストと上限を検討したりするなどのアクションを促すきっかけになる可能性があります。これは、Google の調査では、おそらく多くのチームが最適化の対象としている最も影響力が大きい領域です。このブログ投稿では、GKE でそれを実現する方法について、もう少し詳しく説明します。
この方法を取る場合は、最適化がビジネスに与える影響を定量化するために、財務データが役立ちます。この情報を自力で収集するには、多少の作業(大量のスプレッドシートの処理など)が必要になる可能性があります。しかし、GKE には別のネイティブ機能があり、この情報に簡単にアクセスできます。
#2 - GKE の費用割り当て
GKE の費用割り当ては、ワークロードの使用状況を Cloud Billing およびそのレポートに組み込む GKE のネイティブ機能です。この機能により、クラスタ単位だけでなく、Kubernetes Namespace または Kubernetes ラベル単位で請求を表示し、アラートを発行できます。
この機能を動作させるには、クラスタで有効にする必要があります。したがって、既存の GKE クラスタを使用している場合にこの機能を有効にするには、適切なゾーンまたはリージョンを設定した後で、次の gcloud コマンドを使用します。
以前は GKE の費用割り当てがないために、クラスタと、クラスタが実行する可能性のあるさまざまなワークロードすべての財務上の影響は若干見えにくいものになっていました。クラスタは請求の最も詳細なレベルにあるので、最適化する領域を見つけることや、ショーバックとチャージバックを実行することさえ困難でした。
今では、Namespace とラベルが請求レポートに組み込まれることで、Kubernetes でワークロードが定義する CPU / メモリ リクエストの費用を把握できるようになりました。ただし、この機能が最もうまく働くのは、Namespace とラベルを使用して、チームとそのワークロードを論理的に定義および編成する場合です。
このインテグレーションにより、最適化の全体像も把握できます。つまり、通常 GKE は孤立した領域ではありません。理論的には、チームの Namespace 内のワークロードは、Cloud Memorystore などの外部バッキング サービスを使用している可能性があり、そうしたサービスが使用の重要な部分を占めていることもあります。
Cloud Billing データにはすべての GCP サービスが含まれているため、Namespace とそれに対応するバッキング サービス全体で、フィルタリングとクエリを行えるようになりました。
# 3 - コンソールに表示されるワークロード ビューの費用の最適化
協力したいチームが見つかったら、GKE でワークロード レベルの [費用の最適化] タブを確認できます。このタブにより、「ワークロードのサイズ適正化」という作業を通じて最適化可能な特定のワークロードを調べて特定できます。これは、予想される使用量をより正確に反映するようにリクエストを設定する作業です。
この図からわかるように、使用量、リクエスト、上限の相互関係を表す棒グラフが表示されます。
濃い緑色: CPU / メモリ使用量
薄い緑色: CPU / メモリ リクエスト
灰色: CPU / メモリ上限
黄色: CPU / メモリ使用量がリクエストを上回っている状況
また、個々のワークロードの棒グラフにカーソルを合わせると、このデータの小さなレポートが画面の上に表示されます。クラスタビューの [費用の最適化] タブと同様に、カスタムの期間でデータをフィルタできます。このデータは、1 時間を超える期間(1 日、1 週間、1 か月)で表示することをおすすめします。それにより、以前は見えにくかった 1 日周期または 1 週間周期のパターンを発見できる可能性があります。
上のスクリーンショットのこれらのグラフでは、特に目立つパターンをいくつか指摘できます。
濃い緑色の棒に対して薄い緑色の棒が長すぎる場合は、ワークロードが過剰にプロビジョニングされている可能性があります。
黄色の棒がある場合は、リクエストが十分に設定されていないワークロードが存在し、安定性 / 信頼性のリスクが生じる可能性があります。ノードで追加のリソースが消費されており、上限に達するとスロットリングまたは OOMKill が実行される可能性があります。
棒全体が濃い緑色の場合は、ワークロードにリクエストが設定されていないことを意味します。これはベスト プラクティスではありません。リクエストを設定してください。
この情報により、費用の最適化または安定性 / 信頼性のいずれかに向けてリクエストと上限を調整する必要があるワークロードを迅速かつ容易に見つけることができます。
# 4 - ワークロード リクエストの調整に関する最適化案
CPU / メモリ リクエストを増加または減少させる必要がある場合、行う必要があることはすぐ分かっても、どのように行うべきかを理解するのが難しい場合があります。リクエストは、どのように設定すればいいのでしょうか。
GKE は、Kubernetes 垂直 Pod オートスケーラー(VPA)からの最適化案をワークロード コンソールに直接組み込みます。これは、現在クラスタ内にあるすべてのデプロイメントが対象になります。特定のワークロードのページを表示しているときに、[アクション] > [スケール] > [コンピューティング リソースのスケーリング]
メニューに移動すると、この情報を見つけることができます。
これらの最適化案は単なる提案にすぎないことに留意してください。最適化案は過去の使用状況データに基づいているため、提案された値を検討する際は、ワークロードのオーナーと協力して、その値をそれぞれの Kubernetes マニフェストに組み込む意味があるかどうかを確認することが重要です。
# 5 - 費用見積もりとクラスタ作成の設定ガイド
最後に、GKE を使い始めたばかりで、最適化について良いスタートを切りたい場合は、GKE クラスタ作成ページに組み込まれているツールを利用できます。1 つ目のツールは、GKE の費用割り当てや垂直 Pod 自動スケーラーなど、この投稿で説明したいくつかの機能がすでに有効になっている独自の GKE Standard クラスタを作成するのに役立つ設定ガイドです。
2 つ目のツールは、GKE Standard クラスタの構成に応じて 1 か月の見積もり費用を表示する費用見積もりパネルです。これは、クラスタのスケールアップとスケールダウンが予想される場合に、潜在的な費用の規模を把握する場合にも役立ちます。
次のステップ
GKE クラスタのセット全体を最適化するには、いくつかの領域について検討が必要になる可能性があります。これは 1 回限りのタスクではありません。クラスタ管理者、ワークロードのオーナー、さらには請求管理者も参加する継続的なタスクです。GKE では、すぐに利用できる適切なデータと分析情報を備え、このタスクとプロセスの遂行を容易にするツールが提供されています。
GKE のそうした機能について理解を深めるには、Standard および Autopilot クラスタを初めて使用する際に役立つインタラクティブなチュートリアルをご確認ください。
また、次の動画では、それらの機能のほとんどを紹介したデモを見ることができます。
このブログ投稿をレビューしてくれた Laurie White、Fernando Rubbo、Bobby Allen の各氏に感謝します。