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

このページでは、Google Kubernetes Engine のノード自動プロビジョニング機能の使用方法を説明します。

概要

ノード自動プロビジョニングは、ノードプールのリストをユーザーに代わって自動的に管理する、クラスタ オートスケーラーの仕組みです。ノード自動プロビジョニング機能が有効でないと、クラスタ オートスケーラーはユーザーの選択したノードプール セットに含まれるノードだけを新たな対象として扱います。ノード自動プロビジョニング機能が有効な場合は、新しいノードプールの作成と削除が自動的に行われます。

準備

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

オペレーション

クラスタ オートスケーラーはノードプール単位で動作します。ノード自動プロビジョニング機能が有効な場合、自動スケーリングされるノードプールのセットは、スケジューリングできないポッドの仕様に基づいて自動的に拡張されます。

ノード自動プロビジョニングは、次の情報に基づいてノードプールを作成します。

リソース制限

ノード自動プロビジョニング機能では CPU とメモリの上限を設定する必要があります。GPU を制限するかどうかは任意です。リソースの下限を設定することも任意です。クラスタ内のすべてのノードで制限がチェックされます。自動プロビジョニングされるノードプールはデフォルトで 1,000 ノードに制限されています。

クラスタ オートスケーラーは、設定した制限を超えない範囲で新しいノードを作成します。ただし、制限をすでに超えている場合、ノードは自動的に削除されません。

ワークロードの分離

保留中のポッドのノード アフィニティと容認機能がワークロードの分離を示している場合、ノード自動プロビジョニングはラベルや taint が一致するようにノードをプロビジョニングできます。

現在、ノード自動プロビジョニングは、以下の条件がすべて満たされていれば、ラベルや taint に基づいてノードのノードプールを作成します。

  • 保留中のポッドのノードに特定のキーと値がラベルとして付いている。
  • そのポッドには同じキーを持つ taint の容認機能がある。
  • この容認機能は NoSchedule エフェクト、NoExecute エフェクト、またはすべてのエフェクトに対応している。

ポッドの仕様は、特定のラベルを持つノードを必要とすることを、次の 2 つの方法で表現できます。

  • nodeSelector フィールドを使用する。
  • nodeAffinity フィールドで In 演算子と 1 つの値を指定する。

次の例は、ワークロードの分離リクエストとして解釈されるポッド仕様の抜粋です。このポッドにはキー foo、値 bar をラベルに持つノードの容認機能があります。この例では nodeAffinity を使用してノードを選択しています。

spec:
  tolerations:
  - key: foo
    operator: Equal
    value: bar
    effect: NoSchedule
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: foo
            operator: In
            values:
            - bar

このポッドが存在すれば、taint が key=value:NoSchedule でラベルが key=value のノードが作成対象とみなされます。

次の例では nodeSelector を使用していますが、結果は同じです。

spec:
  tolerations:
  - key: foo
    operator: Equal
    value: bar
    effect: NoSchedule
  nodeSelector:
    foo: bar

自動プロビジョニングされたノードプールの削除

自動プロビジョニングされたノードプールにノードが存在しない場合、GKE はそのノードプールを削除します。「自動プロビジョニングあり」とマークされていないノードプールは削除されません。

サポートされているマシンタイプ

現在、ノード自動プロビジョニングによるノードプールの作成には「最大 16 個の vCPU を持つマシン」という制限が課せられています。この制限は今後解除される予定です。

スケーラビリティの制限

現在、ノードの自動プロビジョニングは、最大 100 ノードのクラスタでテストされています。それよりも大規模なクラスタでこの機能を使用することはおすすめしません。これとは別に、クラスタ オートスケーラーのスケーラビリティ制限が適用されます。

自動プロビジョニングされるノードプール数の制限

同じクラスタ内に存在できる自動プロビジョニングされたノードプールの数は 15 以下です。この制限に達すると、自動プロビジョニングされたノードプールはもう作成されません。

ノード自動プロビジョニング機能を有効にする

gcloud

ノード自動プロビジョニング機能を有効にするには、次のコマンドを実行します。

gcloud beta container clusters update [CLUSTER_NAME] --enable-autoprovisioning \
        --max-cpu 10 --max-memory 64

コマンドの説明:

  • --enable-autoprovisioning は、ノード自動プロビジョニング機能を有効にすることを示します。
  • --max-cpu は、クラスタ内の最大コア数を指定します。
  • --max-memory は、クラスタ内の最大メモリ量(GB)を指定します。

GPU の制限を設定する

gcloud

ノード自動プロビジョニングを GPU に適用する場合は、クラスタ内の GPU タイプごとに GPU の総数を制限することをおすすめします。具体的には、次のコマンドを実行します。

gcloud beta container clusters update [CLUSTER_NAME] --enable-autoprovisioning \
        --max-cpu 10 --max-memory 64 --max-accelerator type=nvidia-tesla-k80,count=4

コマンドの説明:

  • --enable-autoprovisioning は、ノード自動プロビジョニング機能を有効にすることを示します。
  • --max-cpu は、クラスタ内の最大コア数を指定します。
  • --max-memory は、クラスタ内の最大メモリ量(GB)を指定します。
  • --max-accelerator は、nvidia-tesla-k80 GPU アクセラレータの最大数を指定します。

次のように構成ファイルから制限を読み込むこともできます。

gcloud beta container clusters update [CLUSTER_NAME] --enable-autoprovisioning \
         --autoprovisioning-config-file [FILE_NAME]

コマンドの説明: * --enable-autoprovisioning は、ノード自動プロビジョニング機能を有効にすることを示します。 * --autoprovisioning-config-file は、リソースの制限を含むファイルを指定します。 構成例は次のとおりです。

  -resourceType: 'cpu'
   minimum: 4
   maximum: 10
  -resourceType: 'memory'
   maximum: 64
  -resourceType: 'nvidia-tesla-k80'
   maximum: 4
  -resourceType: 'nvidia-tesla-v100'
   maximum: 2

ノード自動プロビジョニング機能を無効にする

特定のクラスタのノード自動プロビジョニング機能を無効にすると、ノードプールが自動プロビジョニングされなくなります。

gcloud

ノード自動プロビジョニング機能を無効にするには、次のコマンドを実行します。

gcloud beta container clusters update [CLUSTER_NAME] --no-enable-autoprovisioning

コマンドの説明:

  • --no-enable-autoprovisioning は、ノード自動プロビジョニング機能を無効にすることを示します。

ノードプールを「自動プロビジョニングあり」とマークする

クラスタ内の任意のノードプールに「自動プロビジョニングあり」とマークを付けることができます。これを行うと、そのノードプールは使用されなくなったときに自動的に削除される可能性があります。

gcloud

ノードプールに「自動プロビジョニングあり」とマークを付けるには、次のコマンドを実行します。

gcloud beta container node-pool update [NODE_POOL_NAME] --enable-autoprovisioning

コマンドの説明:

  • --enable-autoprovisioning は、ノードプールに「自動プロビジョニングあり」とマークを付けることを示します。

ノードプールを「自動プロビジョニングなし」とマークする

ノードプールに「自動プロビジョニングなし」とマークを付けることができます。

gcloud

ノードプールに「自動プロビジョニングなし」とマークを付けるには、次のコマンドを実行します。

gcloud beta container node-pool update [NODE_POOL_NAME] --no-enable-autoprovisioning

コマンドの説明:

  • --no-enable-autoprovisioning は、ノードプールに「自動プロビジョニングなし」とマークを付けることを示します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント