Terraform을 사용하여 노드 용량 관리

이 페이지에서는 엔드 투 엔드 (E2E) Terraform 자동화 모듈을 사용하여 기존 클러스터에 베어메탈 ESXi 노드를 추가하거나 삭제하여 Google Cloud 의 VMware 솔루션에서 클러스터 용량을 확장하거나 축소하는 방법을 설명합니다.

클러스터 용량 확장

기존 클러스터를 X 노드에서 X + N 노드로 확장하려면 클러스터의 초기 배포 중에 사용한 것과 동일한 Terraform 작업공간 및 상태 파일 (terraform.tfstate)을 사용합니다.

다음 단계에서는 4노드 관리 클러스터에 5번째 노드 (vcf-mgmt-sample-node-5)를 추가하는 방법을 보여줍니다 (e2e-terraform/sample_management_cluster.tfvars 파일의 샘플 구성 기준).

  1. 변수 정의 파일 (management_cluster.tfvars) 업데이트: 다음과 같이 management_cluster.tfvars 파일에서 구성 변수를 업데이트합니다.

    • deployment_mode 변수를 "node_addition"로 설정합니다.
    • number_of_nodes 변수를 4에서 5로 업데이트합니다.
    • 클러스터 생성 중에 node_names를 명시적으로 지정한 경우 node_names 목록에 "vcf-mgmt-sample-node-5"를 추가합니다. 처음에 지정하지 않은 경우 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 주소를 예약합니다.
  • 새 인스턴스를 기존 관리 및 NSX 영역 NEG에 연결할 수 있도록 neg_attachment_commands 출력을 생성합니다.
  • 새 노드의 정방향 (A) 및 역방향 (PTR) Cloud DNS 레코드를 등록합니다.
  • 실행 중인 기존 노드, 부하 분산기, 네트워크 구성이 모두 중단되지 않습니다.

다음 단계

클러스터 용량을 확장한 후 다음 단계를 완료합니다.

  1. 도구 키트를 사용하여 노드 준비 및 VCF 배포에 설명된 대로 도구 키트 스크립트 (python3 -m vcf_deployer.main --config config.json)를 실행하여 각 새 호스트에서 초기 ESXi root 비밀번호를 재설정하고 클러스터 추가를 위해 새 ESXi 노드를 초기화합니다. config.json 파일에서 vcf_deployment_config 객체를 생략합니다.
  2. VMware UI 또는 API를 사용하여 준비된 노드를 커미셔닝하고 VMware Cloud Foundation (VCF) 9.x 클러스터에 추가합니다.

클러스터 용량 줄이기

기존 클러스터를 X 노드에서 X - N 노드로 줄이려면 클러스터의 초기 배포 중에 사용한 것과 동일한 Terraform 작업공간 및 상태 파일 (terraform.tfstate)을 사용합니다.

다음 단계에서는 클러스터 용량 확장에 설명된 5개 노드 관리 클러스터에서 세 번째 노드 (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 모드에서는 클러스터 생성 중에 또는 클러스터에 대한 이전 Terraform 작업 중에 지정하지 않은 경우에도 항상 node_names 및 availability_domains 목록을 명시적으로 지정해야 합니다 (예: 노드 이름이 자동 생성된 경우). 이러한 목록을 지정하면 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 레코드를 삭제합니다.
  • 나머지 모든 노드, 부하 분산기, 네트워크 구성은 중단되지 않습니다.