ユーザー クラスタを作成する場合は、少なくとも 1 つのノードプールを構成する必要があります。ノードプールとはすべて同じ構成を持つノードのグループです。クラスタを作成した後は、新しいノードプールの追加、ノードプールの設定の更新、ノードプールの削除を行えます。
ノードプールを管理するツールを選択する
ノードプールを作成、更新、削除する方法は、クラスタが GKE On-Prem API によって管理されているかどうかによります。次のいずれかに該当する場合は、ユーザー クラスタが GKE On-Prem API によって管理されています。
クラスタが Google Cloud コンソールで、または Google Cloud CLI(gcloud CLI)を使用して作成されていると、クラスタを管理する GKE On-Prem API が自動的に構成されます。
クラスタは
gkectl
を使用して作成されているものの、GKE On-Prem API で管理されるように構成されている。
GKE On-Prem API がユーザー クラスタを管理している場合は、コンソールまたは gcloud CLI を使用してノードプールを管理できます。ユーザー クラスタが GKE On-Prem API で管理されていない場合は、管理ワークステーションの gkectl
を使用してノードプールを管理します。
gcloud CLI を使用する予定がある場合は、gcloud CLI がインストールされているパソコンで次のようにします。
ご自分の Google アカウントでログインします。
gcloud auth login
コンポーネントを更新します。
gcloud components update
ノードプールを追加する
クラスタが GKE On-Prem API によって管理されている場合は、コンソールと gcloud CLI のいずれかを使用してノードプールを追加できます。ただし、次のノードプール設定を構成するには、管理ワークステーションで gkectl
を使用する必要があります。
- OS イメージタイプのウィンドウ
- vSphere データストア
vSphere タグ。ノードプール内のすべての VM にタグを追加する場合は、vCenter ユーザー アカウントに次の vSphere のタグ付け権限が必要です。
- vSphere Tagging.Assign または vSphere タグ付け解除
- vSphere Tagging.Assign またはオブジェクトに対する vSphere タグ付け解除(vSphere 7)
別のノードプールを追加する前に、クラスタで十分な IP アドレスが使用可能であることを確認してください。
gkectl
管理ワークステーションで次のようにします。
ユーザー クラスタの構成ファイルで、
nodePools
セクションに入力します。次のフィールドを指定する必要があります。
nodePools.[i].name
nodePools[i].cpus
nodePools.[i].memoryMB
nodePools.[i].replicas
次のフィールドは省略可能です。
nodePools[i].bootDiskSizeGB
またはnodePools[i].osImageType
が含まれない場合は、デフォルト値が使用されます。nodePools[i].labels
nodePools[i].taints
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
次のコマンドを実行します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
以下を置き換えます。
ADMIN_CLUSTER_KUBECONFIG
は、管理クラスタの kubeconfig ファイルのパスに置き換えます。USER_CLUSTER_CONFIG
は、ユーザー クラスタの構成ファイルのパスに置き換えます。
構成の例
次の構成の例では、属性が異なるノードプールが 4 つあります。
pool-1
: 必要最小限の属性のみが指定されています- (
pool-2
:vsphere.datastore
、vsphere.tags
を含む) - (
pool-3
:taints
、labels
を含む) - (
pool-4
:osImageType
、bootDiskSizeGB
を含む)
nodePools:
- name: pool-1
cpus: 4
memoryMB: 8192
replicas: 5
- name: pool-2
cpus: 8
memoryMB: 16384
replicas: 3
vsphere:
datastore: my_datastore
tags:
- category: "purpose"
name: "testing"
- name: pool-3
cpus: 4
memoryMB: 8192
replicas: 5
taints:
- key: "example-key"
effect: NoSchedule
labels:
environment: production
app: nginx
- name: pool-4
cpus: 4
memoryMB: 8192
replicas: 5
osImageType: cos
bootDiskSizeGB: 40
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[
ノードプールを追加] をクリックします。ノードプールを構成します。
- [ノードプール名] を入力します。
- プール内の各ノードの vCPU の数(ユーザー クラスタ ワーカーあたりの最小値は 4)を入力します。
- プール内の各ノードのメモリサイズをメガバイト(MiB)単位で入力します(ユーザー クラスタのワーカーノードあたり最小 8192 MiB、4 の倍数でなければなりません)。
- [ノード] フィールドにプール内のノードの数(3 以上)を入力します。
[OS イメージタイプ] を選択: [Ubuntu Containerd] または、[COS])。
[ブートディスク サイズ] を GiB 単位で入力します(デフォルトは 40 GiB)。
[ノードプールのメタデータ(省略可)] セクションで、Kubernetes ラベルおよび taint を追加する場合、次の操作を行います。
- [+ Add Kubernetes Labels] をクリックします。ラベルの [キー] と [値] を入力します。以上の手順を必要なだけ繰り返してください。
- [+ taint を追加] をクリックします。taint の [キー]、[値]、[効果] を入力します。以上の手順を必要なだけ繰り返してください。
[作成] をクリックします。
Google Cloud コンソールに「クラスタのステータス: 変更中」と表示されます。[詳細を表示] をクリックすると、[リソース ステータス条件] と [ステータス メッセージ] が表示されます。
gcloud CLI
次のコマンドを実行してノードプールを作成します。
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES
以下を置き換えます。
NODE_POOL_NAME
: ノードプールに付ける名前。名前は次の条件を満たしている必要があります。- 最大文字数は 40 文字とする
- 小文字の英数字またはハイフン(
-
)のみを使用している - 先頭が英字である
- 末尾が英数字である
USER_CLUSTER_NAME
: ノードプールが作成されるユーザー クラスタの名前。
FLEET_HOST_PROJECT_ID
: クラスタが登録されているプロジェクトの ID。LOCATION
: ユーザー クラスタに関連付けられた Google Cloud のロケーション。IMAGE_TYPE
: ノードプール内の VM で実行する OS イメージのタイプ。ubuntu_containerd
またはcos
のいずれかに設定します。BOOT_DISK_SIZE
: プール内の各ノードのブートディスクのサイズ(ギビバイト(GiB)単位)。最小値は 40 GiB です。vCPUs
: ノードプール内の各ノードの vCPU 数。最小値は 4 です。MEMORY
: プール内の各ノードのメモリサイズ(メビバイト(MiB)単位)。最小値は、ユーザー クラスタ ワーカーノードあたり 8,192 MiB で、値は 4 の倍数でなければなりません。NODES
: ノードプール内のノード数。最小値は 3 です。
次に例を示します。
gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5
必要に応じて、次を指定できます。
--enable-load-balancer
: MetalLB ロードバランサにのみ関連。指定すると、プール内のノードで MetalLB スピーカーを実行できるようになります。 MetalLB ロードバランサで少なくとも 1 つのノードプールを有効にする必要があります。--image=IMAGE
: vCenter の OS イメージ名。--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
のいずれかを指定します。
次に例を示します。
gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5 \ --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
他の任意のフラグについては、gcloud リファレンスをご覧ください。
ノードプールを更新する
レプリカの数を増やすと、Google Distributed Cloud によって必要なノードがユーザー クラスタに追加され、レプリカの数を減らすとノードが削除されます。ノードプールのレプリカ数を変更しても、ワークロードは中断されません。レプリカの数を増やす場合は、使用可能な IP アドレスがあることを確認してください。
他のノードプール フィールドを更新すると、クラスタでローリング アップデートがトリガーされます。ローリング アップデートでは、Google Distributed Cloud によって新しいノードが作成され、古いノードが削除されます。このプロセスは、古いノードがすべて新しいノードに置き換えられるまで繰り返されます。このプロセスではダウンタイムは発生しませんが、クラスタには更新中に使用できる追加の IP アドレスが必要です。
更新の終了時にノードプールには N 個のノードがあるとします。この場合、そのプール内のノードに使用可能な少なくとも N + 1 個の IP アドレスが必要です。つまり、1 つ以上のプールにノードを追加してクラスタのサイズを変更する場合は、サイズ変更の最後にクラスタのノードプールのすべてに含まれるノードの総数よりすくなくとも 1 つ多い IP アドレスが必要になります。詳細については、十分な IP アドレスが使用可能であることを確認するをご覧ください。
ユーザー クラスタ上でノードプールを更新するには:
gkectl
ユーザー クラスタ構成ファイルの
nodePools
セクションで、変更したいフィールドの値を変更します。クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
以下を置き換えます。
ADMIN_CLUSTER_KUBECONFIG
は、管理クラスタの kubeconfig ファイルのパスに置き換えます。USER_CLUSTER_CONFIG
は、ユーザー クラスタの構成ファイルのパスに置き換えます。
ノードプールで使用される osImageType
を更新する
別の osImageType
を使用するようにノードプールを更新するには、コマンドラインを使用する必要があります。ノードプールで使用される osImageType
を変更するには、次の例のように、ノードプールの構成ファイルを更新して gkectl update cluster
を実行します。
nodePools: - name: np-1 cpus: 4 memoryMB: 8192 replicas: 3 osImageType: ubuntu_containerd
コンソール
コンソールを使用して更新できるフィールドは次のとおりです。
- レプリカの数
- メモリ
- vCPU 数
他のフィールドを更新するには、gcloud CLI または gkectl
を使用します。
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックします。
変更するノードプールの名前をクリックします。
変更するフィールドの横にある [
編集] をクリックして、[完了] をクリックします。をクリックして前のページに戻ります。
Google Cloud コンソールに「クラスタのステータス: 変更中」と表示されます。[詳細を表示] をクリックすると、[リソース ステータス条件] と [ステータス メッセージ] が表示されます。
gcloud CLI
必要に応じて、ノードプールを一覧取得して、更新するノードプールの名前を取得します。
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
次のコマンドを実行してノードプールを更新します。
gcloud container vmware node-pools update NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --ATTRIBUTE_TO_UPDATE \ ...
以下を置き換えます。
NODE_POOL_NAME
: 更新するノードプールの名前。USER_CLUSTER_NAME
: ノードプールを含むユーザー クラスタの名前。LOCATION
: ユーザー クラスタに関連付けられた Google Cloud のロケーション。ATTRIBUTE_TO_UPDATE
: ノードプールの属性を更新する 1 つ以上のフラグ。たとえば、プール内の vCPU とノードの数を変更するには、次のコマンドを実行します。
gcloud container vmware node-pools update default-pool \ --cluster=user-cluster-1 \ --project=example-project-12345 --location=us-west1 \ --cpus=10 \ --replicas=6
更新可能なノードプール属性については、gcloud リファレンスをご覧ください。
変更を確認する
ノードプールが想定通りに作成または更新されたことを確認するには、クラスタノードを調べます。
gkectl
次のコマンドを実行します。
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide
変更を元に戻す必要がある場合は、クラスタ構成ファイルを編集して gkectl update cluster
を実行します。
コンソール
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックします。
表示するノードプールの名前をクリックします。
gcloud CLI
次のコマンドを実行します。
gcloud container vmware node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
ノードプールを削除する
ノードプールは削除できますが、ユーザー クラスタには少なくとも 1 つのノードプールが必要です。ノードプールを削除すると、ノードがワークロードを実行しているかどうかにかかわらず、プールのノードが直ちに削除されます。
ユーザー クラスタからノードプールを削除するには:
gkectl
影響を受けるノードで実行中のワークロードがないことを確認します。
ユーザー クラスタの構成ファイルの
nodePools
セクションからその定義を削除します。クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
以下を置き換えます。
[ADMIN_CLUSTER_KUBECONFIG]
は、管理クラスタの kubeconfig ファイルのパスに置き換えます。[USER_CLUSTER_CONFIG]
は、ユーザー クラスタの構成ファイルのパスに置き換えます。
コンソール
影響を受けるノードで実行中のワークロードがないことを確認します。
コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタリストでクラスタの名前をクリックし、[詳細] パネルの [詳細を表示] をクリックします。
[ノード] タブをクリックします。
削除するノードプールの名前をクリックします。
[
削除] をクリックします。をクリックして前のページに戻ります。
Google Cloud コンソールに「クラスタのステータス: 変更中」と表示されます。[詳細を表示] をクリックすると、[リソース ステータス条件] と [ステータス メッセージ] が表示されます。
gcloud CLI
必要に応じて、ノードプールを一覧取得して、削除するノードプールの名前を取得します。
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
次のコマンドを実行してノードプールを削除します。
gcloud container vmware node-pools delete NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
以下を置き換えます。
NODE_POOL_NAME
: 削除するノードプールの名前。USER_CLUSTER_NAME
: ノードプールを含むユーザー クラスタの名前。LOCATION
: ユーザー クラスタに関連付けられた Google Cloud のロケーション。
トラブルシューティング
通常、
gkectl update cluster
コマンドは失敗した場合に詳細を示します。コマンドが完了し、ノードが表示されない場合は、クラスタの問題の診断ガイドを使用してトラブルシューティングできます。ノードプールの作成または更新中に使用可能な IP アドレスが不足しているなど、クラスタのリソースが不足している可能性があります。IP アドレスが使用可能かどうかを確認する方法については、ユーザー クラスタのサイズ変更をご覧ください。
Creating node MachineDeployment(s) in user cluster…
から続行されません。ユーザー クラスタ内のノードプールの作成または更新には、時間がかかることがあります。ただし、待機時間が著しく長く、なんらかの障害が発生したと思われる場合は、次のコマンドを実行できます。
kubectl get nodes
を実行してノードの状態を取得します。- 準備ができていないノードについては、
kubectl describe node NODE_NAME
を実行して詳細を取得します。