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 파일의 샘플 구성 기준).
변수 정의 파일 (
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]Terraform 실행 계획 생성 및 적용:
terraform plan -var-file='management_cluster.tfvars' -out=tfplan terraform apply tfplan네트워크 엔드포인트 그룹 (NEG)에 새 노드 연결:
neg_attachment_commandsTerraform 출력에서 생성된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 레코드를 등록합니다. - 실행 중인 기존 노드, 부하 분산기, 네트워크 구성이 모두 중단되지 않습니다.
다음 단계
클러스터 용량을 확장한 후 다음 단계를 완료합니다.
- 도구 키트를 사용하여 노드 준비 및 VCF 배포에 설명된 대로 도구 키트 스크립트 (
python3 -m vcf_deployer.main --config config.json)를 실행하여 각 새 호스트에서 초기 ESXiroot비밀번호를 재설정하고 클러스터 추가를 위해 새 ESXi 노드를 초기화합니다.config.json파일에서vcf_deployment_config객체를 생략합니다. - VMware UI 또는 API를 사용하여 준비된 노드를 커미셔닝하고 VMware Cloud Foundation (VCF) 9.x 클러스터에 추가합니다.
클러스터 용량 줄이기
기존 클러스터를 X 노드에서 X - N 노드로 줄이려면 클러스터의 초기 배포 중에 사용한 것과 동일한 Terraform 작업공간 및 상태 파일 (terraform.tfstate)을 사용합니다.
다음 단계에서는 클러스터 용량 확장에 설명된 5개 노드 관리 클러스터에서 세 번째 노드 (vcf-mgmt-sample-node-3)를 삭제하는 방법을 보여줍니다.
VCF 클러스터에서 노드 삭제: VCF 9.x 클러스터에서 대상 ESXi 호스트를 삭제하고 VMware SDDC Manager를 사용하여 사용 중단합니다. 자세한 내용은 VMware Cloud Foundation 문서의 호스트 사용 중단을 참조하세요.
해당하는 경우 노드에서 삭제 방지 사용 중지: 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 콘솔을 사용하여 삭제 방지를 사용 중지하려면 노드 사용 중단 및 삭제를 참조하세요.
변수 정의 파일 (
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]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 레코드를 삭제합니다. - 나머지 모든 노드, 부하 분산기, 네트워크 구성은 중단되지 않습니다.