新しい GKE カスタム コンピューティング クラス API でインフラストラクチャ リソースを思いどおりに
Victor Szalvay
Product Manager
Maciek Pytel
Software Engineer
※この投稿は米国時間 2024 年 8 月 20 日に、Google Cloud blog に投稿されたものの抄訳です。
次のような状況を想像してみましょう。売上がピークを迎える時期になりましたが、あなたの e コマース プラットフォームは正常に稼働しています。お客様からの需要が急増しているものの、Kubernetes インフラストラクチャはトラフィックの増加にシームレスに対応しています。これは、バックグラウンドで GKE クラスタ オートスケーラーが、定義されたさまざまなオプションから最適なコンピューティング リソースをインテリジェントに選択しているためです。リソース確保のために深夜に慌てて作業することも、容量の問題による販売機会の損失もなく、円滑で中断のないカスタマー エクスペリエンスが実現されています。
Google Kubernetes Engine(GKE)の新しいカスタム コンピューティング クラス API を使用すれば、このシナリオは単なる絵に描いた餅ではなく現実のものになります。インフラストラクチャ選択のきめ細かい制御が可能なため、GKE で特定のニーズに基づいてさまざまなコンピューティング オプションとアクセラレータ オプションを優先順位付けして利用できるようになります。これにより、AI ワークロードを含むアプリケーションが目標を達成するために必要なリソースを常に確保できます。その結果、費用対効果が向上し、リソースの可用性が高まり、インフラストラクチャを希望どおりに構成できる柔軟性を得られます。
コンピューティング クラス API が対処する課題
1. GKE カスタム コンピューティング クラスは、候補のノード特性や静的に定義されたノードプールのリストとしてフォールバック コンピューティングの優先順位を提供することで、取得可能性と信頼性を最大限に高めます。これにより、自動スケーリングで処理する機会が増え、スピンアップされるリソースを制御できるようになります。最優先のリソースがスケールアップできない場合、GKE は 2 番目に優先するノード選択を自動的に試し、次にリスト内の他の優先順位の低いノードを試していきます。
コンピューティング クラスはアクセラレータと関連属性に対応しているため、AI ユースケースに最適です。たとえば、GPU や TPU の優先順位、関連するストレージのニーズ、ノード統合の遅延としきい値を指定できます。
2. 優先インフラストラクチャに合わせて調整します。カスタム コンピューティング クラスを使用しない場合、スケーリング イベント中に最優先のノードが利用できなくなり、Pod が優先順位の低いインスタンスに配置されることがあります。その Pod は手動介入されるまでそこに配置されたままになります。
カスタム コンピューティング クラスを使用する場合、費用やパフォーマンスの最適化に基づく優先ノードシェイプなどにワークロードをアクティブに移行できます。ワークロードが最初に優先順位の低いノードに配置されると、GKE は可用性が許す限り、ワークロードを段階的に優先順位のより高いノードに自動的に移行しようとします。
3. プラットフォーム チームは、マシン ファミリー、最小コア、スポット / オンデマンド、GPU および TPU 設定、自動スケーリング統合パラメータなどの特性を含め、関連するワークロードのデフォルトのノード属性を一元管理する必要があります。その際に、アプリケーション チームがこれらの設定を簡単に使用でき、デベロッパー エクスペリエンスが複雑にならないようにしなくてはなりません。
コンピューティング クラスは、共通のノード構成 API を提供し、デベロッパーのノード構成の複雑さを解消します。アプリケーション チームは、簡単な nodeSelector ラベルでコンピューティング クラスを使用することも、スコープが設定された名前空間のデフォルトのコンピューティング クラスを利用することもできます。
制御と柔軟性に加え、効率化されたデベロッパー エクスペリエンス
カスタム コンピューティング クラスを使用すると、プラットフォーム チームは制御と柔軟性を強化し、アプリケーション デベロッパーは不要なオーバーヘッドや構成の複雑さを回避できます。また、フォールバック コンピューティングの優先順位の定義に加えて、使用率のしきい値や統合の遅延などの自動スケーリング属性の調整も行えます。コンピューティング クラスは現在、CPU とアクセラレータの両方をサポートしていますが、いくつかの制限があります(ドキュメントをご覧ください)。
プラットフォーム チームは、カスタム コンピューティング クラスを Kubernetes カスタム リソース(CR)として作成してデプロイします。この Kubernetes ネイティブ アプローチにより、カスタム コンピューティング クラスを GitOps と Infrastructure-as-Code(IaC)のハンドブックに組み込むことができます。カスタム コンピューティング クラスの例を以下に示します。
この例では、まず GKE クラスタ オートスケーラーは vCPU コアが 16 個以上搭載されている n2 ノードをスピンアップしようとします。なんらかの理由でこのノードを利用できない場合、次にクラスタ オートスケーラーは e2-standard-16 リソースを試します。このリソースが利用できない場合、事前定義された 2 つのノードプールからノードをスピンアップしようとします。余分なノードチャーンが発生しないように、統合遅延の設定により、ノードは不要になった後も 20 分間存続します。この例では、ノード自動プロビジョニング(NAP)が有効になっており、必要に応じて新しいノードプールが自動的に作成されます。
すべての構成オプションについては、ドキュメントをご覧ください。
ワークロードは、以下のように nodeSelector ラベルを介してカスタム コンピューティング クラスを使用できます。
デベロッパー エクスペリエンスをさらに効率化するために、カスタム コンピューティング クラスを特定の Kubernetes 名前空間のデフォルトとして指定できます。コンピューティング クラスを名前空間のデフォルトとして設定すると、その名前空間内にデプロイされたすべてのワークロードでコンピューティング クラスの構成が自動的に継承されるため、ワークロード レベルの設定を繰り返す必要がありません。名前空間レベルのデフォルトのカスタム コンピューティング クラスを作成するには、cloud.google.com/default-compute-class キーを使用して名前空間のラベルを設定します。たとえば、次のように設定します。
お客様の声
Delivery Hero はドイツに拠点を置くオンライン食料品注文サービスで、事業を約 70 か国で展開しており、コアサービスの提供に GKE を利用しています。また、GKE カスタム コンピューティング クラス API を幅広く使用しており、その提供内容に満足しています。
「新しいカスタム コンピューティング クラス機能では、個々のニーズに簡単に対応してオンデマンドで確実にスケーリングできるクラスタを社内プラットフォームのお客様に提供できます。優先順位に基づくルールを通じて、さらにきめ細かい制御を利用してワークロードに適したインスタンス ファミリーをお客様に提供でき、ノード自動プロビジョニングとの統合のおかげでノードプールを自社で管理する必要がありません。また、適切な場所でスポット インスタンスを自動的に利用して、費用対効果の高いシステムを構築することもできます。インスタンス タイプの容量が低い場合にフォールバック ルールが自動で適用されるので、インスタンスの可用性について心配する必要がなくなりました。さらに、ある時点で優先事項が満たされていない場合でも、アクティブ移行機能が働いて、クラスタ内のノードを常に調整し、できる限りニーズに応えてくれます。」- Heiko Rothe 氏(Delivery Hero スタッフ システム エンジニア)、Kevin Nandu 氏(Delivery Hero シニア システム エンジニア)
カスタム コンピューティング クラスの実際の操作を見る
この動画では、カスタム コンピューティング クラスの概要と実際の使用方法について説明しています。
Google はこれからも発展を続けます
Google Cloud では、お客様が GKE 環境を簡単に構成して管理できるよう取り組んでいます。宣言型コンピューティング クラスノード API はその最新の例にすぎず、ノードを構成する他の既存の方法を補うものです。今回リリースされる機能は、初公開のカスタム コンピューティング クラス API です。今後も新機能にご注目ください。