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 ファイルのサンプル構成に基づきます)。
変数定義ファイル(
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]Terraform 実行プランを生成して適用する。
terraform plan -var-file='management_cluster.tfvars' -out=tfplan terraform apply tfplan新しいノードをネットワーク エンドポイント グループ(NEG)に接続する:
neg_attachment_commandsTerraform 出力から生成された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)登録します。 - 既存の実行中のノード、ロードバランサ、ネットワーク構成をすべて中断せずにそのままにします。
次のステップ
クラスタ容量を拡張したら、次の手順を行います。
- ツールキットを使用してノードを準備し、VCF をデプロイするの説明に従って、ツールキット スクリプト(
python3 -m vcf_deployer.main --config config.json)を実行し、各新しいホストの初期 ESXirootパスワードをリセットして、クラスタ追加用に新しい ESXi ノードを初期化します。config.jsonファイルのvcf_deployment_configオブジェクトを省略します。 - VMware UI または API を使用して、準備したノードをコミッションし、VMware Cloud Foundation(VCF)9.x クラスタに追加します。
クラスタ容量を削減する
既存のクラスタを X ノードから X - N ノードに減らすには、クラスタの初期デプロイ時に使用した Terraform ワークスペースと状態ファイル(terraform.tfstate)を使用します。
次の手順では、クラスタ容量を拡張するで説明されている 5 ノードの管理クラスタから 3 番目のノード(vcf-mgmt-sample-node-3)を削除する方法を示します。
VCF クラスタからノードを削除する: VMware SDDC Manager を使用して、VCF 9.x クラスタからターゲット ESXi ホストを削除し、廃止します。詳細については、VMware Cloud Foundation のドキュメントの「Decommission hosts」をご覧ください。
該当する場合は、ノードの削除からの保護を無効にする: 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 コンソールを使用して削除からの保護を無効にするには、ノードのデコミッションと削除をご覧ください。
変数定義ファイル(
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]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 レコードを削除します。 - 残りのすべてのノード、ロードバランサ、ネットワーク構成は中断されません。