クラスタ内のノードプールを管理する

ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。クラスタ内のすべてのノードは、ノードプールに属している必要があります。Google Distributed Cloud クラスタには、コントロール プレーン ノードプール、ロードバランサ ノードプール、ワーカー ノードプールの 3 種類のノードプールがあります。

このページでは、ワーカー ノードプールのステータスの確認方法と、ワーカー ノードプールの追加、更新、削除方法について説明します。

ノードプールを管理するツールを選択する

ノードプールの管理方法は、クラスタタイプによって異なります。また、ユーザー クラスタの場合は、クラスタが GKE On-Prem API によって管理されているかどうかによっても異なります。次のいずれかに該当する場合は、ユーザー クラスタが GKE On-Prem API によって管理されています。

  • クラスタが Google Cloud コンソールで、または Google Cloud CLI(gcloud CLI)を使用して作成されている。クラスタを管理する GKE On-Prem API が自動的に構成されます。

  • クラスタは bmctl を使用して作成されているものの、GKE On-Prem API で管理されるように構成されている。

GKE On-Prem API がユーザー クラスタを管理している場合は、コンソールまたは gcloud CLI を使用してノードプールを管理できます。ユーザー クラスタが GKE On-Prem API で管理されていない場合は、管理ワークステーションの kubectl を使用してノードプールを管理します。また、kubectl を使用して、ワーカー ノードプールを含むすべてのクラスタタイプ(ハイブリッド、スタンドアロン、ユーザー クラスタ)のノードプールを管理します。

gcloud CLI を使用する予定がある場合は、gcloud CLI がインストールされているパソコンで次の操作を行います。

  1. Google アカウントでログインします。

    gcloud auth login
    
  2. コンポーネントを更新します。

    gcloud components update
    

ノードのステータスを確認する

ノードプールを追加または削除する前に、ノードとそれぞれのノードプールのステータスを確認します。

kubectl

kubectl を使用すると、特定の名前空間またはクラスタ全体のノードのステータスを取得できます。次の例は、クラスタの名前空間 cluster-abm-cluster のノードプールのステータスを示しています。

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

次のような結果が表示されます。

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

表の各列は、ノードのステータスを表します。表の各行は、各ノードのステータスにおけるノードプールあたりのノードの数です。

ノードを追加すると、最初にノードがプロビジョニングされているまで、ノードのステータスは Reconciling になります。ノードがクラスタに追加されると、ノードのステータスが Ready に変わります。

次のコマンドを実行して、クラスタ内のノードのステータスを確認することもできます。

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

コンソール

  1. コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。

    GKE クラスタに移動

  2. ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。

  3. クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。

  4. [ノード] タブをクリックします。

    ノードプールのリストが表示されます。

ノードリストのスクリーンショット

gcloud CLI

  1. クラスタのノードプールを一覧表示します。

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    次のように置き換えます。

    • USER_CLUSTER_NAME: ノードプールを含むユーザー クラスタの名前。

    • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

    • LOCATION: ユーザー クラスタに関連付けられた Google Cloud のロケーション。

  2. ノードプールの説明を取得します。

    gcloud container bare-metal node-pools describe NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    NODE_POOL_NAME は、ノードプールの名前に置き換えます。

クラスタの診断方法について詳しくは、クラスタを診断するためにスナップショットを作成するをご覧ください。

新しいノードプールを追加する

kubectl

ノードプールをクラスタに追加する際は、次のルールに注意してください。

  • 管理クラスタにはロードバランサ ノードプールとコントロール プレーン ノードプールを含めることができますが、ワーカー ノードプールを含めることはできません。管理クラスタにワーカー ノードプールを追加しようとすると、エラーが発生します。

  • クラスタには、1 つのコントロール プレーン ノードプールと 1 つのロードバランサ ノードプールのみを含めることができます。クラスタにコントロール プレーンやロードバランサ ノードプールを追加することはできません。

新しいノードプールをクラスタに追加するには、クラスタに新しい nodepools.baremetal.cluster.gke.io リソースを作成します。次の例では、「machine-learning-pool」という名前の新しいノードプールがマニフェストに追加されています。新しいノードプールは、IP アドレス 10.200.0.710.200.0.8 の 2 つのノードで構成されます。

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

構成を machine-learning-pool.yaml という名前のファイルに保存し、次のコマンドを使用して構成をクラスタに適用します。

kubectl apply -f machine-learning-pool.yaml

ノードプールをクラスタに追加する際は、次の点を考慮する必要があります。

  • NodePool.spec.taints 構成と NodePool.spec.labels 構成はノードに合わせて調整されます。ノードに直接追加した taint とラベルはすべて削除されます。同期プロセス中に直接追加した taint とラベルは、コントロール プレーンによって削除されません。この調整ステップを省略するには、ノードに baremetal.cluster.gke.io/label-taint-no-sync アノテーションを付加します。

  • ノードプール リソースは、関連するクラスタと同じ名前空間に作成し、spec.clusterName フィールド内のクラスタ名を参照する必要があります。

コンソール

  1. コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。

    GKE クラスタに移動

  2. ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。

  3. クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。

  4. [ノードプールを追加] をクリックします。

  5. ノードプールの名前を入力します。

  6. [ノードアドレス 1] フィールドに、ワーカーノード マシンの IP アドレスを入力します。

    追加するワーカーノード マシンが複数ある場合は、[ アドレスを追加] をクリックします。

  7. 必要に応じて、Kubernetes ラベルKubernetes taint を追加します。

  8. [作成] をクリックします。

ノードプールのステータスは、[ノード] タブに表示されます。更新されたステータスを表示するには、ページを更新する必要があります。

gcloud CLI

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

次のように置き換えます。

  • NODE_POOL_NAME: ノードプールに付ける名前。名前は次の条件を満たしている必要があります。

    • 40 文字以下
    • 小文字の英数字またはハイフン(-)のみを使用している
    • 先頭が英字である
    • 末尾が英数字である
  • USER_CLUSTER_NAME: ユーザー クラスタの名前。

  • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

  • LOCATION: クラスタの作成時に指定した Google Cloud ロケーション。

  • NODE_POOL_CONFIG: ノードプールの記述を含む構成ファイルのパス。例:

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

必要に応じて、次を指定できます。

  • --node-labels=KEY=VALUE,...: プール内の各ノードに適用される Kubernetes ラベル(Key-Value ペア)のカンマ区切りのリスト。

  • --node-taints=KEY=VALUE:EFFECT,... Kubernetes taint のカンマ区切りのリスト。

プール内の各ノードに適用されます。taint は、1 つの効果に関連付けられた Key-Value ペアです。taint は、Pod のスケジューリングの toleration で使用されます。EFFECT には、次の NoSchedulePreferNoScheduleNoExecute のいずれかを指定します。

  • --validate-only 更新を検証するだけで変更を加えない場合は、このフラグを指定します。

ノードプールを更新する

kubectl

クラスタ内の nodepools.baremetal.cluster.gke.io リソースを変更してノードプールを更新します。kubectl edit を使用してリソースを直接更新できます。または、YAML ファイルを更新して kubectl apply を使用することもできます。

コンソール

  1. コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。

    GKE クラスタに移動

  2. ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。

  3. クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。

  4. [ノード] タブをクリックします。

  5. リストで、更新するノードプールをクリックします。

  6. [ノードプールの詳細] ページで、[ 編集] をクリックします。

  7. 必要に応じて設定を変更し、[保存] をクリックします。

gcloud CLI

  1. 必要に応じて、クラスタのノードプールを一覧表示して、更新するノードプール名を取得します。

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    次のように置き換えます。

    • USER_CLUSTER_NAME: ノードプールを含むユーザー クラスタの名前。

    • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

    • LOCATION: ユーザー クラスタに関連付けられた Google Cloud のロケーション。

  2. 次のコマンドを実行します。

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

    次のように置き換えます。

    • NODE_POOL_NAME: ノードプールの名前。

    • NODE_CONFIG_FILE: ノードプールの記述を含む構成ファイルのパス。例:

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

必要に応じて、次を指定できます。

  • --node-labels=KEY=VALUE,...: プール内の各ノードに適用される Kubernetes ラベル(Key-Value ペア)のカンマ区切りのリスト。

  • --node-taints=KEY=VALUE:EFFECT,... プール内の各ノードに適用される Kubernetes taint のカンマ区切りのリスト。taint は、1 つの効果に関連付けられた Key-Value ペアです。taint は、Pod のスケジューリングの toleration で使用されます。EFFECT には、次の NoSchedulePreferNoScheduleNoExecute のいずれかを指定します。

  • --validate-only 更新を検証するだけで変更を加えない場合は、このフラグを指定します。

例:

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

ノードプールを削除する

kubectl

ノードプールの削除には、kubectl delete を使用します。たとえば、前のセクションで追加したノードプール(machine-learning-pool)を削除するには、次のコマンドを使用します。

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

コントロール プレーン ノードプールとロードバランサ ノードプールは、クラスタの機能に不可欠なため、クラスタから削除できないことに注意してください。

コンソール

  1. コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。

    GKE クラスタに移動

  2. ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。

  3. クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。

  4. [ノード] タブをクリックし、削除するノードプールをクリックします。

  5. [削除] をクリックします。

  6. 確認ダイアログでノードプールの名前を入力し、[確認] をクリックします。

gcloud CLI

gcloud container bare-metal node-pools delete NODE_POOL_NAME  \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

次のように置き換えます。

  • NODE_POOL_NAME: ノードプールの名前。

  • USER_CLUSTER_NAME: ノードプールを含むユーザー クラスタの名前。

  • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

  • LOCATION: ユーザー クラスタに関連付けられた Google Cloud のロケーション。

クラスタ内のワーカーノードを削除すると、Pod が中断されることがあります。PodDisruptionBudget(PDB)がある場合は、ノードプールの削除がブロックされる可能性があります。Pod 停止ポリシーの詳細については、Pod Disruption Budget によってブロックされたノードの削除をご覧ください。

次のステップ

ノードプールの作成後にワークロード要件が変わった場合は、ワーカー ノードプールを更新してノードを追加または削除できます。ワーカー ノードプールでノードを追加または削除するには、クラスタでノードを追加または削除するをご覧ください。