ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。クラスタ内のすべてのノードは、ノードプールに属している必要があります。GKE on Bare Metal クラスタには、コントロール プレーン ノードプール、ロードバランサ ノードプール、ワーカー ノードプールの 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 がインストールされているパソコンで次のようにします。
Google アカウントでログイン
gcloud auth login
コンポーネントを更新します。
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
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックします。
ノードプールのリストが表示されます。
gcloud CLI
クラスタのノードプールを一覧表示します。
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 のロケーション。
ノードプールについて記述します。
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.7
と 10.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
フィールド内のクラスタ名を参照する必要があります。
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノードプールを追加] をクリックします。
ノードプールの名前を入力します。
[Nodes address 1] フィールドに、ワーカーノード マシンの IP アドレスを入力します。
追加するワーカーノード マシンが複数ある場合は、
[アドレスを追加] をクリックします。必要に応じて、Kubernetes ラベルや Kubernetes taint を追加します。
[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
には 次の NoSchedule
、PreferNoSchedule
、NoExecute
のいずれかを指定します。
--validate-only
: 更新を検証するものの、変更を行わない場合は、このフラグを指定します。
ノードプールの更新
kubectl
クラスタ内の nodepools.baremetal.cluster.gke.io
リソースを変更してノードプールを更新します。kubectl edit
を使用してリソースを直接更新できます。または、YAML ファイルを更新して kubectl apply
を使用することもできます。
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックします。
リストで、更新するノードプールをクリックします。
[ノードプールの詳細] ページで、[
編集] をクリックします。必要に応じて設定を変更し、[保存] をクリックします。
gcloud CLI
必要に応じて、クラスタのノードプールを一覧表示して、更新するノードプール名を取得します。
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 のロケーション。
次のコマンドを実行します。
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 には 次のNoSchedule
、PreferNoSchedule
、NoExecute
のいずれかを指定します。--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
コントロール プレーン ノードプールとロードバランサ ノードプールはクラスタの機能に不可欠なため、クラスタから削除できないことに注意してください。
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックしてから、削除するノードプールをクリックします。
[
削除] をクリックします。確認ダイアログでノードプールの名前を入力し、[確認] をクリックします。
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 停止予算によってブロックされたノードの削除をご覧ください。
次のステップ
ノードプールの作成後にワークロード要件が変わった場合は、ワーカー ノードプールを更新してノードを追加または削除できます。ワーカー ノードプールでノードを追加または削除するには、クラスタにノードを追加または削除するをご覧ください。