Gestisci la capacità dei nodi utilizzando Terraform

Questa pagina descrive come espandere o ridurre la capacità del cluster nella soluzione VMware su Google Cloud aggiungendo o eliminando nodi ESXi bare metal da un cluster esistente utilizzando i moduli di automazione Terraform end-to-end (E2E).

Espandi la capacità del cluster

Per espandere un cluster esistente da X nodi a X + N nodi, utilizza lo stesso workspace e lo stesso file di stato (terraform.tfstate) di Terraform che hai utilizzato durante il deployment iniziale del cluster.

I passaggi seguenti mostrano come aggiungere un quinto nodo (vcf-mgmt-sample-node-5) a un cluster di gestione a quattro nodi (in base alla configurazione di esempio nel file e2e-terraform/sample_management_cluster.tfvars):

  1. Aggiorna il file delle definizioni delle variabili (management_cluster.tfvars): aggiorna le variabili di configurazione nel file management_cluster.tfvars come segue:

    • Imposta la variabile deployment_mode su "node_addition".
    • Aggiorna la variabile number_of_nodes da 4 a 5.
    • Aggiungi "vcf-mgmt-sample-node-5" all'elenco node_names se hai specificato esplicitamente node_names durante la creazione del cluster. Lascia vuoto l'elenco node_names se non l'hai specificato inizialmente.
    • Aggiungi i nuovi indirizzi IPv4 agli elenchi mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values e additional_dynamic_nics se hai specificato esplicitamente queste variabili durante la creazione del cluster. Se hai lasciato vuoti questi elenchi per l'allocazione automatica, non aggiornarli.
    • Aggiorna l'elenco availability_domains (ad esempio [1, 2, 3, 4, 5]) se hai specificato esplicitamente questa variabile durante la creazione del cluster. Se lo hai lasciato vuoto, non aggiornarlo.
    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 e applica il piano di esecuzione di Terraform:

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. Collega i nuovi nodi ai gruppi di endpoint di rete (NEG): recupera ed esegui i comandi gcloud compute network-endpoint-groups update generati dall'output Terraform neg_attachment_commands per collegare le nuove istanze ai NEG di gestione e 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'
    

    Prima di eseguire i comandi, sostituisci quanto segue:

    • ZONE: la zona Google Cloud in cui si trova il cluster.
    • PROJECT_ID: l'ID del progetto Google Cloud target.

Comportamento previsto

Quando applichi la configurazione node_addition, Terraform esegue le seguenti operazioni non invasive:

  • Esegue il provisioning solo della nuova istanza ESXi bare metal (vcf-mgmt-sample-node-5) e prenota gli indirizzi IPv4 interni associati.
  • Genera l'output neg_attachment_commands in modo da poter collegare le nuove istanze ai NEG di gestione e NSX a livello di zona esistenti.
  • Registra i record Cloud DNS di inoltro (A) e inversi (PTR) per il nuovo nodo.
  • Lascia inalterati tutti i nodi, i bilanciatori del carico e le configurazioni di rete in esecuzione esistenti.

Passaggi successivi

Dopo aver espanso la capacità del cluster, completa i seguenti passaggi:

  1. Esegui lo script del toolkit (python3 -m vcf_deployer.main --config config.json) come descritto in Prepara i nodi ed esegui il deployment di VCF utilizzando il toolkit per reimpostare la password iniziale di ESXi root su ogni nuovo host e inizializzare i nuovi nodi ESXi per l'aggiunta al cluster. Ometti l'oggetto vcf_deployment_config nel file config.json.
  2. Esegui il provisioning e aggiungi il nodo preparato al tuo cluster VMware Cloud Foundation (VCF) 9.x utilizzando l'interfaccia utente o le API di VMware.

Riduci la capacità del cluster

Per ridurre un cluster esistente da X nodi a X - N nodi, utilizza lo stesso workspace e lo stesso file di stato (terraform.tfstate) di Terraform che hai utilizzato durante il deployment iniziale del cluster.

I passaggi seguenti mostrano come eliminare il terzo nodo (vcf-mgmt-sample-node-3) dal cluster di gestione a cinque nodi descritto in Espandi la capacità del cluster:

  1. Rimuovi il nodo dal cluster VCF: rimuovi l'host ESXi di destinazione dal cluster VCF 9.x e dismettilo utilizzando VMware SDDC Manager. Per saperne di più, consulta la documentazione relativa alla dismissione degli host in VMware Cloud Foundation.

  2. Se applicabile, disattiva la protezione da eliminazione sul nodo: Terraform non può eliminare un'istanza con la protezione da eliminazione abilitata. Se la protezione da eliminazione non è abilitata sui nodi che vuoi eliminare, salta questo passaggio. In caso contrario, disattiva la protezione da eliminazione su ogni nodo che vuoi eliminare:

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

    Prima di eseguire il comando, sostituisci quanto segue:

    • ZONE: la zona Google Cloud in cui si trova il cluster.
    • PROJECT_ID: l'ID del progetto Google Cloud target.

    Per disattivare la protezione da eliminazione utilizzando la console Google Cloud , consulta Disattiva ed elimina i nodi.

  3. Aggiorna il file delle definizioni delle variabili (management_cluster.tfvars): aggiorna le variabili di configurazione nel file management_cluster.tfvars come segue:

    • Imposta la variabile deployment_mode su "node_deletion".
    • Aggiorna la variabile number_of_nodes da 5 a 4.
    • Specifica l'elenco node_names con i nomi dei nodi rimanenti e rimuovi "vcf-mgmt-sample-node-3" dall'elenco.
    • Rimuovi gli indirizzi IPv4 del nodo eliminato dagli elenchi mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values e additional_dynamic_nics se hai specificato esplicitamente queste variabili durante la creazione del cluster.
    • Specifica l'elenco availability_domains con il dominio di disponibilità di ogni nodo rimanente (ad esempio, [1, 2, 4, 5]).

    In modalità node_deletion, devi sempre specificare esplicitamente gli elenchi node_names e availability_domains, anche se non li hai specificati durante la creazione del cluster o qualsiasi operazione Terraform precedente sul cluster (ad esempio, se i nomi dei nodi sono stati generati automaticamente). La specifica di questi elenchi garantisce che Terraform elimini solo il nodo previsto. Assicurati che ogni voce corrisponda al nome e al dominio di disponibilità del nodo rimanente corrispondente.

    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 e applica il piano di esecuzione di Terraform: esamina l'output del piano per verificare che Terraform elimini solo le risorse del nodo che vuoi eliminare, quindi applica il piano:

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

Comportamento previsto

Quando applichi la configurazione node_deletion, Terraform esegue le seguenti operazioni:

  • Elimina solo l'istanza ESXi bare metal di destinazione (vcf-mgmt-sample-node-3) e il relativo disco di avvio.
  • Rimuove l'istanza eliminata dai NEG di gestione e NSX a livello di zona.
  • Rilascia gli indirizzi IPv4 interni prenotati del nodo eliminato.
  • Elimina i record Cloud DNS di inoltro (A) e inversi (PTR) del nodo eliminato.
  • Lascia inalterati tutti i nodi, i bilanciatori del carico e le configurazioni di rete rimanenti.