Men-deploy node dan VCF menggunakan Terraform dan toolkit

Dokumen ini menjelaskan cara menggunakan otomatisasi Terraform untuk men-deploy node ESXi bare-metal, jaringan siaran Lapisan 2, Cloud DNS, dan load balancer internal (ILB) regional untuk solusi VMware di Google Cloud dengan VMware Cloud Foundation (VCF).

Otomatisasi ini menyediakan infrastruktur berikut:

  • Hypervisor ESXi bare-metal khusus (z3-highmem-192-highlssd-metal atau z3-highmem-192-metal).
  • Jaringan siaran Lapisan 2 multi-VLAN dengan frame jumbo (MTU 8896).
  • Zona pribadi terkelola Cloud DNS dan kebijakan penerusan kueri masuk.
  • ILB regional dengan ARP Gratis / Pemberitahuan Router (GARP_RA) Fast IP Move ketersediaan tinggi.
  • Grup endpoint jaringan (NEG) zona untuk antarmuka pengelolaan dan datapath NSX.

Sebelum memulai

Sebelum menjalankan otomatisasi Terraform, instal alat yang diperlukan, aktifkan API yang diperlukan, izinkan jaringan subnet Lapisan 2, dan verifikasi persyaratan berikut untuk project Google Cloud Anda:

  1. Pastikan project Anda memiliki kuota node bare-metal yang memadai di region dan zona target. Untuk mengetahui kuota yang diperlukan dan petunjuk tentang cara melihat atau meminta penambahan kuota, lihat Kuota dan batas.
  2. Pastikan Anda memiliki izin Identity and Access Management (IAM) yang diperlukan, termasuk Compute Admin (roles/compute.admin) dan, jika Anda menggunakan Cloud DNS, DNS Administrator (roles/dns.admin).
  3. Rencanakan infrastruktur Domain Name System (DNS) Anda untuk mendukung pencarian maju dan mundur untuk semua nama host node ESXi dan endpoint peralatan VCF yang direncanakan.
  4. Nama host node: Berikan nama domain yang sepenuhnya memenuhi syarat (FQDN) dari setiap node selama deployment. Hal ini memastikan bahwa ESXi membuat sertifikat menggunakan nama host.
  5. Kebijakan image tepercaya: Jika organisasi Anda tidak menerapkan kebijakan organisasi constraints/compute.trustedImageProjects, tidak ada tindakan yang diperlukan. Jika organisasi Anda menerapkan kebijakan ini, izinkan projects/smve-prod-public-images agar Compute Engine dapat membuat boot disk bare-metal. Untuk mengetahui informasi selengkapnya, lihat Menetapkan batasan akses image.
  6. Kontrol Layanan VPC: Jika project target Anda tidak berada dalam perimeter layanan, tidak ada tindakan yang diperlukan. Jika project Anda berada dalam perimeter layanan, tambahkan aturan egress yang mengizinkan operasi compute.googleapis.com ke project smve-prod-public-images (projects/999037279871):

    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - serviceName: compute.googleapis.com
          methodSelectors:
          - method: "*"
        resources:
        - projects/999037279871
    

    Untuk mengetahui informasi selengkapnya, lihat Referensi aturan egress.

Menginstal Terraform

Anda harus menginstal Terraform CLI versi 1.3.0 atau yang lebih baru. Untuk menginstal Terraform, pilih tab untuk sistem operasi Anda:

Debian atau Ubuntu

Untuk menginstal Terraform di Debian atau Ubuntu, jalankan perintah berikut:

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com '"$(lsb_release -cs)"' main' | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install -y terraform

RHEL atau CentOS

Untuk menginstal Terraform di RHEL atau CentOS, jalankan perintah berikut:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform

Linux Generik

Untuk menginstal Terraform dengan mendownload biner secara langsung, jalankan perintah berikut:

export TERRAFORM_VERSION='1.9.5'
curl -fsSLO 'https://releases.hashicorp.com/terraform/'"${TERRAFORM_VERSION}"'/terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'
unzip 'terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'
sudo mv terraform /usr/local/bin/
rm 'terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'

Mengaktifkan Google Cloud API

Aktifkan API yang diperlukan berikut di project Google Cloud target Anda:

Endpoint layanan Tujuan
compute.googleapis.com Instance bare-metal, jaringan Virtual Private Cloud (VPC), subnet Lapisan 2, firewall, NEG, ILB regional, dan pemesanan IP statis.
dns.googleapis.com Zona terkelola DNS penerusan dan balik pribadi, kebijakan penerusan masuk, dan set data DNS.

Untuk mengaktifkan API yang diperlukan menggunakan gcloud CLI, jalankan perintah berikut:

gcloud services enable \
    compute.googleapis.com \
    dns.googleapis.com \
    --project='PROJECT_ID'

Ganti PROJECT_ID dengan ID project Google Cloud target Anda.

Memverifikasi kuota regional

Sebelum menyediakan node bare-metal atau membuat cluster, pastikan project Anda memiliki kuota Compute Engine regional dan global yang memadai. Tambahkan resource semua cluster yang ada di region ke nilai inkremental berikut sebelum Anda membandingkannya dengan kuota project:

Metrik kuota Resource yang diperlukan per node bare-metal Resource yang diperlukan untuk cluster 3 node
compute.googleapis.com/cpus_per_vm_family untuk Z3 192 vCPU 3 × 192 = 576 vCPU
compute.googleapis.com/local_ssd_total_storage_per_vm_family untuk Z3 72 TB 3 × 72 TB = 216 TB
compute.googleapis.com/hyperdisk_balanced_total_storage 128 GB 3 × 128 GB = 384 GB
compute.googleapis.com/resource_policies 0 saat menambahkan node ke cluster yang ada 1 kebijakan penempatan tersebar per cluster
compute.googleapis.com/regional_backend_services_protocol_forwarding_fast_ha 0 saat menambahkan node atau cluster tanpa peralatan baru 1 per VIP perangkat pengelolaan VCF baru atau endpoint NSX Edge

Untuk mengetahui daftar lengkap kuota yang diperlukan dan petunjuk tentang cara melihat atau meminta penambahan kuota, lihat Kuota dan batas.

Mengizinkan jaringan subnet Lapisan 2 berbasis VLAN

Solusi VMware mengharuskan subnet jaringan Virtual Private Cloud (VPC) Anda memiliki properti Resolve Subnet Mask yang ditetapkan ke Broadcast primary range only with learning untuk mendukung jaringan berbasis VLAN. Buka tiket dukungan di Pusat Dukungan konsolGoogle Cloud dengan informasi berikut:

  • Produk: Google Cloud VMware Engine
  • Prioritas: P2
  • Kategori: Network Connectivity
  • Dampak Bisnis: Pertanyaan Teknis Umum
  • Berikan detail selengkapnya: Allowlist L2 network connectivity for my project, beserta project ID, nomor project, serta region dan zona target untuk deployment Anda

Untuk mengetahui informasi selengkapnya tentang dukungan untuk jaringan berbasis VLAN, lihat Emulasi Lapisan 2: Penyiaran ARP dan pembelajaran MAC kustom.

Mengonfigurasi kebijakan organisasi dan Kontrol Layanan VPC

Instance ESXi bare-metal di solusi VMware melakukan booting dari image ESXi yang disediakan Google yang dihosting di project smve-prod-public-images, yang memiliki nomor project 999037279871. Secara default, tidak diperlukan konfigurasi tambahan. Terapkan konfigurasi berikut hanya jika organisasi Anda menerapkan kebijakan image tepercaya atau menggunakan Kontrol Layanan VPC:

  • Kebijakan image tepercaya: Jika organisasi Anda tidak menerapkan kebijakan organisasi constraints/compute.trustedImageProjects, tidak ada tindakan yang diperlukan. Jika organisasi Anda menerapkan kebijakan ini, izinkan projects/smve-prod-public-images agar Compute Engine dapat membuat boot disk bare-metal. Untuk mengetahui informasi selengkapnya, lihat Menetapkan batasan akses image.
  • Aturan egress Kontrol Layanan VPC: Jika project target Anda tidak berada dalam perimeter layanan, tidak ada tindakan yang diperlukan. Jika project Anda berada dalam perimeter layanan, tambahkan aturan egress yang mengizinkan operasi compute.googleapis.com ke project smve-prod-public-images (projects/999037279871):

    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - serviceName: compute.googleapis.com
          methodSelectors:
          - method: "*"
        resources:
        - projects/999037279871
    

    Untuk mengetahui informasi selengkapnya, lihat Referensi aturan egress.

Mengonfigurasi izin dan peran IAM

Identitas yang menjalankan Terraform (administrator manusia atau akun layanan CI/CD otomatis) memerlukan peran IAM berikut pada projectGoogle Cloud target:

Peran ID Peran Cakupan penggunaan
Compute Admin roles/compute.admin Menyediakan instance komputasi bare-metal, memasang boot disk image kustom, mengonfigurasi kebijakan penempatan, dan mengelola antarmuka multi-NIC. Mengelola jaringan VPC, subnet siaran Lapisan 2, reservasi IP statis, ILB regional, layanan backend, aturan penerusan, dan NEG zona. Membuat dan mengelola aturan keamanan firewall ingress VPC.
Administrator DNS roles/dns.admin Mengelola zona penerusan dan pencarian balik pribadi Cloud DNS, kebijakan penerusan kueri masuk, serta set data resource A dan PTR.
Service Account User roles/iam.serviceAccountUser Berikan peran ini di akun layanan Compute Engine default (PROJECT_NUMBER-compute@) untuk mengizinkan penyediaan instance dengan cakupan cloud-platform.

Memberikan peran menggunakan gcloud CLI

Untuk menetapkan peran level project dan izin akun layanan yang diperlukan, jalankan perintah berikut:

# Assign required project-level roles (use 'serviceAccount:SA_EMAIL' if granting to a service account)
for ROLE in \
    roles/compute.admin \
    roles/dns.admin; do
  gcloud projects add-iam-policy-binding 'PROJECT_ID' \
      --member='user:USER_EMAIL' \
      --role=${ROLE}
done
# Grant Service Account User role on the Compute Engine default service account
gcloud iam service-accounts add-iam-policy-binding \
    'PROJECT_NUMBER-compute@' \
    --member='user:USER_EMAIL' \
    --role='roles/iam.serviceAccountUser' \
    --project='PROJECT_ID'

Sebelum menjalankan perintah, ganti variabel berikut:

  • PROJECT_ID: ID project Google Cloud target Anda.
  • PROJECT_NUMBER: Nomor project dari project target Google Cloud Anda.
  • USER_EMAIL: Alamat email identitas pengguna Anda.

Mengautentikasi runner Terraform

Pilih salah satu strategi autentikasi berikut berdasarkan lingkungan operasional Anda:

Melakukan autentikasi menggunakan peniruan akun layanan

Peniruan akun layanan menghilangkan kunci kredensial yang berumur panjang dengan membuat token akses OAuth 2.0 yang berumur pendek. Identitas pribadi Anda melakukan autentikasi, sementara Terraform berjalan sebagai akun layanan yang ditetapkan. Google Cloud mengaudit tindakan yang dilakukan oleh Terraform terhadap akun layanan.

  1. Berikan identitas Google Cloud pribadi Anda peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) di akun layanan runner:

    gcloud iam service-accounts add-iam-policy-binding 'SA_EMAIL' \
       --member='user:USER_EMAIL' \
       --role='roles/iam.serviceAccountTokenCreator' \
       --project='PROJECT_ID'
    

    Sebelum menjalankan perintah, ganti variabel berikut:

    • SA_EMAIL: Alamat email akun layanan runner Terraform.
    • USER_EMAIL: Alamat email identitas pribadi Google Cloud Anda.
    • PROJECT_ID: ID project Google Cloud target Anda.
  2. Autentikasi lingkungan lokal Anda:

    gcloud auth application-default login
    
  3. Tetapkan variabel lingkungan GOOGLE_IMPERSONATE_SERVICE_ACCOUNT untuk menerapkan peniruan identitas di seluruh eksekusi Terraform:

    export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT='SA_EMAIL'
    

Melakukan Autentikasi dengan Menggunakan Kredensial Default Aplikasi

Gunakan Kredensial Default Aplikasi (ADC) di lingkungan pengembangan dan pengujian tempat identitas pengguna Anda memiliki izin yang diperlukan secara langsung.Google Cloud mengaudit tindakan terhadap identitas pribadi Anda:

gcloud auth application-default login
gcloud config set project 'PROJECT_ID'

Ganti PROJECT_ID dengan ID project Google Cloud target Anda.

Mengautentikasi menggunakan file kunci akun layanan

Gunakan file kunci akun layanan dalam pipeline CI/CD otomatis (seperti Cloud Build, GitHub Actions, atau Jenkins) yang tidak mendukung login pengguna interaktif dan autentikasinya mengandalkan kunci kredensial akun layanan yang berumur panjang. Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file kunci akun layanan Anda:

export GOOGLE_APPLICATION_CREDENTIALS='KEY_FILE'

Ganti KEY_FILE dengan jalur ke kunci JSON akun layanan Anda.

Meninjau arsitektur modular

Terraform mengoordinasikan penyediaan resource di empat tahap modular. Desain modular ini menerapkan pengurutan dependensi yang ketat untuk memastikan bahwa prasyarat jaringan sudah ada sebelum Anda men-deploy host komputasi, load balancer, dan data DNS:

+-----------------------------------------------------------------------------------+
| STAGE 1: VPC Network Infrastructure, Firewalls & Cloud DNS (modules/vpc)          |
| - Custom VPC Network (MTU 8896 jumbo frames)                                      |
| - VPC Ingress Allow-All Firewall Rule                                             |
| - Dedicated Standard Subnetwork (for DNS inbound resolver)                        |
| - Cloud DNS Private Forward & Reverse Managed Zones                               |
| - Cloud DNS Inbound Forwarding Policy (Dynamic DNS_RESOLVER IP discovery)         |
+-----------------------------------------------------------------------------------+
                                         │
                                         ▼
+-----------------------------------------------------------------------------------+
| STAGE 2: L2 Broadcast Subnetworks & Zonal NEGs (modules/subnets)                  |
| - Primary Management Subnet (Untagged Native VLAN, ARP broadcast learning)        |
| - Storage & Infrastructure Subnets: vSAN (VLAN tagged), vMotion, NSX TEP          |
| - Optional Dynamic Workload Subnets                                               |
| - Zonal Network Endpoint Groups (GCE_VM_IP_DEDICATED_BACKEND) for Mgmt & NSX TEP   |
+-----------------------------------------------------------------------------------+
                                         │
                                         ▼
+-----------------------------------------------------------------------------------+
| STAGE 3: Bare-Metal ESXi Hosts, IP Allocations & Host DNS (modules/hosts)         |
| - Compute Resource Placement Policy (Availability Domain Count: 5-8, default: 6)  |
| - Universal IP Allocator: Static reservations & dynamic allocation for all NICs   |
| - Bare-Metal ESXi Instances (z3-highmem-192-highlssd-metal, 4+ Multi-NICs)        |
| - Automated NEG Endpoint Attachments (in cluster_creation mode)                   |
| - Cloud DNS Forward (A) and Reverse (PTR) Records for all ESXi Hosts              |
+-----------------------------------------------------------------------------------+
                                         │
                                         ▼
+-----------------------------------------------------------------------------------+
| STAGE 4: Regional Internal Load Balancers & Appliances (modules/appliances)       |
| - Regional Backend Services (GARP_RA Fast IP Move HA Policy)                      |
| - Regional Forwarding Rules (L3_DEFAULT / ALL_PORTS / allow_global_access)        |
| - Automated Cloud DNS Forward (A) and Reverse (PTR) Records for Mgmt Appliances   |
+-----------------------------------------------------------------------------------+

Menyediakan resource untuk cluster pengelolaan

Cluster pengelolaan domain pengelolaan menghosting peralatan bidang kontrol VCF inti (SDDC Manager, vCenter Server, cluster NSX Management, dan VMware Aria Suite) dan hypervisor ESXi.

Menyiapkan ruang kerja Terraform

Buat direktori ruang kerja khusus dan clone repositori toolkit menggunakan Git:

mkdir -p ~/vcf-deployments/mgmt-cluster
cd ~/vcf-deployments/mgmt-cluster
git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit

Mengonfigurasi file definisi variabel

Buat file definisi variabel (management_cluster.tfvars) dengan nilai lingkungan target Anda. Salin file sample_management_cluster.tfvars dari direktori e2e-terraform ke file management_cluster.tfvars, dan ikuti petunjuk dan komentar inline untuk memperbarui kolom apa pun sesuai kebutuhan:

cp self-managed-vmware-solution-toolkit/e2e-terraform/sample_management_cluster.tfvars \
    self-managed-vmware-solution-toolkit/e2e-terraform/management_cluster.tfvars

Menerapkan konfigurasi Terraform

Buka direktori self-managed-vmware-solution-toolkit/e2e-terraform, lalu lakukan inisialisasi dan terapkan konfigurasi Terraform:

cd self-managed-vmware-solution-toolkit/e2e-terraform
terraform init
terraform plan -var-file='management_cluster.tfvars' -out=tfplan
terraform apply tfplan

Meninjau dan mengekspor output Terraform

Setelah Anda menjalankan terraform apply, Terraform akan mengekspos output terstruktur di empat kategori:

  • gcp_resources_self_links: URL self-link resource Google Cloud lengkap untuk jaringan VPC, subnet, instance, kebijakan penempatan, NEG, layanan backend, aturan penerusan, firewall, dan zona Cloud DNS.
  • neg_attachment_commands:
    • Jika variabel deployment_mode ditetapkan ke "cluster_creation": Menampilkan pesan status yang menunjukkan bahwa Terraform otomatis melampirkan NEG selama pembuatan cluster.
    • Jika variabel deployment_mode ditetapkan ke "node_addition": Menyediakan perintah gcloud compute network-endpoint-groups update yang diperlukan untuk memasang instance host ESXi yang baru disediakan ke NEG pengelolaan dan NSX.
    • Jika variabel deployment_mode ditetapkan ke "appliance_addition": Menampilkan pesan status yang menunjukkan bahwa NEG tetap terpasang ke node cluster yang ada dan Terraform tidak mengubahnya selama penambahan peralatan.
  • python_scripts_input_config: Payload konfigurasi parameter terstruktur untuk skrip otomatisasi deployment penginstal VCF downstream di direktori toolkit python. Anda dapat mengonversi output ini ke format JSON yang diharapkan oleh skrip Python toolkit dengan menjalankan skrip bantuan yang dijelaskan di bagian berikutnya.
  • management_domain_deployment_input_config: Input terstruktur untuk deployment domain pengelolaan dengan sebagian besar kolom yang diisi otomatis dari penyediaan menyeluruh. Anda dapat mengedit input ini jika diperlukan atau ditunjukkan, dan mengonversinya menjadi file JSON untuk deployment domain pengelolaan menggunakan skrip ekspor yang dijelaskan di bagian berikutnya.

Mengekspor konfigurasi deployment

Toolkit ini menyertakan skrip bantuan (scripts/export_deployment_config.py) yang mengekstrak blok konfigurasi dari output Terraform dan mengekspornya ke dalam file JSON yang diformat dan sesuai skema untuk alur kerja downstream:

  • management_domain_deployment_input_config: JSON input untuk deployment domain pengelolaan VCF.
  • python_scripts_input_config: JSON input (config.json) untuk skrip otomatisasi Python toolkit (vcf_deployer).

Menjalankan skrip helper

Jalankan skrip bantuan dari direktori e2e-terraform (atau tentukan flag -d atau -i) dengan memilih salah satu opsi berikut:

  • Ekspor kedua konfigurasi secara bersamaan:

    python3 ../scripts/export_deployment_config.py --config all --output-dir .
    

    Perintah ini akan menghasilkan file berikut:

    • management_domain_deployment_input.json
    • python_scripts_input_config.json
  • Ekspor hanya JSON input deployment domain pengelolaan VCF:

    python3 ../scripts/export_deployment_config.py --config mgmt -o management_domain_deployment_input.json
    
  • Ekspor hanya JSON input toolkit Python:

    python3 ../scripts/export_deployment_config.py --config python -o config.json
    
  • Ekspor dari output Terraform yang disimpan atau input standar yang disalurkan (stdin):

    # From stdin pipe:
    terraform output -json | python3 ../scripts/export_deployment_config.py --config all --output-dir .
    
    # From a saved JSON file:
    terraform output -json > outputs.json
    python3 ../scripts/export_deployment_config.py -i outputs.json --config all --output-dir .
    

Langkah berikutnya

  1. Jalankan toolkit persiapan node untuk mereset sandi root ESXi awal di setiap host, siapkan node untuk deployment VCF, dan deploy peralatan penginstal VCF menggunakan output python_scripts_input_config dari konfigurasi Terraform end-to-end (dikonversi menjadi JSON menggunakan skrip bantuan). Untuk mengetahui petunjuknya, lihat Menyiapkan node dan men-deploy VCF menggunakan toolkit.
  2. Konfigurasikan koneksi ke depot offline regional di penginstal VCF untuk mendownload paket software yang diperlukan:
    • Protokol: HTTPS
    • FQDN (jangan gunakan alamat IP): offline-depot.REGION.selfmanagedvmwareengine.goog (ganti REGION dengan region Google Cloud tempat node bare-metal Anda berada)
    • Port: 443
    • Username: vcf-depot-user
    • Password: Google1!
  3. Deploy domain pengelolaan dengan memberikan file JSON management_domain_deployment_input_config (diekspor menggunakan skrip bantuan) ke penginstal VCF. Pastikan Anda mengganti semua kolom yang ditandai sebagai user_should_input dalam konfigurasi input dengan nilai target Anda. Untuk mengetahui petunjuk tentang cara menyelesaikan alur kerja pengaktifan VCF, lihat Men-deploy fleet VCF baru atau instance VCF baru dalam dokumentasi Broadcom.
  4. Perluas kapasitas cluster dengan menambahkan node di Mengelola kapasitas node menggunakan Terraform.
  5. Sediakan load balancer dan data DNS untuk peralatan VCF tambahan di Menambahkan peralatan VCF menggunakan Terraform.