Autopilot クラスタの Balanced と Scale-Out の ComputeClass について


Google Kubernetes Engine(GKE)Autopilot クラスタで BalancedScale-Out ComputeClasses を使用すると、追加のコンピューティング容量や特殊な CPU 構成を必要とするワークロードを実行できます。このページは、デフォルトの Autopilot クラスタ構成よりも柔軟なコンピューティング オプションを必要とするクラスタ管理者を対象としています。

Balanced と Scale-Out の ComputeClass の概要

デフォルトでは、GKE Autopilot クラスタの Pod はコンテナ最適化コンピューティング プラットフォームで実行されます。このプラットフォームは、ウェブサーバーや中程度のバッチジョブなどの汎用ワークロードに最適です。コンテナ最適化コンピューティング プラットフォームは、信頼性が高く、スケーラブルで、コストが最適化されたハードウェア構成を備えています。この構成は、ほとんどのワークロードの要件に対応できます。

独自のハードウェア要件(ML や AI タスクの実行、リアルタイムの高トラフィック データベースの実行、特定の CPU プラットフォームとアーキテクチャの必要性など)を持つワークロードがある場合は、ComputeClasses を使用してそのハードウェアをプロビジョニングできます。

Autopilot クラスタでのみ、GKE は次の厳選された ComputeClass を提供します。これにより、デフォルトのコンテナ最適化コンピューティング プラットフォームよりも柔軟性を必要とする Pod を実行できます。

  • Balanced: コンテナ最適化コンピューティング プラットフォームよりも高い最大 CPU 容量とメモリ容量を提供します。
  • Scale-Out: 同時マルチスレッディング(SMT)を無効にし、スケールアウト用に最適化します。

これらの ComputeClass は、Autopilot クラスタでのみ使用できます。デフォルトのコンテナ最適化コンピューティング プラットフォームと同様に、Autopilot は実行中の Pod に基づいてノードのサイジングとリソース割り当てを管理します。

柔軟性を高めるカスタム ComputeClass

Autopilot クラスタの Balanced または Scale-Out ComputeClass がワークロードの要件を満たしていない場合は、独自の ComputeClass を構成できます。GKE でクラスタ内の新しいノードの構成に使用される一連のノード属性を使用して、ComputeClass Kubernetes カスタム リソースをクラスタにデプロイします。たとえば、これらのカスタム ComputeClass を使用すると、GKE Autopilot クラスタまたは GKE Standard クラスタの Balanced または Scale-Out ComputeClass と同じハードウェアにワークロードをデプロイできます。詳細については、GKE Standard での Autopilot モードのワークロードについてをご覧ください。

料金

Balanced または Scale-Out ComputeClass を使用する Pod は、次の SKU に基づいて課金されます。

詳細については、GKE の料金をご覧ください。

Balanced と Scale-Out の技術的な詳細

このセクションでは、Balanced クラスと Scale-Out クラスのマシンタイプとユースケースについて説明します。Pod で ComputeClass をリクエストしない場合、Autopilot はデフォルトでコンテナ最適化コンピューティング プラットフォームに Pod を配置します。コンテナ最適化コンピューティング プラットフォームを使用する Autopilot ノードのノード マシン シリーズとして ek が表示されることがあります。EK マシンは、Autopilot 専用の E2 マシンタイプです。

次の表に、BalancedScale-Out の ComputeClass の技術的な概要を示します。

バランス型とスケールアウト型の ComputeClass
Balanced

コンテナ用に最適化されたコンピューティング プラットフォームの上限よりも多くの CPU 容量とメモリ容量を提供します。追加の CPU プラットフォームと、Pod の最小 CPU プラットフォーム(Intel Ice Lake 以降など)を設定する機能を提供します。

  • 使用可能な CPU: AMD EPYC Rome、AMD EPYC Milan、Intel Ice Lake、Intel Cascade Lake
  • 利用可能なアーキテクチャ: amd64
  • マシンシリーズ: N2(Intel CPU)または N2D マシンシリーズ(AMD CPU)。

Balanced クラスは、次のようなアプリケーションで使用します。

  • ウェブサーバー
  • 中規模から大規模のデータベース
  • キャッシュ
  • ストリーミングとメディア配信
  • Hyperdisk Throughput と Extreme ストレージ
Scale-Out

コアあたりのシングル スレッド コンピューティングと水平スケーリングを提供します。

  • 利用可能な CPU: Ampere Altra Arm または AMD EPYC Milan
  • 利用可能なアーキテクチャ: arm64 または amd64
  • マシンシリーズ: T2A(Arm)または T2D(x86)。
  • その他の機能:
    • SMT が無効になっているため、1 つの vCPU は 1 つの物理コアに相当します。
    • 最大クロック速度は 3.5 GHz です。

Scale-Out クラスは、次のようなアプリケーションで使用します。

  • ウェブサーバー
  • コンテナ化されたマイクロサービス
  • データログの処理
  • 大規模な Java アプリ
  • Hyperdisk Throughput ストレージ

ワークロードでの ComputeClass の選択

GKE ワークロードで ComputeClass を使用するには、cloud.google.com/compute-class ラベルのノードセレクタを使用して、ワークロード マニフェストで ComputeClass を選択します。

次の Deployment マニフェストの例では、ComputeClass を選択しています。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "4Gi"

COMPUTE_CLASS は、ComputeClass の名前(BalancedScale-Out など)に置き換えます。ワークロードで選択できる ComputeClass は 1 つだけです。

ワークロードをデプロイすると、GKE は次の処理を行います。

  • 指定された構成を基盤とするノードを自動的にプロビジョニングして Pod を実行します。
  • 新しいノードにノードラベルと taint を自動的に追加して、他の Pod がそうしたノードでスケジュールされないようにします。taint は ComputeClass ごとに一意です。CPU アーキテクチャも選択している場合、GKE はそのアーキテクチャに固有の別の taint を追加します。
  • デプロイされた Pod に、適用された taint に対応する toleration を自動的に追加します。これにより、GKE はこれらの Pod を新しいノードに配置できます。

たとえば、Pod の Scale-Out ComputeClass をリクエストした場合は、次のようになります。

  1. Autopilot は、これらのノードに対して Scale-Out に固有の taint を追加します。
  2. Autopilot は、その taint の toleration を Scale-Out Pod に追加します。

Scale-Out をリクエストしていない Pod は認められません。その結果、GKE はこれらの Pod を Scale-Out ノードにスケジュールしません。

ワークロードの仕様で ComputeClass を明示的にリクエストしない場合、Autopilot はデフォルトのコンテナ最適化コンピューティング プラットフォームを使用するノードで Pod をスケジューリングします。ほとんどの汎用ワークロードは、このプラットフォームで問題なく実行できます。

CPU アーキテクチャをリクエストする方法

場合によっては、ワークロードが Arm などの特定のアーキテクチャ用に構築されていることがあります。スケールアウト ComputeClass は複数の CPU アーキテクチャをサポートしています。次の例に示すように、ノードセレクタやノード アフィニティ ルールでラベルを指定することで、ComputeClass のリクエストと同時に特定のアーキテクチャをリクエストできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: COMPUTE_CLASS
        kubernetes.io/arch: ARCHITECTURE
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

ARCHITECTURE は、必要な CPU アーキテクチャ(arm64amd64 など)に置き換えます。ワークロードで選択できるアーキテクチャは 1 つだけです。選択した ComputeClass は、指定したアーキテクチャをサポートしている必要があります。

アーキテクチャを明示的にリクエストしない場合、Autopilot は ComputeClass のデフォルトのアーキテクチャを使用します。

Autopilot の Arm アーキテクチャ

Autopilot は、Arm CPU アーキテクチャを使用するノードのリクエストをサポートしています。Arm ノードは、同様の x86 ノードよりも費用効率に優れ、パフォーマンスも向上します。Arm ノードをリクエストする手順については、Arm アーキテクチャに Autopilot ワークロードをデプロイするをご覧ください。

デプロイメントで正しいイメージを使用していることを確認してください。Pod が Arm イメージを使用していて、Arm ノードをリクエストしない場合、Autopilot は x86 ノードで Pod をスケジューリングし、Pod がクラッシュします。同様に、x86 イメージが誤って使用されて Pod の Arm ノードがリクエストされた場合、Pod はクラッシュします。

デフォルト、最小、最大のリソース リクエスト

Autopilot ワークロードの ComputeClass を選択する場合は、その ComputeClass の最小リクエストと最大リクエストを満たすリソース リクエストを指定してください。デフォルトのリクエスト数と、各 ComputeClass の最小リクエスト数と最大リクエスト数については、GKE Autopilot のリソース リクエストと上限をご覧ください。

次のステップ