Terraform を使用してノード容量を管理する

このページでは、エンドツーエンド(E2E)Terraform 自動化モジュールを使用して、既存のクラスタにベアメタル ESXi ノードを追加または削除することで、 Google Cloud の VMware ソリューションでクラスタ容量を拡張または縮小する方法について説明します。

クラスタ容量を拡張する

既存のクラスタを X ノードから X + N ノードに拡張するには、クラスタの初期デプロイ時に使用した Terraform ワークスペースと状態ファイル(terraform.tfstate)を使用します。

次の手順では、4 ノードの管理クラスタに 5 番目のノード(vcf-mgmt-sample-node-5)を追加する方法を示します(e2e-terraform/sample_management_cluster.tfvars ファイルのサンプル構成に基づきます)。

  1. 変数定義ファイル(management_cluster.tfvars)を更新する: management_cluster.tfvars ファイルの構成変数を次のように更新します。

    • deployment_mode 変数に "node_addition" を設定します。
    • number_of_nodes 変数を 4 から 5 に更新します。
    • クラスタの作成時に node_names を明示的に指定した場合は、"vcf-mgmt-sample-node-5" を node_names リストに追加します。最初に指定しなかった場合は、node_names リストを空のままにします。
    • クラスタの作成時にこれらの変数を明示的に指定した場合は、新しい IPv4 アドレスを mgmt_nic_ip_values、vsan_ip_values、vmotion_ip_values、nsx_tep_ip_values、additional_dynamic_nics のリストに追加します。自動割り当てのためにこれらのリストを空のままにした場合は、更新しないでください。
    • クラスタの作成時にこの変数を明示的に指定した場合は、availability_domains リスト([1, 2, 3, 4, 5] など)を更新します。空のままにした場合は、更新しないでください。
    deployment_mode = "node_addition"
    number_of_nodes = 5
    
    node_names = [
      "vcf-mgmt-sample-node-1",
      "vcf-mgmt-sample-node-2",
      "vcf-mgmt-sample-node-3",
      "vcf-mgmt-sample-node-4",
      "vcf-mgmt-sample-node-5" # New node
    ]
    
    mgmt_nic_ip_values = ["10.200.0.3", "10.200.0.4", "10.200.0.5", "10.200.0.6", "10.200.0.7"]
    vsan_ip_values     = ["10.200.1.3", "10.200.1.4", "10.200.1.5", "10.200.1.6", "10.200.1.7"]
    vmotion_ip_values  = ["10.200.2.3", "10.200.2.4", "10.200.2.5", "10.200.2.6", "10.200.2.7"]
    nsx_tep_ip_values  = ["10.200.3.3", "10.200.3.4", "10.200.3.5", "10.200.3.6", "10.200.3.7"]
    
    additional_dynamic_nics = [
      {
        name            = "additional-nic-1"
        subnet_name     = "vcf-mgmt-sample-additional-subnet-1"
        vlan_id         = 210
        ip_address_type = "reserved_custom"
        ip_values       = ["10.200.4.3", "10.200.4.4", "10.200.4.5", "10.200.4.6", "10.200.4.7"]
      }
    ]
    
    availability_domains = [1, 2, 3, 4, 5]
    
  2. Terraform 実行プランを生成して適用する。

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. 新しいノードをネットワーク エンドポイント グループ(NEG)に接続する: neg_attachment_commands Terraform 出力から生成された gcloud compute network-endpoint-groups update コマンドを取得して実行し、新しいインスタンスを管理 NEG と NSX NEG に接続します。

    # View attachment commands from Terraform outputs
    terraform output neg_attachment_commands
    # Run the generated commands to attach the new instance to the Management and NSX NEGs
    gcloud compute network-endpoint-groups update vcf-mgmt-sample-neg \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --add-endpoint='instance=vcf-mgmt-sample-node-5'
    gcloud compute network-endpoint-groups update vcf-mgmt-sample-nsx-neg \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --add-endpoint='instance=vcf-mgmt-sample-node-5'
    

    コマンドを実行する前に、次のように置き換えます。

    • ZONE: クラスタが存在する Google Cloud ゾーン。
    • PROJECT_ID: ターゲット Google Cloud プロジェクトの ID。

想定された挙動

node_addition 構成を適用すると、Terraform は次の非破壊オペレーションを実行します。

  • 新しいベアメタル ESXi インスタンス(vcf-mgmt-sample-node-5)のみをプロビジョニングし、関連付けられた内部 IPv4 アドレスを予約します。
  • neg_attachment_commands 出力を生成して、新しいインスタンスを既存の管理 NEG と NSX ゾーン NEG にアタッチできるようにします。
  • 新しいノードの Cloud DNS レコードを転送(A)および逆引き(PTR)登録します。
  • 既存の実行中のノード、ロードバランサ、ネットワーク構成をすべて中断せずにそのままにします。

次のステップ

クラスタ容量を拡張したら、次の手順を行います。

  1. ツールキットを使用してノードを準備し、VCF をデプロイするの説明に従って、ツールキット スクリプト(python3 -m vcf_deployer.main --config config.json)を実行し、各新しいホストの初期 ESXi root パスワードをリセットして、クラスタ追加用に新しい ESXi ノードを初期化します。config.json ファイルの vcf_deployment_config オブジェクトを省略します。
  2. VMware UI または API を使用して、準備したノードをコミッションし、VMware Cloud Foundation(VCF)9.x クラスタに追加します。

クラスタ容量を削減する

既存のクラスタを X ノードから X - N ノードに減らすには、クラスタの初期デプロイ時に使用した Terraform ワークスペースと状態ファイル(terraform.tfstate)を使用します。

次の手順では、クラスタ容量を拡張するで説明されている 5 ノードの管理クラスタから 3 番目のノード(vcf-mgmt-sample-node-3)を削除する方法を示します。

  1. VCF クラスタからノードを削除する: VMware SDDC Manager を使用して、VCF 9.x クラスタからターゲット ESXi ホストを削除し、廃止します。詳細については、VMware Cloud Foundation のドキュメントの「Decommission hosts」をご覧ください。

  2. 該当する場合は、ノードの削除からの保護を無効にする: Terraform は、削除からの保護が有効になっているインスタンスを削除できません。削除するノードで削除からの保護が有効になっていない場合は、この手順をスキップします。それ以外の場合は、削除する各ノードで削除からの保護を無効にします。

    gcloud compute instances update vcf-mgmt-sample-node-3 \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --no-deletion-protection
    

    コマンドを実行する前に、次のように置き換えます。

    • ZONE: クラスタが存在する Google Cloud ゾーン。
    • PROJECT_ID: ターゲット Google Cloud プロジェクトの ID。

    代わりに Google Cloud コンソールを使用して削除からの保護を無効にするには、ノードのデコミッションと削除をご覧ください。

  3. 変数定義ファイル(management_cluster.tfvars)を更新する: management_cluster.tfvars ファイルの構成変数を次のように更新します。

    • deployment_mode 変数に "node_deletion" を設定します。
    • number_of_nodes 変数を 5 から 4 に更新します。
    • 残りのノードの名前を含む node_names リストを指定し、リストから "vcf-mgmt-sample-node-3" を削除します。
    • クラスタの作成時にこれらの変数を明示的に指定した場合は、削除されたノードの IPv4 アドレスを mgmt_nic_ip_values、vsan_ip_values、vmotion_ip_values、nsx_tep_ip_values、additional_dynamic_nics のリストから削除します。
    • 残りの各ノードのアベイラビリティ ドメイン(例: [1, 2, 4, 5])を含む availability_domains リストを指定します。

    node_deletion モードでは、クラスタの作成時やクラスタに対する以前の Terraform オペレーションで指定しなかった場合でも(たとえば、ノード名が自動生成された場合など)、node_names リストと availability_domains リストを常に明示的に指定する必要があります。これらのリストを指定すると、Terraform は目的のノードのみを削除します。各エントリが、対応する残りのノードの名前とアベイラビリティ ドメインと一致していることを確認します。

    deployment_mode = "node_deletion"
    number_of_nodes = 4
    
    # Always required in node_deletion mode
    node_names = [
      "vcf-mgmt-sample-node-1",
      "vcf-mgmt-sample-node-2",
      # "vcf-mgmt-sample-node-3" removed
      "vcf-mgmt-sample-node-4",
      "vcf-mgmt-sample-node-5"
    ]
    
    mgmt_nic_ip_values = ["10.200.0.3", "10.200.0.4", "10.200.0.6", "10.200.0.7"]
    vsan_ip_values     = ["10.200.1.3", "10.200.1.4", "10.200.1.6", "10.200.1.7"]
    vmotion_ip_values  = ["10.200.2.3", "10.200.2.4", "10.200.2.6", "10.200.2.7"]
    nsx_tep_ip_values  = ["10.200.3.3", "10.200.3.4", "10.200.3.6", "10.200.3.7"]
    
    additional_dynamic_nics = [
      {
        name            = "additional-nic-1"
        subnet_name     = "vcf-mgmt-sample-additional-subnet-1"
        vlan_id         = 210
        ip_address_type = "reserved_custom"
        ip_values       = ["10.200.4.3", "10.200.4.4", "10.200.4.6", "10.200.4.7"]
      }
    ]
    
    # Always required in node_deletion mode
    availability_domains = [1, 2, 4, 5]
    
  4. Terraform 実行プランを生成して適用する: プランの出力を確認して、Terraform が削除するノードのリソースのみを破棄することを確認し、プランを適用します。

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    

想定された挙動

node_deletion 構成を適用すると、Terraform は次のオペレーションを実行します。

  • ターゲットのベアメタル ESXi インスタンス(vcf-mgmt-sample-node-3)とそのブートディスクのみを削除します。
  • 削除されたインスタンスを管理 NEG と NSX ゾーン NEG から削除します。
  • 削除されたノードの予約済み内部 IPv4 アドレスを解放します。
  • 削除されたノードの正引き(A)と逆引き(PTR)の Cloud DNS レコードを削除します。
  • 残りのすべてのノード、ロードバランサ、ネットワーク構成は中断されません。