ノード数を変更するか、ノードをホストする仮想マシン クラスを垂直方向に変更することで、Tanzu Kubernetes クラスタを水平方向にスケーリングできます。

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

次の表に、 Tanzu Kubernetes クラスタでサポートされているスケーリング操作を示します。
表 1. Tanzu Kubernetes クラスタでサポートされているスケーリング操作
ノード 水平方向のスケール アウト 水平方向のスケール イン 垂直方向のスケーリング ボリュームのスケーリング
制御プレーン はい なし はい なし
ワーカー はい はい はい はい
次の考慮事項に留意してください。
  • クラスタ ノードを垂直方向にスケーリングするときに、使用可能なリソースが不足していると、ノード上でワークロードを実行できなくなる可能性があります。このため、水平方向にスケーリングする方法が推奨されることがあります。
  • 仮想マシン クラスは変更できません。Tanzu Kubernetes クラスタで使用される仮想マシン クラスを編集した後に、このクラスタをスケール アウトした場合、新しいクラスタ ノードは更新されたクラス定義を使用しますが、既存のクラスタ ノードは初期のクラス定義を引き続き使用するため、不一致が生じます。Tanzu Kubernetes クラスタの仮想マシンのクラスを参照してください。
  • ワーカー ノードのボリュームは、プロビジョニング後に変更できますが、制御プレーン ノードのボリュームは変更できません。

スケーリングの前提条件:Kubectl 編集の構成

Tanzu Kubernetes クラスタを拡張するには、kubectl edit tanzukubernetescluster/CLUSTER-NAME コマンドを使用してクラスタ マニフェストを更新します。kubectl edit コマンドを実行すると、KUBE_EDITOR または EDITOR の環境変数によって定義されたテキスト エディタ内にクラスタ マニフェストが開きます。環境変数を設定する手順については、Kubectl のデフォルトのテキスト エディタの指定を参照してください。

マニフェストの変更を保存すると、 kubectl から編集内容が正常に記録されたことが報告され、この変更内容を使用してクラスタが更新されます。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited
キャンセルするには、保存せずにエディタを閉じます。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
Edit cancelled, no changes made.

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

制御プレーン ノードの数を 1 から 3 に増やすことで、 Tanzu Kubernetes クラスタをスケール アウトできます。制御プレーン ノードの数は奇数にする必要があります。制御プレーンではスケーリングできません。
  1. スーパーバイザー クラスタ で認証します。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Tanzu Kubernetes クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkgs-cluster-ns
  3. この名前空間で実行されている Kubernetes クラスタを一覧表示します。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. ターゲット クラスタで実行されているノードの数を取得します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    たとえば、次のクラスタには、1 台の制御プレーン ノードと、3 台のワーカー ノードが含まれています。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     1               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

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

  6. spec.topology.controlPlane.count パラメータを特定し、ノードの数を 1 から 3 に増やします。
    ...
    controlPlane:
        replicas: 1
    ...
    
    ...
    ControlPlane:
        replicas: 3
    ...
    
  7. 変更を適用するには、テキスト エディタでこのファイルを保存します。キャンセルするには、保存せずにエディタを閉じます。

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

  8. 新しいノードが追加されていることを確認します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    スケール アウト制御プレーンのノード数が 3 になりました。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

ワーカー ノードのスケール アウト

kubectl を使用してワーカー ノードの数を増やすことで、Tanzu Kubernetes クラスタをスケール アウトできます。

  1. スーパーバイザー クラスタ で認証します。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Tanzu Kubernetes クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkgs-cluster-ns
  3. この名前空間で実行されている Kubernetes クラスタを一覧表示します。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. ターゲット クラスタで実行されているノードの数を取得します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    たとえば、次のクラスタには、3 台の制御プレーン ノードと、3 台のワーカー ノードが含まれています。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

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

  6. spec.topology.workers.count パラメータを特定し、ノードの数を増やします。
    ...
    workers:
        replicas: 3
    ...
    
    ...
    workers:
        replicas: 4
    ...
    
  7. 変更を適用するには、テキスト エディタでこのファイルを保存します。キャンセルするには、保存せずにエディタを閉じます。

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

  8. 新しいワーカー ノードが追加されていることを確認します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    スケール アウト後、クラスタ内のワーカー ノード数は 4 になります。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

ワーカー ノードのスケール イン

ワーカー ノードの数を減らすことで、Tanzu Kubernetes クラスタをスケール インできます。制御プレーンのスケーリングはサポートされていません。

  1. スーパーバイザー クラスタ で認証します。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Tanzu Kubernetes クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkgs-cluster-ns
  3. この名前空間で実行されている Kubernetes クラスタを一覧表示します。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. ターゲット クラスタで実行されているノードの数を取得します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    たとえば、次のクラスタには、3 台の制御プレーン ノードと、4 台のワーカー ノードが含まれています。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. kubectl edit コマンドを使用して、編集するクラスタ マニフェストをロードします。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

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

  6. spec.topology.workers.count パラメータを特定し、ノードの数を減らします。
    ...
    workers:
        replicas: 4
    ...
    
    ...
    workers:
        replicas: 2
    ...
    
  7. 変更を適用するには、テキスト エディタでこのファイルを保存します。キャンセルするには、保存せずにエディタを閉じます。

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

  8. ワーカー ノードが削除されたことを確認します。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    スケール イン後、クラスタ内のワーカー ノード数は 2 になります。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               2        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

クラスタの垂直方向のスケーリング

クラスタ ノードのホストに使用されている仮想マシンのクラスを変更することで、Tanzu Kubernetes クラスタを垂直方向にスケーリングできます。垂直方向のスケーリングは、制御プレーンノードとワーカー ノードの両方でサポートされています。

Tanzu Kubernetes Grid サービス は、サービスに組み込まれているローリング アップデート メカニズムを使用して、クラスタ ノードの垂直方向のスケーリングをサポートします。VirtualMachineClass の定義を変更すると、この新しいクラスを使用して新しいノードがロール アウトされて、古いノードがスピン ダウンされます。Tanzu Kubernetes クラスタの更新を参照してください。

  1. スーパーバイザー クラスタ で認証します。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Tanzu Kubernetes クラスタが実行されている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkgs-cluster-ns
  3. この名前空間で実行されている Kubernetes クラスタを一覧表示します。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. ターゲット Tanzu Kubernetes クラスタを記述し、仮想マシンのクラスを確認します。
    kubectl describe tanzukubernetescluster tkgs-cluster-2

    たとえば、次のクラスタでは best-effort-medium 型の仮想マシン クラスが使用されています。

    Spec:
      ...
      Topology:
        Control Plane:
          Class:          best-effort-medium
          ...
        nodePool-a1:
          Class:          best-effort-medium
          ...
    
  5. 使用可能な仮想マシン クラスを一覧表示して、記述します。
    kubectl get virtualmachineclassbinding
    kubectl describe virtualmachineclassbinding
    注: 使用する仮想マシン クラスを、 vSphere 名前空間 にバインドする必要があります。 Tanzu Kubernetes クラスタの仮想マシンのクラスを参照してください。
  6. ターゲット クラスタのマニフェスト開いて編集します。
    kubectl edit tanzukubernetescluster/tkgs-cluster-2

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

  7. 仮想マシン クラスを変更して、マニフェストを編集します。
    たとえば、制御プレーン ノードとワーカー ノードに guaranteed-large 仮想マシン クラスを使用するように、クラスタ マニフェストを編集します。
    spec:
      topology:
        controlPlane:
          class: guaranteed-large
          ...
        nodePool-a1:
          class: guaranteed-large
          ...
    
  8. 変更を適用するには、テキスト エディタでこのファイルを保存します。キャンセルするには、保存せずにエディタを閉じます。

    ファイルを保存すると、kubectl によって変更がクラスタに適用されます。Tanzu Kubernetes Grid サービス はバックグラウンドで新しいノードをプロビジョニングし、古いノードを削除します。ローリング アップデート プロセスの説明については、Tanzu Kubernetes Grid サービス クラスタの更新についてを参照してください。

  9. クラスタが更新されたことを確認します。
    kubectl get tanzukubernetescluster
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

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

ノードの Tanzu Kubernetes クラスタ仕様には、1 つ以上のパーシステント ボリュームを宣言するオプションがあります。ノード ボリュームの宣言は、制御プレーンの ectd データベースやワーカー ノードのコンテナ ランタイムなど、変更の多いコンポーネントに役立ちます。リファレンスのために、これらの両方のノード ボリュームが宣言されたクラスタ仕様の抜粋を以下に示します。(クラスタ仕様の完全な例は、こちらにあります。)

クラスタの作成後に 1 つ以上のノード ボリュームを追加または変更する場合は、次の考慮事項に留意してください。
ボリューム ノード 説明
ワーカー ノードのボリュームは変更できます。
Tanzu Kubernetes クラスタがプロビジョニングされた後に、ワーカー ノード ボリュームを追加または更新できます。ローリング アップデートを開始すると、クラスタは新しいボリュームまたは変更されたボリュームを使用して更新されます。
注意: 新しいボリュームまたは変更されたボリュームを含むワーカー ノードをスケーリングすると、ローリング アップデート中に現在のボリュームのデータが削除されます。
制御プレーン ノードのボリュームは変更できません。 Tanzu Kubernetes クラスタがプロビジョニングされた後に、制御プレーン ノードのボリュームを追加または更新することはできません。Kubernetes クラスタ API (CAPI) では、クラスタの作成後に spec.toplogy.controlPlane.volumes を変更することはできません。クラスタの作成後に制御プレーン ボリュームを追加または変更しようとすると、要求は拒否され、「変更できないフィールドの更新は許可されていません」というエラー メッセージが表示されます。
spec:
  topology:
    controlPlane:
      replicas: 3
      vmClass: guaranteed-medium
      storageClass: vwt-storage-policy
      volumes:
        - name: etcd
          mountPath: /var/lib/etcd
          capacity:
            storage: 4Gi
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: worker-nodepool-a1
      replicas: 3
      vmClass: guaranteed-large
      storageClass: vwt-storage-policy
      volumes:
        - name: containerd
          mountPath: /var/lib/containerd
          capacity:
            storage: 16Gi