使用工具包准备节点并部署 VCF

本页面介绍了如何使用 VMware solution on Google Cloud 工具包准备裸金属 ESXi 节点、配置 vSwitch 网络和 vSAN 数据存储区,以及部署 VMware Cloud Foundation (VCF) 安装程序设备。

概览

VMware 解决方案工具包可自动执行在 Google Cloud 项目中部署的裸金属 ESXi 实例的初始设置。从跳转盒虚拟机执行时,该工具包会执行以下操作:

  1. 主机凭据验证和重设密码:连接到每个裸金属 ESXi 实例,并将初始 ESXi root 密码重设为存储在 Secret Manager 中的 esxi-root-password 密钥。
  2. 网络配置:配置 vSwitch0 并为 VCF 安装程序网络创建带 VLAN 标记的端口组。
  3. 存储配置:将本地 SSD 初始化为 vsanDatastore 池。
  4. VCF 安装程序部署:从离线仓库下载 VCF 安装程序开放虚拟设备 (OVA),将该设备部署到指定的目标 ESXi 主机上,注入网络和 DNS 参数,并初始化安装程序。

选择部署路径

您可以使用以下任一方法运行该工具包:

  • 路径一:使用 Terraform 预配跳转盒(推荐):使用 Terraform 在 ESXi 主机 VPC、VPC 子网、Cloud NAT 网关和 Identity-Aware Proxy (IAP) SSH 防火墙规则中预配专用 Compute Engine 跳转盒虚拟机。
  • 路径二:使用现有 jumpbox 虚拟机:直接从位于 ESXi 主机 VPC 内且启用了专用 Google 访问通道的子网中的现有 Linux 虚拟机运行该工具包。

准备工作

在运行该工具包之前,请完成以下前提条件:

将基于 VLAN 的第 2 层子网网络列入许可清单

VMware 解决方案要求将虚拟私有云 (VPC) 网络子网的解析子网掩码属性设置为仅通过学习广播主要范围,以支持基于 VLAN 的网络。在 Google Cloud 控制台支持中心中提交支持服务工单,并提供以下信息:

  • 产品:Google Cloud VMware Engine
  • 优先级:P2
  • 类别:Network Connectivity
  • 业务影响:常规技术问题
  • 提供更多详细信息:Allowlist L2 network connectivity for my project,以及您的项目 ID、项目编号和部署的目标区域和可用区

如需详细了解对基于 VLAN 的网络的支持,请参阅第 2 层模拟:ARP 广播和自定义 MAC 学习。

启用必需的 API

您必须有一个已启用结算功能的有效 Google Cloud 项目(该项目可以是 ESXi 主机所在的同一 Google Cloud 项目,也可以是单独的 Jumpbox 项目)。启用以下 API:

  • Compute Engine API (compute.googleapis.com) - 适用于跳转盒和 ESXi 主机项目
  • Identity and Access Management (IAM) API (iam.googleapis.com) - 适用于 Jumpbox 项目
  • Cloud Resource Manager API (cloudresourcemanager.googleapis.com) - 适用于跳转盒和 ESXi 主机项目
  • Cloud Identity-Aware Proxy API (iap.googleapis.com) - 适用于 Jumpbox 项目
  • Secret Manager API (secretmanager.googleapis.com) - 适用于 ESXi 主机项目

如需使用 gcloud CLI 启用 API,请运行以下命令:

gcloud services enable \
    compute.googleapis.com \
    iam.googleapis.com \
    cloudresourcemanager.googleapis.com \
    iap.googleapis.com \
    secretmanager.googleapis.com \
    --project='PROJECT_ID'

将 PROJECT_ID 替换为目标 Google Cloud 项目的 ID。

配置 IAM 权限

该工具包工作流使用以下身份和角色:

  • Terraform 调用方:启动 terraform apply 的用户或 CI/CD 身份。如果模拟 Terraform Runner 服务账号,则需要该服务账号具有 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) 角色。
  • Terraform 运行程序:预配 Terraform 基础设施的身份:
    • Compute Network Admin (roles/compute.networkAdmin)
    • Compute Instance Admin v1 (roles/compute.instanceAdmin.v1)
    • Compute Security Admin (roles/compute.securityAdmin)
    • Service Account User (roles/iam.serviceAccountUser)
    • 目标项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)(如果使用 Terraform 进行自动化 IAM 管理)
  • Jumpbox SSH 用户:使用 IAP 连接到 Jumpbox 虚拟机的身份:
    • IAP Tunnel Resource Accessor (roles/iap.tunnelResourceAccessor)
    • Compute Viewer (roles/compute.viewer)
  • Jumpbox 脚本运行程序:在 Jumpbox 上执行 Python 工具包脚本的用户或服务账号:
    • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)
    • Compute Admin (roles/compute.admin)
    • Project IAM Admin (roles/resourcemanager.projectIamAdmin)
  • VMware Engine 网络偏移服务代理 (P4SA) (service-PROJECT_NUMBER@gcp-sa-network-drift.):
    • Compute Network Admin (roles/compute.networkAdmin)

在 Secret Manager 中存储凭证

该工具包会在运行时从 Secret Manager 检索密码,并使用 esxi-root-password 密钥重置每个裸金属 ESXi 实例上的初始 root 密码。在 Google Cloud 项目中为 ESXi root 密码、VCF root 密码和 VCF 本地用户 (admin) 密码创建 Secret:

# 1. Create Secret for ESXi Host Root Password
gcloud secrets create esxi-root-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_ESXI_ROOT_PASSWORD' | gcloud secrets versions add esxi-root-password \
    --data-file=- \
    --project='PROJECT_ID'
# 2. Create Secret for VCF Installer Root Password
gcloud secrets create vcf-root-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_VCF_ROOT_PASSWORD' | gcloud secrets versions add vcf-root-password \
    --data-file=- \
    --project='PROJECT_ID'
# 3. Create Secret for VCF Local User Password
gcloud secrets create vcf-localuser-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_VCF_ADMIN_PASSWORD' | gcloud secrets versions add vcf-localuser-password \
    --data-file=- \
    --project='PROJECT_ID'

在运行这些命令之前,请替换以下内容:

  • PROJECT_ID:目标Google Cloud 项目的 ID。
  • YOUR_ESXI_ROOT_PASSWORD:要在裸金属 ESXi 主机上设置的新 root 密码,用于替换初始实例密码。
  • YOUR_VCF_ROOT_PASSWORD:VCF 安装程序设备的 root 密码。
  • YOUR_VCF_ADMIN_PASSWORD:VCF 安装程序设备的本地管理员用户密码。

使用 Terraform 预配跳转盒

如果您没有与 ESXi 主机建立网络连接的现有跳转盒,请使用提供的 Terraform 模块部署跳转盒虚拟机。

克隆工具包代码库

将工具包代码库克隆到本地工作站:

mkdir -p ~/smve-toolkit
cd ~/smve-toolkit
git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit
cd self-managed-vmware-solution-toolkit/smve-toolkit-jumpbox-tf

配置 Terraform 变量

进入 infrastructure 目录并创建 terraform.tfvars 文件:

cd infrastructure
cp terraform.tfvars.example terraform.tfvars

使用项目参数更新 terraform.tfvars 文件:

project_id      = "PROJECT_ID"
region          = "REGION"
zone            = "ZONE" # Match target ESXi host zone
# Network configuration
create_subnet   = true
vpc_name        = "VPC_NAME"
subnet_name     = "smve-toolkit-subnet"
subnet_cidr     = "10.10.0.0/28" # Minimum /29 required
# Cloud NAT and egress
enable_internet = true
# Jumpbox VM instance
jumpbox_name    = "smve-toolkit-jumpbox"

下表介绍了关键 Terraform 输入变量:

变量 要求 默认 说明
project_id 必需 无 Google Cloud Terraform 部署基础设施的项目 ID。
region 必需 无 目标 Google Cloud区域(例如 us-central1)。
zone 可选 ${region}-a 目标可用区。将此变量设置为与裸金属 ESXi 主机的可用区匹配,以最大限度地减少延迟时间。
vpc_name 条件句 "" 托管 ESXi 节点的 VPC 网络的名称。如果 create_subnet 变量设置为 true,则此字段为必填字段。
create_subnet 可选 true 设置为 true 可创建新子网,设置为 false 可使用现有子网。
subnet_name 可选 "smve-toolkit-subnet" 跳转盒虚拟机的子网名称。如果 create_subnet 变量设置为 false,则子网必须存在于 vpc_name 网络中。
subnet_cidr 条件句 "" 主要 IPv4 CIDR 范围(最小为 /29)。如果 create_subnet 变量设置为 true,则此字段为必填字段。
enable_internet 可选 true 控制 Cloud Router、Cloud NAT 和默认路由创建,以实现互联网出站流量。在设置后,设置为 false 以拆除 NAT 网关、路由器和路由。
jumpbox_name 可选 "smve-toolkit-jumpbox" Compute Engine 跳板机虚拟机的名称。
machine_type 可选 "e2-micro" 跳转盒虚拟机实例的机器类型。
boot_disk_size 可选 30 跳转盒虚拟机实例的启动磁盘大小(以 GB 为单位,最少 10 GB)。
boot_disk_type 可选 "pd-balanced" Jumpbox 启动磁盘的永久性磁盘类型(pd-balanced、pd-standard、pd-ssd、pd-extreme)。
boot_disk_image 可选 "debian-cloud/debian-12" 操作系统启动磁盘映像系列或特定映像 self_link。
jumpbox_internal_ip 可选 "" 静态内部 IPv4 地址(例如 "10.10.0.5")、预留 IP 名称或 URI。默认为动态临时 IP 地址。
service_account_email 可选 "" 要关联到跳转盒虚拟机的自定义服务账号电子邮件地址。默认为 Compute Engine 默认服务账号。

部署跳板机基础设施

初始化并应用 Terraform 配置:

export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT='TERRAFORM_RUNNER_SA' # Optional: set only if impersonating a runner service account
terraform init
terraform validate
terraform plan -out=tfplan
terraform apply tfplan

将 TERRAFORM_RUNNER_SA 替换为 Terraform 运行器服务账号的电子邮件地址。

使用 IAP 连接到跳转盒

使用 IAP TCP 转发连接到 jumpbox 虚拟机(无需公共 IP 地址):

gcloud compute ssh smve-toolkit-jumpbox \
    --project='PROJECT_ID' \
    --zone='ZONE' \
    --tunnel-through-iap

在运行该命令之前,请替换以下内容:

  • PROJECT_ID: Google Cloud 托管跳转盒虚拟机的项目的 ID。
  • ZONE:跳板机虚拟机部署到的 Google Cloud 可用区。

使用现有跳转盒虚拟机

如果您自带跳板机虚拟机,则该虚拟机必须是 Linux Compute Engine 虚拟机,且位于托管裸金属 ESXi 节点的同一 VPC 网络中。此 VPC 放置要求是强制性的,目的是确保与托管 VCF 安装程序 OVA 的离线代码库 Private Service Connect (PSC) 端点建立网络连接。

在执行该工具包之前,请验证您现有的跳转盒虚拟机是否满足以下要求:

  1. VPC 放置:您必须在托管 ESXi 节点的 VPC 网络中部署虚拟机。
  2. Google Cloud API 访问权限:托管跳转盒虚拟机的子网必须启用专用 Google 访问通道 (private_ip_google_access = true) 或具有出站互联网访问权限,才能访问 secretmanager.googleapis.com、compute.googleapis.com 和 iam.googleapis.com。
  3. 软件包安装出站流量:出站 HTTP/HTTPS 访问(使用 Cloud NAT、企业代理或直接出站流量)以安装 Python 依赖项。
  4. API 启用和 IAM 权限:运行脚本的身份必须在 Google Cloud 项目中具有 roles/secretmanager.secretAccessor、roles/compute.admin 和 roles/resourcemanager.projectIamAdmin 角色。
  5. SSH 连接性:跳转盒必须允许来自 IAP IP 范围 (35.235.240.0/20) 或授权公共 IP 范围的 TCP 端口 22 上的 SSH 入站流量,并且连接身份必须具有适用的角色(roles/iap.tunnelResourceAccessor 和 roles/compute.viewer)。

在跳转盒上设置工具包

在跳板机终端上,安装依赖项并下载工具包脚本。

安装系统软件包

安装 Python 3、pip、venv 和 Git:

sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv git

获取工具包脚本

从本地工作站克隆代码库或复制脚本:

  • 选项 A(使用 Git 克隆):

    mkdir -p ~/smve-toolkit
    cd ~/smve-toolkit
    git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit
    cd self-managed-vmware-solution-toolkit/python
    
  • 选项 B(使用 gcloud compute scp 从本地工作站复制):

    gcloud compute scp --recurse ./smve-toolkit smve-toolkit-jumpbox:~/ \
      --project='PROJECT_ID' \
      --zone='ZONE' \
      --tunnel-through-iap
    # On the jumpbox terminal, go to the copied folder:
    cd ~/smve-toolkit/python
    

创建并激活 Python 虚拟环境

python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

配置工具包脚本配置文件

在跳转盒虚拟机上创建 config.json 配置文件,以指定目标 ESXi 实例和 VCF 部署设置。

配置参数

参数 必填 数据类型 说明
project 有 string 裸金属 ESXi 实例所在的目标 Google Cloud 项目 ID。
zone 是 string ESXi 节点所在的目标 Google Cloud 可用区。
gce_nodes 是 list(string) 或 object 裸金属 ESXi 实例名称的显式列表(例如 ["vcf-mgmt-sample-node-1", "vcf-mgmt-sample-node-2"]),或通过 prefix(例如 {"prefix": "vcf-mgmt-sample"})或 subnet ({"subnet": "vcf-mgmt-subnet"}) 发现实例的对象。
esxi_root_password_secret 有 string 包含 ESXi 根密码的 Secret Manager 密钥名称或资源路径。
vcf_deployment_config 可选 object 用于 VCF 安装程序部署和初始化的配置对象。如果您不需要在任何正在准备的节点上部署 VCF 安装程序,请省略此对象。
└─ target_gce_node 条件 string 托管初始部署工作负载的目标裸金属节点。 如果定义了 vcf_deployment_config 对象,则此属性为必填属性。
└─ vcf_appliance_root_password_secret 条件 string 包含 VCF 设备根密码的 Secret Manager 密钥名称。
└─ vcf_appliance_local_user_password_secret 条件 string 包含 VCF 设备本地用户(管理员)密码的 Secret Manager 密钥名称。
└─ vcf_installer_ip_source 条件 string 或 object VCF 安装程序 (SDDC Manager) 的 IP 地址来源。指定 {"reserved_address": "ADDRESS_NAME"}、{"forwarding_rule": "RULE_NAME"} 或直接资源 URI 字符串(例如 projects/PROJECT_ID/regions/REGION/forwardingRules/RULE_NAME)。
└─ vcf_installer_fqdn 条件 string VCF 安装程序 (SDDC Manager) 的完全限定域名 (FQDN)。
└─ offline_depot_subnet_cidr 条件 string 专用离线代码库子网的主要 IPv4 CIDR 范围(例如 /29)。不得与 VPC 中的任何现有子网重叠或重复使用。
└─ dns_server 可选 string DNS 服务器 IP 地址(例如,子网中的预留 DNS IP 或自定义 DNS 服务器)。如果省略,则默认为Google Cloud 元数据服务器 (169.254.169.254)。如果您使用 Cloud DNS,请指定非第 2 层子网中的 IP 地址。

示例配置

以下标签页显示了针对不同实例定位方法和 IP 分配策略的示例 config.json 配置(基于 python/examples/ 目录中提供的模板):

显式节点列表

使用此配置 (python/examples/config_explicit_nodes.json) 定位到特定的 ESXi 实例名称:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Explicit list of bare-metal ESXi Compute Engine instance names
"gce_nodes": [
  "vcf-mgmt-sample-node-1",
  "vcf-mgmt-sample-node-2",
  "vcf-mgmt-sample-node-3",
  "vcf-mgmt-sample-node-4"
],
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "vcf-mgmt-sample-node-1",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Source identifier for the VCF Installer (SDDC Manager) IP address
  "vcf_installer_ip_source": {
    "forwarding_rule": "vcf-mgmt-sddcm-fr"
  },
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

节点名称前缀过滤条件

使用此配置 (python/examples/config_prefix_filter.json) 动态发现与名称前缀匹配的 ESXi 实例,并使用转发规则:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Discover ESXi instances matching a given instance name prefix
"gce_nodes": {
  "prefix": "vcf-mgmt-sample"
},
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "esxi-node-0",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Source identifier for the VCF Installer (SDDC Manager) forwarding rule
  "vcf_installer_ip_source": {
    "forwarding_rule": "vcf-mgmt-sddcm-fr"
  },
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

子网发现过滤条件

使用此配置 (python/examples/config_subnet_filter.json) 动态发现连接到特定子网的 ESXi 实例,并为 IP 来源提供完整的资源 URI:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Discover ESXi instances attached to a specific primary management subnet
"gce_nodes": {
  "subnet": "vcf-mgmt-subnet"
},
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "esxi-node-0",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Direct resource URI for the VCF Installer (SDDC Manager) forwarding rule
  "vcf_installer_ip_source": "projects/PROJECT_ID/regions/us-east4/forwardingRules/vcf-mgmt-sddcm-fr",
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

仅节点准备(无 VCF 安装程序)

如果您不需要在任何正在准备的节点上部署 VCF 安装程序设备(例如,在为第 2 天节点添加或工作负载数据集群创建准备节点时),请省略 config.json 文件中的 vcf_deployment_config 对象:

{
"project": "PROJECT_ID",
"zone": "ZONE",
"gce_nodes": {
  "subnet": "SUBNET_NAME"
},
"esxi_root_password_secret": "esxi-root-password"
}

替换 config.json 文件中的以下内容(并在运行 Python 脚本之前移除所有内嵌注释):

  • PROJECT_ID:裸金属 ESXi 实例所在的 Google Cloud 项目的 ID。
  • ZONE:裸金属 ESXi 实例所在的 Google Cloud 可用区(例如 us-east4-c)。
  • SUBNET_NAME:连接到 ESXi 实例的 VPC 子网的名称(例如 vcf-mgmt-subnet)。

运行工具包脚本

在跳转盒终端上使用应用默认凭据向 Google Cloud 进行身份验证:

gcloud auth application-default login --no-browser

在虚拟环境处于活跃状态 (source venv/bin/activate) 且 config.json 已配置的情况下,执行该工具包:

python3 -m vcf_deployer.main --config config.json

执行工作流

该脚本会运行自动验证检查并执行以下设置阶段:

  1. 预检验证:确认目标实例运行受支持的 ESXi 映像、验证 Secret Manager 访问权限、验证 IP CIDR 对齐情况,并计算 SSL 证书指纹。
  2. 凭证配置和重设密码:连接到每个主机,并将初始 ESXi root 密码重设为存储在 Secret Manager 中的 esxi-root-password 密钥。
  3. vSwitch 和端口组创建:配置 vSwitch0 并创建带 VLAN 标记的端口组 (vlan-VLAN_ID-RANDOM_SUFFIX)。
  4. vSAN 初始化:将本地 NVMe SSD 格式化为 vsanDatastore。
  5. VCF 安装程序部署:将 VCF OVA 部署到 target_gce_node 上,注入网络配置,然后启动设备。

执行完成后,停用虚拟环境:

deactivate

部署后任务

运行该工具包并部署 VCF 安装程序设备后,请执行以下部署后配置:

在跳转盒上停用互联网出站流量(可选)

安装 Python 依赖项后,您可以拆除 Cloud NAT,以强制执行严格的出站流量安全措施。在工作站 terraform.tfvars 中:

enable_internet = false

重新应用 Terraform:

terraform apply

在继续之前,请先查看已知问题

在开始 VCF 部署之前,请先查看已知问题页面上记录的所有问题。忽视这些问题可能会导致部署失败。


问题排查

本部分介绍了如何在配置或执行工具包时诊断和解决常见问题。

在跳转盒上检查工具包执行日志

在跳转盒上运行该工具包时,Python 脚本会将详细的执行日志写入跳转盒主目录中的 ~/logs/ 目录。每个日志文件的名称均为 vcf_deployer_TIMESTAMP.log。如果节点准备或 VCF 安装程序部署步骤失败,请检查 ~/logs/ 中最新的 vcf_deployer_*.log 文件,以诊断失败原因。

由于安全系数低的密码,VCF 安装程序部署失败

  • 症状:Python 工具包脚本在 VCF 安装程序部署和初始化期间失败或出现异常行为。
  • 解决方法:请勿在 Secret Manager 中为 VCF 用户输入安全系数低的密码,因为安全系数低的密码可能会导致用于 VCF 安装程序部署的 Python 脚本失败。确保所有密码都符合 Broadcom 密码复杂性准则。

权限遭拒 (roles/iam.serviceAccountTokenCreator)

  • 症状:运行 Terraform 时,服务账号模拟期间出现错误。
  • 解决方法:确保运行 Terraform 的身份在 Terraform 运行器服务账号上拥有 roles/iam.serviceAccountTokenCreator。

IAP SSH 连接失败(403 Forbidden / 超时)

  • 症状:gcloud compute ssh 无法建立 IAP 隧道。
  • 解决方法:
    • 验证 Cloud Identity-Aware Proxy API (iap.googleapis.com) 是否已启用。
    • 确保您的用户身份具有 roles/iap.tunnelResourceAccessor 和 roles/compute.viewer。
    • 验证防火墙规则 allow-iap-ssh-* 是否存在,并允许在 TCP 端口 22 上从 35.235.240.0/20 传入。

重新应用时的子网删除警告(create_subnet 标志)

  • 症状:设置 enable_internet = false 后运行 terraform apply 会尝试销毁子网。
  • 解决方法:如果子网是由 Terraform 创建的,请保留 create_subnet = true。将 create_subnet 更改为 false 会指示 Terraform 停止管理资源,并将其安排为删除。

后续步骤

  • 如果您准备了节点并部署了 VCF 安装程序以进行管理网域部署:
    1. 在 VCF 安装程序中配置与区域离线仓库的连接,以下载所需的软件包:
      • 协议:HTTPS
      • FQDN(请勿使用 IP 地址):offline-depot.REGION.selfmanagedvmwareengine.goog(将 REGION 替换为裸金属节点所在的 Google Cloud区域)
      • 端口:443
      • 用户名:vcf-depot-user
      • 密码:Google1!
    2. 部署管理网域:
      • 如果您使用端到端 Terraform 模块(使用 Terraform 和工具包部署节点和 VCF)预配了 Google Cloud 资源,请使用辅助脚本 (scripts/export_deployment_config.py) 将 management_domain_deployment_input_config Terraform 输出转换为 JSON,将所有标记为 user_should_input 的字段替换为目标值,并将 JSON 文件提供给 VCF 安装程序。
      • 如果您在预配 Google Cloud 资源时未使用端到端 Terraform 模块,请在 VCF 安装程序中手动提供管理网域配置输入。
      • 如需了解如何完成 VCF 安装程序启动工作流,请参阅 Broadcom 文档中的部署新的 VCF 舰队或新的 VCF 实例。
  • 如果您准备了要添加到现有集群的节点:请使用 VMware 界面或 API 将准备好的节点添加到 VMware VCF 9.x 集群。
  • 如需了解如何添加和移除节点,请参阅管理节点容量或使用 Terraform 管理节点容量。