GKE On-Prem バージョン 1.3 以降では、ノードプールを作成し、ユーザー クラスタ内とユーザー クラスタ間ですべてが同じ構成を持つノードのグループを定義できます。これにより、各クラスタ内の他のノードに影響を与えることなく、そのノードプールを個別に管理できるようになります。ノードプールの詳細についてご確認ください。
1 つ以上のノードプールをユーザー クラスタの構成ファイルで定義できます。ノードプールを作成すると、各クラスタに追加のノードが作成されます。ノードプールの作成、更新、削除を含め、ノードプールの管理は、ユーザー クラスタの構成ファイルを通じて行います。構成ファイルでノードプールを定義したら、gkectl update cluster
コマンドを使用して変更をクラスタにデプロイします。デプロイした変更は、各ユーザー クラスタにすぐに反映されます。たとえば、クラスタからノードプールを削除すると、そのノードがワークロードを実行しているかどうかにかかわらず、それらのノードは直ちに削除されます。
ノードプールの例:
nodepools:
- name: pool-1
cpus: 4
memorymb: 8192
replicas: 5
新規インストールのヒント: 最初のユーザー クラスタを作成し、そのクラスタ内にノードプールを定義します。次に、そのクラスタの構成ファイルを使用して、同じノードプール設定で追加のユーザー クラスタを作成します。
始める前に
サポート:
バージョン 1.3.0 以降のユーザー クラスタのみがサポートされます。
管理クラスタ内のノードプールはサポートされていません。
現在、
gkectl update cluster
コマンドはノードプール管理のみをサポートしています。構成ファイルにある他の変更はすべて無視されます。ノードプール内のノードは各ユーザー クラスタ内の他のノードとは別に管理できますが、クラスタのノードは個別にアップグレードできません。クラスタをアップグレードすると、すべてのノードがアップグレードされます。
参考情報:
ノードのワークロードを中断することなく、変更のみをノードプール
replicas
にデプロイできます。重要: 他のノードプール構成の変更をデプロイすると、ノードプール内のノードが再作成されます。各ノードプールが、中断されてはいけないワークロードの実行中でないことを確認する必要があります。
ノードプールの変更をデプロイすると、一時的なノードが作成されることがあります。この一時的なノードで IP アドレスが使用可能であることを確認する必要があります。
ノードプールの作成と更新
ノードプールを管理するには、ユーザー クラスタの構成ファイルを変更してデプロイします。1 つ以上のノードプールを作成して各ユーザー クラスタにデプロイできます。
ノードプールを作成または更新するには:
エディタで、ノードプールを作成または更新するユーザー クラスタの構成ファイルを開きます。
構成ファイルの
usercluster
の下にあるnodepools
セクションで、1 つ以上のノードプールを定義します。最低限必要なノードプール属性を構成します。各ノードプールに次の属性を指定する必要があります。
usercluster.nodepools.name
: ノードプールの一意の名前を指定します。この属性を更新すると、ノードが再作成されます。例:name: pool-1
usercluster.nodepools.cpus
: ユーザー クラスタの各ワーカーノードに割り当てる CPU の数を指定します。この属性を更新すると、ノードが再作成されます。例:cpus: 4
usercluster.nodepools.memorymb
: ユーザー クラスタの各ワーカーノードに割り当てられるメモリ量(メガバイト単位)を指定します。この属性を更新すると、ノードが再作成されます。例:memorymb: 8192
usercluster.nodepools.replicas
: ユーザー クラスタがワークロードの実行に使用するワーカーノードの合計数を指定します。この属性は、ノードや実行中のワークロードに影響を与えることなく更新できます。例:replicas: 5
一部の
nodepools
属性は、workernode
(DHCP | 静的 IP)と同じですが、workernode
セクションはすべてのユーザー クラスタに必要です。workernode
を削除することや、nodepools
に置き換えることはできません。例:
nodepools: - name: pool-1 cpus: 4 memorymb: 8192 replicas: 5
複数のノードプールを使用した構成の例については、例をご覧ください。
オプションのノードプール属性を構成します。ノードプール構成にラベルと taint を追加して、ノード ワークロードを実行できます。ノードプールで使用される vSphere Datastore を定義することもできます。
usercluster.nodepools.labels
: 1 つ以上のkey : value
ペアを指定して、ノードプールを一意に識別します。key
とvalue
は文字または数字で始まり、それぞれ最大 63 文字の文字、数字、ハイフン、ドット、アンダースコアを使用できます。構成の詳細については、ラベルをご覧ください。
重要: GKE On-Prem で使用するために予約されているキー(
kubernetes.io
、k8s.io
、googleapis.com
)はラベルに指定できません。例:
labels: key1: value1 key2: value2
usercluster.nodepools.taints
: ノードプールのtaints
を定義するkey
、value
、effect
を指定します。このtaints
は、Pod 用に構成したtolerations
に対応しています。key
は必須ですが、value
は省略できます。どちらも文字または数字で始まる必要があり、文字、数字、ハイフン、ドット、アンダースコアを含めることができます。文字数は 253 文字以下である必要があります。必要に応じて、key
の前に DNS サブドメインを付け、その後に/
を付けることができます。例:example.com/my-app
effect
の有効な値はNoSchedule
、PreferNoSchedule
またはNoExecute
です。構成の詳細については、taint をご覧ください。
例:
taints: - key: key1 value: value1 effect: NoSchedule
usercluster.nodepools.vsphere.datastore
: ノードプールで使用する vSphere Datastore を指定します。これにより、ユーザー クラスタのデフォルトの vSphere Datastore がオーバーライドされます。例:
vsphere: datastore: datastore_name
複数のノードプールを使用した構成の例については、例をご覧ください。
gkectl update cluster
コマンドを使用して、変更をユーザー クラスタにデプロイします。注:
gkectl update cluster
はノードプール管理のみをサポートします。nodepools
セクションの変更のみがデプロイされます。構成ファイル内の他の変更はすべて無視されます。gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
ここで- [ADMIN_CLUSTER_KUBECONFIG]: 管理クラスタの
kubeconfig
ファイルを指定します。 - config.yaml: ユーザー クラスタの編集済み
configuration file
を指定します。このファイルに別の名前を付けている可能性があります。 --dry-run
: オプション フラグ。変更のみを表示するには、このフラグを追加します。ユーザー クラスタに変更はデプロイされません。--yes
: オプション フラグ。コマンドをサイレント モードで実行するには、このフラグを追加します。続行することを確認するプロンプトが無効になります。
コマンドを途中で中止した場合は、同じコマンドをもう一度実行して操作を完了し、変更をユーザー クラスタにデプロイできます。
変更を元に戻す必要がある場合は、構成ファイルの変更を元に戻し、ユーザー クラスタにそれらの変更を再デプロイします。
- [ADMIN_CLUSTER_KUBECONFIG]: 管理クラスタの
すべてのノードを確認して、変更が完了したことを確認します。次のコマンドを実行して、ユーザー クラスタ内のすべてのノードを一覧表示します。
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
ここで、[USER_CLUSTER_KUBECONFIG] は、ユーザー クラスタの
kubeconfig
ファイルです。
ノードプールの削除
ユーザー クラスタからノードプールを削除するには:
ユーザー クラスタの構成ファイルからすべての
nodepools
設定を削除します。複数のノードプールがある場合は、すべての設定を削除する必要があります。実行中のワークロードがないことを確認します。影響を受けるすべてのノードが削除されます。
gkectl update cluster
コマンドを実行して変更をデプロイします。gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
ここで- [ADMIN_CLUSTER_KUBECONFIG]: 管理クラスタの
kubeconfig
ファイルを指定します。 - config.yaml: ユーザー クラスタの編集済み
configuration file
を指定します。このファイルに別の名前を付けている可能性があります。 --dry-run
: オプション フラグ。変更のみを表示するには、このフラグを追加します。ユーザー クラスタに変更はデプロイされません。--yes
: オプション フラグ。コマンドをサイレント モードで実行するには、このフラグを追加します。続行することを確認するプロンプトが無効になります。
- [ADMIN_CLUSTER_KUBECONFIG]: 管理クラスタの
すべてのノードを確認して、変更が完了したことを確認します。次のコマンドを実行して、ユーザー クラスタ内のすべてのノードを一覧表示します。
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
ここで、[USER_CLUSTER_KUBECONFIG] は、ユーザー クラスタの
kubeconfig
ファイルです。
例
次の構成の例では、属性が異なるノードプールが 4 つあります。
pool-1
: 必要最小限の属性のみが指定されていますpool-2
: vSphere Datastore が含まれていますpool-3
: taint とラベルが含まれていますpool-4
: すべての属性が含まれています
...
usercluster:
...
workernode:
cpus: 4
memorymb: 8192
replicas: 3
# (Optional) Node pools with customizable labels, taints, etc.
nodepools:
- name: pool-1
cpus: 4
memorymb: 8192
replicas: 5
- name: pool-2
cpus: 8
memorymb: 16384
replicas: 3
vsphere:
datastore: my_datastore
- name: pool-3
cpus: 4
memorymb: 8192
replicas: 5
taints:
- key: "example-key"
effect: NoSchedule
labels:
environment: production
app: nginx
- name: pool-4
cpus: 8
memorymb: 16384
replicas: 3
taints:
- key: "my_key"
value: my_value1
effect: NoExecute
labels:
environment: test
vsphere:
datastore: my_datastore
...
トラブルシューティング
通常、
gkectl update cluster
コマンドは失敗した場合に詳細を示します。コマンドが完了し、ノードが表示されない場合は、クラスタの問題の診断ガイドを使用してトラブルシューティングできます。ノードプールの作成または更新中に使用可能な IP アドレスが不足しているなど、クラスタのリソースが不足している可能性があります。IP アドレスが使用可能かどうかを確認する方法については、ユーザー クラスタのサイズ変更をご覧ください。
一般的なトラブルシューティング ガイドもご覧ください。
Creating node MachineDeployment(s) in user cluster…
から続行されません。ユーザー クラスタ内のノードプールの作成または更新には、時間がかかることがあります。ただし、待機時間が著しく長く、なんらかの障害が発生したと思われる場合は、次のコマンドを実行できます。
kubectl get nodes
を実行してノードの状態を取得します。- 準備ができていないノードについては、
kubectl describe node [node_name]
を実行して詳細を取得します。