Administra la capacidad de los nodos con Terraform

En esta página, se describe cómo expandir o reducir la capacidad del clúster en la solución de VMware en Google Cloud agregando nodos de ESXi de Bare Metal o borrando nodos de ESXi de Bare Metal de un clúster existente con los módulos de automatización de Terraform de extremo a extremo (E2E).

Expandir la capacidad del clúster

Para expandir un clúster existente de X nodos a X + N nodos, usa el mismo espacio de trabajo de Terraform y el archivo de estado (terraform.tfstate) que usaste durante la implementación inicial del clúster.

En los siguientes pasos, se muestra cómo agregar un quinto nodo (vcf-mgmt-sample-node-5) a un clúster de administración de cuatro nodos (según la configuración de muestra en el archivo e2e-terraform/sample_management_cluster.tfvars):

  1. Actualiza tu archivo de definiciones de variables (management_cluster.tfvars): Actualiza las variables de configuración en tu archivo management_cluster.tfvars de la siguiente manera:

    • Establece la variable deployment_mode como "node_addition".
    • Actualiza la variable number_of_nodes de 4 a 5.
    • Agrega "vcf-mgmt-sample-node-5" a la lista node_names si especificaste node_names de forma explícita durante la creación del clúster. Deja vacía la lista node_names si no la especificaste inicialmente.
    • Agrega direcciones IPv4 nuevas a las listas mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values y additional_dynamic_nics si especificaste estas variables de forma explícita durante la creación del clúster. Si dejaste estas listas vacías para la asignación automática, no las actualices.
    • Actualiza la lista availability_domains (por ejemplo, [1, 2, 3, 4, 5]) si especificaste de forma explícita esta variable durante la creación del clúster. Si lo dejaste vacío, no lo actualices.
    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. Genera y aplica el plan de ejecución de Terraform:

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. Conecta los nodos nuevos a los grupos de extremos de red (NEG): Recupera y ejecuta los comandos gcloud compute network-endpoint-groups update generados desde el resultado de Terraform neg_attachment_commands para conectar las instancias nuevas a los NEG de administración y NSX:

    # 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'
    

    Antes de ejecutar los comandos, reemplaza lo siguiente:

    • ZONE: Es la zona de Google Cloud en la que reside el clúster.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud de destino.

Comportamiento esperado

Cuando aplicas la configuración de node_addition, Terraform realiza las siguientes operaciones no disruptivas:

  • Aprovisiona solo la nueva instancia de ESXi de equipos físicos (vcf-mgmt-sample-node-5) y reserva sus direcciones IPv4 internas asociadas.
  • Genera el resultado neg_attachment_commands para que puedas adjuntar las instancias nuevas a los NEG zonales de administración y NSX existentes.
  • Registra los registros DNS de Cloud DNS de reenvío (A) y reversos (PTR) para el nodo nuevo.
  • Deja sin interrupciones todos los nodos en ejecución, los balanceadores de cargas y las configuraciones de red existentes.

¿Qué sigue?

Después de expandir la capacidad del clúster, completa los siguientes pasos:

  1. Ejecuta la secuencia de comandos del kit de herramientas (python3 -m vcf_deployer.main --config config.json) como se describe en Prepara los nodos y, luego, implementa VCF con el kit de herramientas para restablecer la contraseña inicial de ESXi root en cada host nuevo y, luego, inicializa los nodos de ESXi nuevos para agregar el clúster. Omite el objeto vcf_deployment_config en el archivo config.json.
  2. Pon en marcha y agrega el nodo preparado a tu clúster de VMware Cloud Foundation (VCF) 9.x con la IU o las APIs de VMware.

Reduce la capacidad del clúster

Para reducir un clúster existente de X nodos a X - N nodos, usa el mismo espacio de trabajo y archivo de estado de Terraform (terraform.tfstate) que usaste durante la implementación inicial del clúster.

En los siguientes pasos, se muestra cómo borrar el tercer nodo (vcf-mgmt-sample-node-3) del clúster de administración de cinco nodos que se describe en Expande la capacidad del clúster:

  1. Quita el nodo del clúster de VCF: Quita el host ESXi de destino de tu clúster de VCF 9.x y retíralo con VMware SDDC Manager. Para obtener más información, consulta Retira hosts de la documentación de VMware Cloud Foundation.

  2. Si corresponde, inhabilita la protección contra eliminaciones en el nodo: Terraform no puede borrar una instancia que tenga habilitada la protección contra eliminaciones. Si la protección contra eliminaciones no está habilitada en los nodos que quieres borrar, omite este paso. De lo contrario, inhabilita la protección contra la eliminación en cada nodo que desees borrar:

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

    Antes de ejecutar el comando, reemplaza lo siguiente:

    • ZONE: Es la zona de Google Cloud en la que reside el clúster.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud de destino.

    Para inhabilitar la protección contra eliminaciones con la consola de Google Cloud , consulta Retira y borra nodos.

  3. Actualiza tu archivo de definiciones de variables (management_cluster.tfvars): Actualiza las variables de configuración en tu archivo management_cluster.tfvars de la siguiente manera:

    • Establece la variable deployment_mode como "node_deletion".
    • Actualiza la variable number_of_nodes de 5 a 4.
    • Especifica la lista node_names con los nombres de los nodos restantes y quita "vcf-mgmt-sample-node-3" de la lista.
    • Quita las direcciones IPv4 del nodo borrado de las listas mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values y additional_dynamic_nics si especificaste estas variables de forma explícita durante la creación del clúster.
    • Especifica la lista availability_domains con el dominio de disponibilidad de cada nodo restante (por ejemplo, [1, 2, 4, 5]).

    En el modo node_deletion, siempre debes especificar de forma explícita las listas node_names y availability_domains, incluso si no las especificaste durante la creación del clúster o cualquier operación anterior de Terraform en el clúster (por ejemplo, si los nombres de los nodos se generaron de forma automática). Especificar estas listas garantiza que Terraform borre solo el nodo previsto. Asegúrate de que cada entrada coincida con el nombre y el dominio de disponibilidad del nodo restante correspondiente.

    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. Genera y aplica el plan de ejecución de Terraform: Revisa el resultado del plan para verificar que Terraform destruya solo los recursos del nodo que deseas borrar y, luego, aplica el plan:

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

Comportamiento esperado

Cuando aplicas la configuración de node_deletion, Terraform realiza las siguientes operaciones:

  • Borra solo la instancia de ESXi de Bare Metal de destino (vcf-mgmt-sample-node-3) y su disco de arranque.
  • Quita la instancia borrada de los NEG zonales de administración y NSX.
  • Libera las direcciones IPv4 internas reservadas del nodo borrado.
  • Borra los registros de Cloud DNS de reenvío (A) y reversos (PTR) del nodo borrado.
  • Deja todos los nodos, balanceadores de cargas y parámetros de configuración de red restantes sin interrupciones.