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

ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。クラスタ内のすべてのノードは、ノードプールに属している必要があります。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. [Nodes address 1] フィールドに、ワーカーノード マシンの IP アドレスを入力します。

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

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

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

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

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 停止予算によってブロックされたノードの削除をご覧ください。

次のステップ

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