ノード数を変更すると、TKG サービス クラスタを水平方向にスケーリングできます。また、ノードをホストする仮想マシン クラスを変更すると、垂直方向にスケーリングできます。クラスタ ノードに接続されたボリュームをスケーリングすることもできます。

サポートされている手動スケーリング操作

次の表に、TKG クラスタでサポートされているスケーリング操作を示します。
表 1. TKGS クラスタでサポートされているスケーリング操作
ノード 水平方向のスケール アウト 水平方向のスケール イン 垂直方向のスケーリング ボリュームのスケーリング
制御プレーン はい なし はい はい*
ワーカー はい はい はい はい
次の考慮事項に留意してください。
  • 制御プレーン ノードの数は奇数(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.

制御プレーンのスケール アウト

制御プレーン ノードの数を 1 から 3 に増やすことで、TKG クラスタをスケール アウトします。
注: 本番クラスタには 3 台の制御プレーン ノードが必要です。
  1. スーパーバイザー にログインします。
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkg-cluster-ns
  3. 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
  4. ターゲット クラスタで実行されているノードの数を取得します。

    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
  5. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。
    v1alpha3 API クラスタの場合は、次のコマンドを実行します。
    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API クラスタの場合は、次のコマンドを実行します。
    kubectl edit cluster/tkg-cluster-1

    クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。

  6. マニフェストの 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:
    ...
    
  7. テキスト エディタにファイルを保存して、変更を適用します。(キャンセルするには、保存せずにエディタを閉じます。)

    マニフェストに対する変更を保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー仮想マシン サービス によって新しい制御プレーン ノードがプロビジョニングされます。

  8. 新しいノードが追加されていることを確認します。

    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 クラスタをスケール アウトできます。

  1. スーパーバイザー にログインします。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkg-cluster-ns
  3. 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
  4. ターゲット クラスタで実行されているノードの数を取得します。

    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
  5. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。

    v1alpha3 API クラスタの場合は、次のコマンドを実行します。

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API クラスタの場合は、次のコマンドを実行します。
    kubectl edit cluster/tkg-cluster-1

    クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。

  6. ターゲット ワーカー ノード プールの 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
    ...
  7. 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。

    ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー仮想マシン サービス によって新しいワーカー ノードがプロビジョニングされます。

  8. 新しいノードが追加されていることを確認します。

    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 クラスタをスケール インできます。

  1. スーパーバイザー にログインします。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkg-cluster-ns
  3. 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
  4. ターゲット クラスタで実行されているノードの数を取得します。
    kubectl get tanzukubernetescluster tkg-cluster-1
  5. ターゲット クラスタで実行されているノードの数を取得します。

    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
  6. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。

    v1alpha3 API クラスタの場合は、次のコマンドを実行します。

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API クラスタの場合は、次のコマンドを実行します。
    kubectl edit cluster/tkg-cluster-1

    クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。

  7. ターゲット ワーカー ノード プールの 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
    ...
  8. 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。

    ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドでは、スーパーバイザー仮想マシン サービス によって新しいワーカー ノードがプロビジョニングされます。

  9. ワーカー ノードが削除されたことを確認します。

    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 サービス クラスタの更新を参照してください。

  1. スーパーバイザー にログインします。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkg-cluster-ns
  3. 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
  4. ターゲット 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」を参照してください。
  5. 使用可能な仮想マシン クラスを一覧表示して、記述します。
    kubectl get virtualmachineclass
    kubectl describe virtualmachineclass
    注: 仮想マシン クラスを vSphere 名前空間 にバインドする必要があります。 TKG サービス クラスタでの仮想マシン クラスの使用を参照してください。
  6. ターゲット クラスタのマニフェスト開いて編集します。

    v1alpha3 API クラスタの場合は、次のコマンドを実行します。

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API クラスタの場合は、次のコマンドを実行します。
    kubectl edit cluster/tkg-cluster-1

    クラスタ マニフェストは、KUBE_EDITOR または EDITOR 環境変数によって定義されたテキスト エディタで開かれます。

  7. 仮想マシン クラスを変更して、マニフェストを編集します。
    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
        ...
  8. 変更を適用するには、テキスト エディタでこのファイルを保存します。変更をキャンセルするには、保存せずにエディタを閉じます。

    ファイルを保存すると、kubectl によって変更がクラスタに適用されます。バックグラウンドで、スーパーバイザー の TKG は TKG クラスタのローリング アップデートを実行します。

  9. TKG クラスタが新しい仮想マシン クラスを使用して更新されていることを確認します。

    v1alpha3 API クラスタの場合は、次のコマンドを実行します。

    kubectl describe tanzukubernetescluster tkg-cluster-1

    v1beta1 API クラスタの場合は、次のコマンドを実行します。

    kubectl describe cluster tkg-cluster-1

クラスタ ノード ボリュームのスケーリング

ノードの TKG クラスタ仕様では、必要に応じてノードの 1 つ以上のパーシステント ボリュームを宣言できます。ノード ボリュームの宣言は、ワーカー ノードのコンテナ ランタイムや kubelet など、変更の多いコンポーネントに役立ちます。

クラスタの作成後に 1 つ以上のノード ボリュームを追加または変更する場合は、次の考慮事項に留意してください。
ボリューム ノード 説明

ワーカー ノードのボリュームは変更できる

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) では、クラスタの作成後に spec.toplogy.controlPlane.volumes を変更することはできません。

クラスタの作成後に制御プレーン ボリュームを追加または変更しようとすると、要求は拒否され、「変更できないフィールドの更新は許可されていません」というエラー メッセージが表示されます。

宣言されたノード ボリュームを含む、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:
     ...