Gérer la capacité des nœuds à l'aide de Terraform

Cette page explique comment augmenter ou réduire la capacité d'un cluster dans la solution VMware sur Google Cloud en ajoutant des nœuds ESXi bare metal à un cluster existant ou en les supprimant de celui-ci, à l'aide des modules d'automatisation Terraform de bout en bout (E2E).

Augmenter la capacité du cluster

Pour étendre un cluster existant de X nœuds à X + N nœuds, utilisez le même espace de travail et le même fichier d'état Terraform (terraform.tfstate) que ceux utilisés lors du déploiement initial du cluster.

La procédure suivante montre comment ajouter un cinquième nœud (vcf-mgmt-sample-node-5) à un cluster d'administrateur à quatre nœuds (en fonction de l'exemple de configuration du fichier e2e-terraform/sample_management_cluster.tfvars) :

  1. Mettez à jour votre fichier de définitions de variables (management_cluster.tfvars) : Mettez à jour les variables de configuration dans votre fichier management_cluster.tfvars comme suit :

    • Définissez la variable deployment_mode sur "node_addition".
    • Remplacez la variable number_of_nodes (4) par 5.
    • Ajoutez "vcf-mgmt-sample-node-5" à la liste node_names si vous avez explicitement spécifié node_names lors de la création du cluster. Laissez la liste node_names vide si vous ne l'avez pas spécifiée initialement.
    • Ajoutez de nouvelles adresses IPv4 aux listes mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values et additional_dynamic_nics si vous avez explicitement spécifié ces variables lors de la création du cluster. Si vous avez laissé ces listes vides pour l'allocation automatique, ne les mettez pas à jour.
    • Mettez à jour la liste availability_domains (par exemple, [1, 2, 3, 4, 5]) si vous avez explicitement spécifié cette variable lors de la création du cluster. Si vous l'avez laissé vide, ne le modifiez pas.
    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. Générez et appliquez le plan d'exécution Terraform :

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. Associez les nouveaux nœuds aux groupes de points de terminaison du réseau (NEG) : récupérez et exécutez les commandes gcloud compute network-endpoint-groups update générées à partir du résultat Terraform neg_attachment_commands pour associer les nouvelles instances aux NEG de gestion et 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'
    

    Avant d'exécuter les commandes, remplacez les éléments suivants :

    • ZONE : zone Google Cloud dans laquelle se trouve le cluster.
    • PROJECT_ID : ID de votre projet Google Cloud cible.

Comportement attendu

Lorsque vous appliquez la configuration node_addition, Terraform effectue les opérations non perturbatrices suivantes :

  • Provisionne uniquement la nouvelle instance ESXi Bare Metal (vcf-mgmt-sample-node-5) et réserve les adresses IPv4 internes associées.
  • Génère la sortie neg_attachment_commands afin que vous puissiez associer les nouvelles instances aux NEG zonaux de gestion et NSX existants.
  • Enregistre les enregistrements Cloud DNS de transfert (A) et de transfert inverse (PTR) pour le nouveau nœud.
  • Laisse tous les nœuds, équilibreurs de charge et configurations réseau existants en cours d'exécution sans interruption.

Étapes suivantes

Après avoir augmenté la capacité du cluster, procédez comme suit :

  1. Exécutez le script du kit d'outils (python3 -m vcf_deployer.main --config config.json) comme décrit dans Préparer les nœuds et déployer VCF à l'aide du kit d'outils pour réinitialiser le mot de passe ESXi root initial sur chaque nouvel hôte et initialiser les nouveaux nœuds ESXi pour l'ajout de cluster. Omettez l'objet vcf_deployment_config dans le fichier config.json.
  2. Mettez en service et ajoutez le nœud préparé à votre cluster VMware Cloud Foundation (VCF) 9.x à l'aide de l'UI ou des API VMware.

Réduire la capacité du cluster

Pour réduire un cluster existant de X nœuds à X - N nœuds, utilisez le même espace de travail Terraform et le même fichier d'état (terraform.tfstate) que ceux utilisés lors du déploiement initial du cluster.

Les étapes suivantes montrent comment supprimer le troisième nœud (vcf-mgmt-sample-node-3) du cluster de gestion à cinq nœuds décrit dans Augmenter la capacité du cluster :

  1. Supprimer le nœud du cluster VCF : supprimez l'hôte ESXi cible de votre cluster VCF 9.x et mettez-le hors service à l'aide de VMware SDDC Manager. Pour en savoir plus, consultez Mettre hors service des hôtes dans la documentation VMware Cloud Foundation.

  2. Le cas échéant, désactivez la protection contre la suppression sur le nœud : Terraform ne peut pas supprimer une instance pour laquelle la protection contre la suppression est activée. Si la protection contre la suppression n'est pas activée sur les nœuds que vous souhaitez supprimer, ignorez cette étape. Sinon, désactivez la protection contre la suppression sur chaque nœud que vous souhaitez supprimer :

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

    Avant d'exécuter la commande, remplacez les éléments suivants :

    • ZONE : zone Google Cloud dans laquelle se trouve le cluster.
    • PROJECT_ID : ID de votre projet Google Cloud cible.

    Pour désactiver la protection contre la suppression à l'aide de la console Google Cloud , consultez Mettre hors service et supprimer des nœuds.

  3. Mettez à jour votre fichier de définitions de variables (management_cluster.tfvars) : Mettez à jour les variables de configuration dans votre fichier management_cluster.tfvars comme suit :

    • Définissez la variable deployment_mode sur "node_deletion".
    • Remplacez la variable number_of_nodes (5) par 4.
    • Spécifiez la liste node_names avec les noms des nœuds restants, puis supprimez "vcf-mgmt-sample-node-3" de la liste.
    • Supprimez les adresses IPv4 du nœud supprimé des listes mgmt_nic_ip_values, vsan_ip_values, vmotion_ip_values, nsx_tep_ip_values et additional_dynamic_nics si vous avez explicitement spécifié ces variables lors de la création du cluster.
    • Spécifiez la liste availability_domains avec le domaine de disponibilité de chaque nœud restant (par exemple, [1, 2, 4, 5]).

    En mode node_deletion, vous devez toujours spécifier explicitement les listes node_names et availability_domains, même si vous ne les avez pas spécifiées lors de la création du cluster ou de toute opération Terraform antérieure sur le cluster (par exemple, si les noms de nœuds ont été générés automatiquement). La spécification de ces listes garantit que Terraform ne supprime que le nœud prévu. Assurez-vous que chaque entrée correspond au nom et au domaine de disponibilité du nœud restant correspondant.

    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. Générez et appliquez le plan d'exécution Terraform : examinez le résultat du plan pour vérifier que Terraform ne détruit que les ressources du nœud que vous souhaitez supprimer, puis appliquez le plan :

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

Comportement attendu

Lorsque vous appliquez la configuration node_deletion, Terraform effectue les opérations suivantes :

  • Supprime uniquement l'instance ESXi bare metal ciblée (vcf-mgmt-sample-node-3) et son disque de démarrage.
  • Supprime l'instance supprimée des NEG zonaux de gestion et NSX.
  • Libère les adresses IPv4 internes réservées du nœud supprimé.
  • Supprime les enregistrements Cloud DNS de transfert (A) et inversés (PTR) du nœud supprimé.
  • Laisse tous les nœuds, équilibreurs de charge et configurations réseau restants sans interruption.