ノード数を変更すると、TKG サービス クラスタを水平方向にスケーリングできます。また、ノードをホストする仮想マシン クラスを変更すると、垂直方向にスケーリングできます。クラスタ ノードに接続されたボリュームをスケーリングすることもできます。
サポートされている手動スケーリング操作
ノード | 水平方向のスケール アウト | 水平方向のスケール イン | 垂直方向のスケーリング | ボリュームのスケーリング |
---|---|---|---|---|
制御プレーン | はい | なし | はい | はい* |
ワーカー | はい | はい | はい | はい |
- 制御プレーン ノードの数は奇数(1 または 3)である必要があります。制御プレーンのスケール アウトはサポートされていますが、制御プレーンのスケール インはサポートされていません。制御プレーンのスケール アウトを参照してください。
- クラスタ ノードを垂直方向にスケーリングするときに、使用可能なリソースが不足していると、ノード上でワークロードを実行できなくなる可能性があります。そのため、通常は水平方向にスケーリングする方法が推奨されます。ワーカー ノードのスケール アウトを参照してください。
- 仮想マシン クラスは変更できません。TKG クラスタで使用される仮想マシン クラスを編集した後に、このクラスタをスケール アウトした場合、新しいクラスタ ノードは更新されたクラス定義を使用しますが、既存のクラスタ ノードは初期のクラス定義を引き続き使用するため、不一致が生じます。仮想マシン クラスについてを参照してください。
- ワーカー ノードのボリュームはプロビジョニング後に変更できます。また、vSphere 8 U3 以降および互換性のある TKr を使用している場合は、制御プレーン ノードも変更できます。クラスタ ノード ボリュームのスケーリングを参照してください。
スケーリングの前提条件:Kubectl 編集の構成
TKG クラスタをスケーリングするには、kubectl edit CLUSTER-KIND/CLUSTER-NAME
コマンドを使用してクラスタのマニフェストを更新します。マニフェストに対する変更を保存すると、変更が反映されてクラスタが更新されます。kubectl のテキスト エディタの構成を参照してください。
kubectl edit tanzukubernetescluster/tkg-cluster-1 tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
kubectl edit tanzukubernetescluster/tkg-cluster-1 Edit cancelled, no changes made.
制御プレーンのスケール アウト
- スーパーバイザー にログインします。
kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
- TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context tkg-cluster-ns
- vSphere 名前空間 で実行されている Kubernetes クラスタを一覧表示します。
次の構文を使用します。
kubectl get CLUSTER-KIND -n tkg-cluster-ns
たとえば、v1alpha3 API クラスタの場合は、次のコマンドを実行します。kubectl get tanzukubernetescluster -n tkg-cluster-ns
たとえば、v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster -n tkg-cluster-ns
- ターゲット クラスタで実行されているノードの数を取得します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
TKG クラスタには、1 台の制御プレーン ノードと、3 台のワーカー ノードが含まれています。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster-1 1 3 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl get cluster tkg-cluster-1
kubectl edit
コマンドを使用して、編集するクラスタ マニフェストをロードします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。kubectl edit tanzukubernetescluster/tkg-cluster-1
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl edit cluster/tkg-cluster-1
クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。
- マニフェストの
spec.topology.controlPlane.replicas
セクションで、制御プレーン ノードの数を 1 から 3 に増やします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。... spec: topology: controlPlane: replicas: 1 ...
... spec: topology: controlPlane: replicas: 3 ...
v1beta1 API クラスタの場合は、次のコマンドを実行します。... spec: ... topology: class: tanzukubernetescluster controlPlane: metadata: {} replicas: 1 variables: ...
... spec: ... topology: class: tanzukubernetescluster controlPlane: metadata: {} replicas: 3 variables: ...
- テキスト エディタにファイルを保存して、変更を適用します。(キャンセルするには、保存せずにエディタを閉じます。)
マニフェストに対する変更を保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー の 仮想マシン サービス によって新しい制御プレーン ノードがプロビジョニングされます。
- 新しいノードが追加されていることを確認します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
スケール アウト制御プレーンのノード数が 3 になりました。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster-1 3 3 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl get cluster tkg-cluster-1
ワーカー ノードのスケール アウト
ワーカー ノードの数を増やすことで、TKG クラスタをスケール アウトできます。
- スーパーバイザー にログインします。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context tkg-cluster-ns
- vSphere 名前空間 で実行されている Kubernetes クラスタを一覧表示します。
次の構文を使用します。
kubectl get CLUSTER-KIND -n tkg-cluster-ns
たとえば、v1alpha3 API クラスタの場合は、次のコマンドを実行します。kubectl get tanzukubernetescluster -n tkg-cluster-ns
たとえば、v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster -n tkg-cluster-ns
- ターゲット クラスタで実行されているノードの数を取得します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
たとえば、次のクラスタには、3 台の制御プレーン ノードと、3 台のワーカー ノードが含まれています。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster-1 3 3 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster tkg-cluster-1
kubectl edit
コマンドを使用して、編集するクラスタ マニフェストをロードします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl edit tanzukubernetescluster/tkg-cluster-1
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl edit cluster/tkg-cluster-1
クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。
- ターゲット ワーカー ノード プールの
spec.topology.nodePools.NAME.replicas
値を編集して、ワーカー ノードの数を増やします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。... spec: topology: ... nodePools: - name: worker-1 replicas: 3 ...
... spec: topology: ... nodePools: - name: worker-1 replicas: 4 ...
v1beta1 API クラスタの場合は、次のコマンドを実行します。... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 3 ...
... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 4 ...
- 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。
ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー の 仮想マシン サービス によって新しいワーカー ノードがプロビジョニングされます。
- 新しいノードが追加されていることを確認します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
スケール アウト後、クラスタ内のワーカー ノード数は 4 になります。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster 3 4 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl get cluster tkg-cluster-1
ワーカー ノードのスケール イン
ワーカー ノードの数を減らすことで、TKG クラスタをスケール インできます。
- スーパーバイザー にログインします。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context tkg-cluster-ns
- vSphere 名前空間 で実行されている Kubernetes クラスタを一覧表示します。
次の構文を使用します。
kubectl get CLUSTER-KIND -n tkg-cluster-ns
たとえば、v1alpha3 API クラスタの場合は、次のコマンドを実行します。kubectl get tanzukubernetescluster -n tkg-cluster-ns
たとえば、v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster -n tkg-cluster-ns
- ターゲット クラスタで実行されているノードの数を取得します。
kubectl get tanzukubernetescluster tkg-cluster-1
- ターゲット クラスタで実行されているノードの数を取得します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
たとえば、次のクラスタには、3 台の制御プレーン ノードと、4 台のワーカー ノードが含まれています。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster 3 4 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster tkg-cluster-1
kubectl edit
コマンドを使用して、編集するクラスタ マニフェストをロードします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl edit tanzukubernetescluster/tkg-cluster-1
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl edit cluster/tkg-cluster-1
クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。
- ターゲット ワーカー ノード プールの
spec.topology.nodePools.NAME.replicas
値を編集して、ワーカー ノードの数を減らします。v1alpha3 API クラスタの場合は、次のコマンドを実行します。... spec: topology: ... nodePools: - name: worker-1 replicas: 4 ...
... spec: topology: ... nodePools: - name: worker-1 replicas: 3 ...
v1beta1 API クラスタの場合は、次のコマンドを実行します。... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 4 ...
... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 3 ...
- 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。
ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー の 仮想マシン サービス によって新しいワーカー ノードがプロビジョニングされます。
- ワーカー ノードが削除されたことを確認します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl get tanzukubernetescluster tkg-cluster-1
スケール イン後、クラスタ内のワーカー ノード数は 3 になります。NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY tkg-cluster-ns tkg-cluster-1 3 3 v1.24.9---vmware.1-tkg.4 5d12h True
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl get cluster tkg-cluster-1
クラスタの垂直方向のスケーリング
スーパーバイザー 上の TKG は、クラスタ制御プレーンおよびワーカー ノードの垂直方向のスケーリングをサポートしています。クラスタ ノードで使用される 仮想マシン クラスを変更して、TKG クラスタを垂直方向にスケーリングします。TKG クラスタがプロビジョニングされている vSphere 名前空間 に、使用する仮想マシン クラスをバインドする必要があります。
スーパーバイザー 上の TKG は、システムに組み込まれているローリング アップデート メカニズムを介した垂直方向のスケーリングをサポートしています。VirtualMachineClass
の定義を変更すると、この新しいクラスを使用して新しいノードがロール アウトされて、古いノードがスピン ダウンされます。TKG サービス クラスタの更新を参照してください。
- スーパーバイザー にログインします。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context tkg-cluster-ns
- vSphere 名前空間 で実行されている Kubernetes クラスタを一覧表示します。
次の構文を使用します。
kubectl get CLUSTER-KIND -n tkg-cluster-ns
たとえば、v1alpha3 API クラスタの場合は、次のコマンドを実行します。kubectl get tanzukubernetescluster -n tkg-cluster-ns
たとえば、v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl get cluster -n tkg-cluster-ns
- ターゲット TKG クラスタを記述し、仮想マシンのクラスを確認します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl describe tanzukubernetescluster tkg-cluster-1
たとえば、次のクラスタでは best-effort-medium 型の仮想マシン クラスが使用されています。
spec: topology: controlPlane: replicas: 3 vmClass: best-effort-medium ... nodePools: - name: worker-nodepool-a1 replicas: 3 vmClass: best-effort-medium ...
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl describe cluster tkg-cluster-1
たとえば、次のクラスタでは best-effort-medium 型の仮想マシン クラスが使用されています。
... Topology: ... Variables: ... Name: vmClass Value: best-effort-medium ...
注: v1beta1 API クラスタの場合、デフォルトでは vmClass は単一の変数としてグローバルに設定されます。この設定をオーバーライドして、制御プレーン ノードとワーカー ノードに別の仮想マシン クラスを使用できます。API リファレンスの「 vmClass」を参照してください。 - 使用可能な仮想マシン クラスを一覧表示して、記述します。
kubectl get virtualmachineclass
kubectl describe virtualmachineclass
- ターゲット クラスタのマニフェスト開いて編集します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl edit tanzukubernetescluster/tkg-cluster-1
v1beta1 API クラスタの場合は、次のコマンドを実行します。kubectl edit cluster/tkg-cluster-1
クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。
- 仮想マシン クラスを変更して、マニフェストを編集します。
v1alpha3 API クラスタの場合は、制御プレーンの仮想マシン クラスを
guaranteed-medium
に、ワーカー ノードの仮想マシン クラスをguaranteed-large
に変更します。spec: topology: controlPlane: replicas: 3 vmClass: guaranteed-medium ... nodePools: - name: worker-nodepool-a1 replicas: 3 vmClass: guaranteed-large ...
v1beta API クラスタの場合は、仮想マシン クラスをguaranteed-large
に変更します。... Topology: ... Variables: ... Name: vmClass Value: guaranteed-large ...
- 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。
ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドで、スーパーバイザー の TKG は TKG クラスタのローリング アップデートを実行します。
- TKG クラスタが新しい仮想マシン クラスを使用して更新されていることを確認します。
v1alpha3 API クラスタの場合は、次のコマンドを実行します。
kubectl describe tanzukubernetescluster tkg-cluster-1
v1beta1 API クラスタの場合は、次のコマンドを実行します。
kubectl describe cluster tkg-cluster-1
クラスタ ノード ボリュームのスケーリング
ノードの TKG クラスタ仕様では、必要に応じてノードの 1 つ以上のパーシステント ボリュームを宣言できます。ノード ボリュームの宣言は、ワーカー ノードのコンテナ ランタイムや kubelet など、変更の多いコンポーネントに役立ちます。
ボリューム ノード | 説明 |
---|---|
ワーカー ノードのボリュームは変更できる |
TKG クラスタがプロビジョニングされた後に、ワーカー ノード ボリュームを追加または更新できます。ローリング アップデートを開始すると、クラスタは新しいボリュームまたは変更されたボリュームを使用して更新されます。
注意: 新しいボリュームまたは変更されたボリュームを含むワーカー ノードをスケーリングすると、ローリング アップデート中に現在のボリュームのデータが削除されます。次の説明を参照してください。
TKG クラスタ ノード用に宣言されたボリュームは短期ボリュームとして扱われます。TKG クラスタは、vSphere 名前空間内のパーシステント ボリューム要求 (PVC) を使用して、ボリューム容量が TKG クラスタのストレージ割り当てにカウントされるようにします。TKC ボリュームのキャパシティを増やすと、Kubernetes クラスタ API (CAPI) は新しい PVC を使用して新しいワーカーを展開します。この場合、TKG はデータ移行を実行しませんが、Kubernetes はワークロード ポッドを適切にスケジューリングまたは再スケジューリングします。 |
制御プレーン ノードのボリュームは変更できる(vSphere 8 U3 以降を使用している場合) |
vSphere 8 U3 以降および互換性のある Tanzu Kubernetes リリースを使用している場合は、TKG サービス クラスタがプロビジョニングされた後に、制御プレーン ノードのボリュームを追加または更新できます。 vSphere 8 U3 以降を使用していない場合、Kubernetes クラスタ API (CAPI) では、クラスタの作成後に クラスタの作成後に制御プレーン ボリュームを追加または変更しようとすると、要求は拒否され、「変更できないフィールドの更新は許可されていません」というエラー メッセージが表示されます。 |
宣言されたノード ボリュームを含む、v1alpha3 API に基づくクラスタ仕様の抜粋を次に示します。必要に応じて、この抜粋の取得元になる TKG クラスタの完全な例については、「v1alpha3 の例:デフォルトのストレージとノード ボリュームを使用する TKC」を参照してください。v1beta1 API クラスタの例については、「v1beta1 の例:デフォルトの ClusterClass に基づくカスタム クラスタ」を参照してください。
apiVersion: run.tanzu.vmware.com/v1alpha3 kind: TanzuKubernetesCluster ... spec: topology: controlPlane: replicas: 3 storageClass: tkg-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.24.9---vmware.1-tkg.4 nodePools: - name: worker-nodepool-a1 replicas: 3 storageClass: tkg-storage-policy vmClass: guaranteed-large tkr: reference: name: v1.24.9---vmware.1-tkg.4 volumes: - name: containerd mountPath: /var/lib/containerd capacity: storage: 50Gi - name: kubelet mountPath: /var/lib/kubelet capacity: storage: 50Gi - name: worker-nodepool-a2 ... settings: ...