Gerenciar a capacidade do nó usando o Terraform

Nesta página, descrevemos como expandir ou reduzir a capacidade do cluster na solução VMware no Google Cloud adicionando ou excluindo nós ESXi bare metal de um cluster atual usando os módulos de automação do Terraform de ponta a ponta (E2E).

Ampliar a capacidade do cluster

Para expandir um cluster de X nós para X + N nós, use o mesmo espaço de trabalho do Terraform e o arquivo de estado (terraform.tfstate) que você usou durante a implantação inicial do cluster.

As etapas a seguir mostram como adicionar um quinto nó (vcf-mgmt-sample-node-5) a um cluster de gerenciamento de quatro nós (com base na configuração de amostra no arquivo e2e-terraform/sample_management_cluster.tfvars):

  1. Atualize o arquivo de definições de variáveis (management_cluster.tfvars): atualize as variáveis de configuração no arquivo management_cluster.tfvars da seguinte maneira:

    • Defina a variável deployment_mode como "node_addition".
    • Atualize a variável number_of_nodes de 4 para 5.
    • Anexe "vcf-mgmt-sample-node-5" à lista node_names se você especificou explicitamente node_names durante a criação do cluster. Deixe a lista node_names vazia se você não a especificou inicialmente.
    • Anexe novos endereços IPv4 às listas mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values e additional_dynamic_nics se você tiver especificado explicitamente essas variáveis durante a criação do cluster. Se você deixou essas listas vazias para alocação automática, não as atualize.
    • Atualize a lista availability_domains (por exemplo, [1, 2, 3, 4, 5]) se você especificou explicitamente essa variável durante a criação do cluster. Se você o deixou em branco, não o atualize.
    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. Gere e aplique o plano de execução do Terraform:

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. Anexe os novos nós aos grupos de endpoints de rede (NEGs): recupere e execute os comandos gcloud compute network-endpoint-groups update gerados da saída do Terraform neg_attachment_commands para anexar as novas instâncias ao gerenciamento e aos NEGs do 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 executar os comandos, substitua o seguinte:

    • ZONE: a Google Cloud zona em que o cluster está localizado.
    • PROJECT_ID: o ID do projeto de destino do Google Cloud .

Comportamento esperado

Quando você aplica a configuração node_addition, o Terraform executa as seguintes operações sem interrupções:

  • Provisiona apenas a nova instância de ESXi bare metal (vcf-mgmt-sample-node-5) e reserva os endereços IPv4 internos associados.
  • Gera a saída neg_attachment_commands para que você possa anexar as novas instâncias aos NEGs zonais de gerenciamento e NSX atuais.
  • Registra registros DNS de encaminhamento (A) e reverso (PTR) do Cloud DNS para o novo nó.
  • Deixa todos os nós em execução, balanceadores de carga e configurações de rede sem interrupções.

A seguir

Depois de expandir a capacidade do cluster, siga estas etapas:

  1. Execute o script do kit de ferramentas (python3 -m vcf_deployer.main --config config.json), conforme descrito em Preparar nós e implantar o VCF usando o kit de ferramentas para redefinir a senha inicial do ESXi root em cada novo host e inicializar os novos nós do ESXi para adição de cluster. Omita o objeto vcf_deployment_config no arquivo config.json.
  2. Comissione e adicione o nó preparado ao cluster do VMware Cloud Foundation (VCF) 9.x usando a interface ou as APIs da VMware.

Reduzir a capacidade do cluster

Para reduzir um cluster de X nós para X - N nós, use o mesmo espaço de trabalho do Terraform e o mesmo arquivo de estado (terraform.tfstate) que você usou durante a implantação inicial do cluster.

As etapas a seguir mostram como excluir o terceiro nó (vcf-mgmt-sample-node-3) do cluster de gerenciamento de cinco nós descrito em Expandir a capacidade do cluster:

  1. Remova o nó do cluster do VCF: remova o host ESXi de destino do cluster do VCF 9.x e desative-o usando o VMware SDDC Manager. Para mais informações, consulte Desativar hosts na documentação do VMware Cloud Foundation.

  2. Se aplicável, desative a proteção contra exclusão no nó: o Terraform não pode excluir uma instância que tenha a proteção contra exclusão ativada. Se a proteção contra exclusão não estiver ativada nos nós que você quer excluir, pule esta etapa. Caso contrário, desative a proteção contra exclusão em cada nó que você quer excluir:

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

    Antes de executar o comando, substitua o seguinte:

    • ZONE: a Google Cloud zona em que o cluster está localizado.
    • PROJECT_ID: o ID do projeto de destino do Google Cloud .

    Para desativar a proteção contra exclusão usando o console do Google Cloud , consulte Desativar e excluir nós.

  3. Atualize o arquivo de definições de variáveis (management_cluster.tfvars): atualize as variáveis de configuração no arquivo management_cluster.tfvars da seguinte maneira:

    • Defina a variável deployment_mode como "node_deletion".
    • Atualize a variável number_of_nodes de 5 para 4.
    • Especifique a lista node_names com os nomes dos nós restantes e remova "vcf-mgmt-sample-node-3" da lista.
    • Remova os endereços IPv4 do nó excluído das listas mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values e additional_dynamic_nics se você especificou explicitamente essas variáveis durante a criação do cluster.
    • Especifique a lista availability_domains com o domínio de disponibilidade de cada nó restante (por exemplo, [1, 2, 4, 5]).

    No modo node_deletion, é preciso sempre especificar explicitamente as listas node_names e availability_domains, mesmo que você não as tenha especificado durante a criação do cluster ou qualquer operação anterior do Terraform no cluster (por exemplo, se os nomes dos nós foram gerados automaticamente). Especificar essas listas garante que o Terraform exclua apenas o nó pretendido. Verifique se cada entrada corresponde ao nome e ao domínio de disponibilidade do nó restante correspondente.

    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. Gere e aplique o plano de execução do Terraform: revise a saída do plano para verificar se o Terraform destrói apenas os recursos do nó que você quer excluir e, em seguida, aplique o plano:

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

Comportamento esperado

Quando você aplica a configuração node_deletion, o Terraform executa as seguintes operações:

  • Exclui apenas a instância bare metal do ESXi de destino (vcf-mgmt-sample-node-3) e o disco de inicialização dela.
  • Remove a instância excluída dos NEGs zonais de gerenciamento e do NSX.
  • Libera os endereços IPv4 internos reservados do nó excluído.
  • Exclui os registros DNS de encaminhamento (A) e reversos (PTR) do Cloud DNS do nó excluído.
  • Deixa todos os nós, balanceadores de carga e configurações de rede restantes sem interrupção.