使用 Terraform 管理节点容量

本页面介绍了如何使用端到端 (E2E) Terraform 自动化模块向现有集群添加裸金属 ESXi 节点或从中删除裸金属 ESXi 节点,从而在 VMware solution on Google Cloud 中扩展或缩减集群容量。

扩展集群容量

如需将现有集群从 X 个节点扩展到 X + N 个节点,请使用在集群初始部署期间使用的同一 Terraform 工作区和状态文件 (terraform.tfstate)。

以下步骤展示了如何向四节点管理集群(基于 e2e-terraform/sample_management_cluster.tfvars 文件中的示例配置)添加第五个节点 (vcf-mgmt-sample-node-5):

  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 命令,以将新实例附加到管理和 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 输出,以便您可以将新实例挂接到现有的管理和 NSX 可用区级 NEG。
  • 为新节点注册正向 (A) 和反向 (PTR) Cloud DNS 记录。
  • 使所有现有运行节点、负载均衡器和网络配置保持不中断。

后续步骤

扩容集群后,请完成以下步骤:

  1. 按照使用工具包准备节点并部署 VCF 中的说明运行工具包脚本 (python3 -m vcf_deployer.main --config config.json),以重置每个新主机上的初始 ESXi root 密码,并初始化新 ESXi 节点以添加集群。省略 config.json 文件中的 vcf_deployment_config 对象。
  2. 使用 VMware 界面或 API 调试准备好的节点并将其添加到 VMware Cloud Foundation (VCF) 9.x 集群。

缩减集群容量

如需将现有集群从 X 个节点缩减到 X - N 个节点,请使用在集群初始部署期间使用的同一 Terraform 工作区和状态文件 (terraform.tfstate)。

以下步骤展示了如何从扩容集群中所述的五节点管理集群中删除第三个节点 (vcf-mgmt-sample-node-3):

  1. 从 VCF 集群中移除节点:从 VCF 9.x 集群中移除目标 ESXi 主机,并使用 VMware SDDC Manager 将其退役。如需了解详情,请参阅 VMware Cloud Foundation 文档中的停用主机。

  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"。
    • 如果您在创建集群期间明确指定了这些变量,请从 mgmt_nic_ip_values、vsan_ip_values、vmotion_ip_values、nsx_tep_ip_values 和 additional_dynamic_nics 列表中移除已删除节点的 IPv4 地址。
    • 使用每个剩余节点的可用性网域指定 availability_domains 列表(例如 [1, 2, 4, 5])。

    在 node_deletion 模式下,您必须始终明确指定 node_names 和 availability_domains 列表,即使您在创建集群或对集群执行任何早期 Terraform 操作期间未指定这些列表(例如,如果节点名称是自动生成的)。指定这些列表可确保 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) 及其启动磁盘。
  • 从管理和 NSX 可用区级 NEG 中移除已删除的实例。
  • 释放已删除节点的预留内部 IPv4 地址。
  • 删除已删除节点的正向 (A) 和反向 (PTR) Cloud DNS 记录。
  • 使所有剩余节点、负载均衡器和网络配置保持不中断。