ComputeClasses を使用すると、Google Kubernetes Engine(GKE)が Pod を実行するノードの作成に使用するノード属性と自動スケーリング設定のセットを定義できます。このページでは、ComputeClass の仕組み、ユースケースとメリット、使用可能な ComputeClass のタイプについて説明します。
この情報は、次のような方を対象としています。
- クラスタ インフラストラクチャの管理に関連するオーバーヘッドを削減したいクラウド アーキテクトとプラットフォーム エンジニア。
- 基盤となるインフラストラクチャを気にすることなく、ワークロードの運用に集中したいアプリ オペレーターと SRE。
ComputeClass とクラスタの自動スケーリングについて
ComputeClass は、GKE クラスタの Kubernetes API オブジェクトとして存在するノード属性と自動スケーリング設定のセットです。デプロイする Kubernetes ワークロードで ComputeClass を選択できます。GKE クラスタの自動スケーリングでは、ComputeClass の属性を使用してワークロードのノードを作成します。
プラットフォーム エンジニアは、ComputeClass を使用してさまざまなタイプのワークロードのインフラストラクチャを構成できます。これにより、すべての新しいノードがアプリケーションの特定の要件に合わせて最適化されます。ComputeClass は、GKE 自動スケーリングの速度と柔軟性を向上させ、クラスタ全体でインフラストラクチャ オプションを構成する宣言型メソッドを提供します。詳細については、ComputeClasses を使用するメリットをご覧ください。
次の機能など、特定の GKE の機能は ComputeClass でのみ使用できます。
- フォールバック コンピューティングの優先度: ComputeClass でインフラストラクチャ構成の複数のセットを定義し、設定に基づいて優先順位を付けます。スケーリング中に最も優先される構成が使用できない場合、GKE は次の構成にフォールバックします。
- 優先度の高いノードへのアクティブな移行: 構成すると、GKE はフォールバック優先度のリストで優先度の低いノードを、リストで優先度の高いノードに自動的に置き換えます。その結果、ワークロードの作成時にそのハードウェアが使用可能でなかった場合でも、最終的には Pod が ComputeClass の最も優先度の高いノードで実行されます。
- GKE Standard の Autopilot: GKE Autopilot モードでワークロードを実行して、Standard クラスタでもコンテナ最適化コンピューティング プラットフォームや Pod ベースの課金などの Autopilot 機能を使用します。GKE はこれらのノードとワークロードを管理し、任意のクラスタで Autopilot モードのメリットを提供します。
ComputeClass のメリット
ComputeClass は、プラットフォーム管理者とオペレーターに次のようなメリットをもたらします。
- リソースの取得可能性の向上: ComputeClass は、GKE クラスタの自動スケーリングの機能を拡張します。フォールバックの優先順位やノード統合パラメータなどの ComputeClass 機能を使用すると、Pod が保留状態になるリスクを軽減し、ノードのスケーリングに使用できるオプションの範囲を広げることができます。
- 宣言型プラットフォーム レベルの構成: ComputeClass を使用すると、プラットフォーム エンジニアはさまざまなワークロード タイプのノード構成を宣言的に記述できます。GKE 自動スケーリングは、ノードとノードプールの作成と構成を管理します。ComputeClass を CI/CD パイプラインに統合して、プラットフォーム全体でプロビジョニングされたインフラストラクチャの一貫性を確保できます。
- 管理オーバーヘッドの削減: ComputeClass を使用すると、インフラストラクチャとワークロードの大規模な管理の複雑さが軽減されます。プラットフォーム エンジニアはインフラストラクチャのクラスを宣言し、アプリ オペレーターはワークロードで関連するクラスを選択します。GKE は、スケーリング、ノード ハードウェア構成を管理し、taint、toleration、ラベルを適用します。
ComputeClass カスタム リソースについて
ComputeClass は Kubernetes カスタム リソースです。マニフェスト ファイルで ComputeClass の仕様を定義し、クラスタに作成できます。これは、Deployment や Service などの Kubernetes ワークロード リソースを定義して作成する方法と同様です。
次のマニフェストの例では、n4
という名前の ComputeClass を定義しています。
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: n4
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: n4
- machineFamily: n2
whenUnsatisfiable: DoNotScaleUp
Pod がこの ComputeClass を選択すると、GKE は新しいノードを作成するときに次の処理を行います。
- GKE は、N4 マシンシリーズを使用するノードを作成します。
- N4 マシンシリーズを使用できない場合、GKE は代わりに N2 マシンシリーズを使用するノードを作成します。
- N2 マシンシリーズを使用できない場合、GKE はリソースが使用可能になるまで待機してから、Pod をスケジュールします。
ComputeClass を使用すると、アクセラレータ、ノード システム設定、ノードのロケーション、ハードウェア リソースが使用できない場合の GKE のフォールバック動作など、ノードのさまざまな設定を制御できます。ComputeClass で使用可能なすべての構成の詳細については、ComputeClass CustomResourceDefinition をご覧ください。
ワークロードでの ComputeClass の選択
GKE ワークロードで ComputeClass を使用するには、cloud.google.com/compute-class
ラベルのノードセレクタを使用して、ワークロード マニフェストで ComputeClass を選択します。
次の Deployment マニフェストの例では、ComputeClass を選択しています。
COMPUTE_CLASS
は、クラスタに存在する ComputeClass の名前に置き換えます。たとえば、ComputeClass カスタム リソースについてセクションの n4
ComputeClass または autopilot
組み込み ComputeClass を指定できます。
ワークロード仕様のノード構成
GKE Autopilot クラスタと GKE Standard のノードの自動プロビジョニングを使用すると、Pod でノードセレクタを使用して、マシン ファミリー、Spot VM、GPU、TPU などの特定のプロパティを持つノードを作成できます。ComputeClass を使用すると、個々のセレクタをすべてのワークロードに追加するのではなく、これらの要件を一元的に定義できます。
ComputeClass のデフォルトでの適用について
特定の ComputeClass を選択しない Pod にデフォルトで ComputeClass を適用するように GKE を構成できます。特定の Namespace またはクラスタ全体に対してデフォルトの ComputeClass を定義できます。デフォルト クラスを使用してクラスタまたは Namespace を構成する方法については、デフォルトで ComputeClass を Pod に適用するをご覧ください。
次の表に、Namespace またはクラスタのデフォルトとして ComputeClass を設定した場合の影響を示します。
デフォルトの ComputeClass の効果 | |
---|---|
Namespace レベルのデフォルト |
|
クラスタレベルのデフォルト |
|
GKE が Namespace レベルのデフォルトの ComputeClass を Pod に適用すると、GKE は Namespace レベルのデフォルト クラスのノードセレクタを Pod に追加するため、その Pod はクラスタレベルのデフォルトの ComputeClass を有効にしません。
クラスタレベルのデフォルト ComputeClass
クラスタレベルのデフォルトの ComputeClass を有効にすると、default
という名前の ComputeClass
オブジェクトがクラスタのノード自動スケーリング ルールを定義します。クラスタに default
という名前の ComputeClass がすでに存在する場合、GKE はその ComputeClass 構成をクラスタに使用します。クラスタに default
という名前のカスタム ComputeClass がない場合、GKE は次の ComputeClass
ルールが適用されているかのように動作します。
spec:
whenUnsatisfiable: ScaleUpAnyway
nodePoolAutoCreation:
enabled: true
デフォルトでは、GKE はフォールバック動作を適用せず、自動スケーリングされたノードの構成を変更しません。デフォルトで特定のプロパティを自動スケーリングされたノードに適用するには、default
という名前のカスタム ComputeClass をデプロイする必要があります。
デフォルトのクラスタレベルのコンピューティング クラスを構成する際は、次の点を考慮してください。
- Pod が
Pending
状態のままにならないようにするには、spec.whenUnsatisfiable
フィールドをScaleUpAnyway
に設定します。この値により、Pod がクラスタレベルのデフォルト クラスの優先度ルールに含まれていない Compute Engine マシン ファミリーをリクエストした場合でも、GKE はノードを作成できます。これらの Pod にデフォルトの ComputeClass にあるマシン ファミリーを強制的に使用させる場合は、このフィールドをDoNotScaleUp
に設定します。 default
ComputeClass への変更を制限するには、RBAC ClusterRole を使用して、default
という名前のComputeClass
リソースに対する update、patch、delete、create オペレーションを制限します。- クラスタ オートスケーラーのデフォルトのノード統合パラメータを変更するには、ComputeClass 仕様の
spec.autoscalingPolicy
フィールドを使用します。クラスタレベルのデフォルトの ComputeClass でこのフィールドに指定するパラメータは、クラスタ内のすべてのノードに適用されます。詳細については、ノード統合の自動スケーリング パラメータを設定するをご覧ください。
次のステップ
- 組み込みの ComputeClass について学習する
- カスタム ComputeClass の詳細
- ComputeClass CustomResourceDefinition を読む
- ComputeClass をデプロイしてワークロードで選択する