Part 39 – VCF 9.1 Deployment – Full Walkthrough

In this guide we’re running through the deployment of VCF 9.1, the latest GA drop from May 2026. I’ve covered this pretty heavily in VCF 9.0 and even the old v5 days, but this is a full end‑to‑end deployment of 9.1 to see exactly what’s changed and what hasn’t.

VCF 9.1 — What’s New

VCF 9.1 adds VCF Management Services — a common runtime unifying lifecycle and operational capabilities including the License Server, Software Depot, and Salt RaaS in a consolidated cluster.

ESX — Memory Tiering Software RAID1 mirroring for Memory Tiering is introduced — if one NVMe device fails, the secondary device continues memory tiering, preventing failure regardless of device wear-out

Native S3 Object Storage managed with the same workflows as block and file storage

APIs vCenter now supports OAuth 2.0 API tokens.

DRS & vMotion – Intel QAT offload for encrypted vSphere vMotion reduces source CPU utilization by nearly 67% and destination by nearly 22%, with significantly lower variance in total migration time.

VPC Transit Gateway, Traceflow, and Live Traffic Analysis are now configurable from the vSphere Client,

VAAI-NAS Unmap support added for NFS v4.1, enabling space reclamation for VMs on thin-provisioned NFS v4.1 datastores

VCF 9.1 — Lab Deployment

If you’re planning to try this in the lab, the whole stack will happily chew through around 500 GB of RAM. This entire setup is running on a single physical ESXi host, and for this build I’m using a HP ProLiant DL380 Gen10 with 756 GB RAM.

ComponentSpecification
vCPU34 with HW virtualization turned on
Memory200 GB
DiskNVMe Controller
900 GB
1×25 GB NVMe for ESXi installation
1×40 GB NVMe for vSAN Cache
2×200GB NVMe for vSAN Capacity
1*250GB NVMe vSAN ( Extra Capacity )#
Network4×10 GBPS connected to trunk port group

Management Domain fqdn & Ip Pools

Here is the IP info for my mgmt domain

FQDNIP AddressPurpose
vc9-sddcmgr.ash.local172.16.11.81External SSDC Manager
vcf9-vc.ash.local172.16.11.80Mgmt vCenter
sa-esx01.ash.local172.16.11.101ESX 01
sa-esx02.ash.local172.16.11.102ESX 02
sa-esx03.ash.local172.16.11.103ESX 03
sa-esx03.ash.local172.16.11.104ESX 04
vcf9-ops.ash.local172.16.11.71VCF Ops
vcf9-fs.ash.local172.16.11.72VCF Ops Fleet Services
vcf9-cp.ash.local172.16.11.84VCF Cloud Proxy
vcf9-ls.ash.local172.16.11.85License Server
vcf9-nsx.ash.local172.16.11.86NSX VIP
vcf9-nsx01.ash.local172.16.11.87NSX Node 1
vcf9-nsx02.ash.localXXXNSX Node 2
vcf9-nsx03.ash.localXXXNSX Node 3
vcf-edge01.ash.localXXXNSX Edge 1
vcf-edge02.ash.localXXXNSX Edge 2
vcf9-is.ash.local172.16.11.73VCF Instance Services FQDN
vcf9-ib.ash.local172.16.11.74Identity Broker
vcf9-sr.ash.local172.16.11.77VCF Service Runtime FQDN
vcf9-at.ash.local172.16.11.78VCF Automation
vcf9-atsr.ash.local172.16.11.79VCF Auto Services Runtime FQDN
172.16.11.200-220VCF Mgmt Service IP Pool
172.16.11.235-240VCF Automation IP range
placeholderVCF Logs
placeholderVCF VRNI
VCF Ops Networks Collector

VCF 9.1 Bill of Materials

https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vcf-9-0-and-later/9-1/release-notes/vmware-cloud-foundation-9-1-0-0-release-notes/vmware-cloud-foundation-bill-of-materials.html

VCF 9.1 Deployment Mandatory Pre Install Checklist

Host Configuration

The hosts are setup as shown

Set Certificates, Hostname and NTP

Before doing anything else, get the basics sorted. Set the hostname, generate the certificates, and make sure NTP is actually working — not “should be working”, but is working.

NTP needs to be configured and syncing cleanly. If NTP is off, VCF will fall over later and you’ll waste time chasing pointless errors.

The ESXi certificate must use the FQDN, and it must be lowercase. No exceptions.

Hostname should match the FQDN exactly — again, all lowercase.

JavaScript
# Specify at least one of: --host, --domain, --fqdn
esxcli system hostname set --host=sa-esx02
esxcli system hostname set --fqdn=sa-esx02.ash.local
# Generate Certificates 
/sbin/generate-certificates
ls -l /etc/vmware/ssl/

# Deploment for nested lab

esxcli software acceptance set --level CommunitySupported
Host acceptance level changed to 'CommunitySupported'.
esxcli software vib install -v /nested-vsan-esa-mock-hw.vib --no-sig-check

esxcli software vib install -v /vmfs/volumes/2999b9f4-c0675609/vib20/nested-vsan-esa-mock-hw/williamlam.com_bootbank_nested-vsan-esa-mock-hw_1.0.0-1.0.vib
esxcli storage nfs remove -v NFS2

# Conifgure ntp
 esxcli system ntp set --server 172.16.11.10 --enabled true
 /etc/init.d/ntpd start
 chkconfig ntpd on
 esxcli system ntp get
ntpq -p

If you’re running this on hardware that VCF/ESXi 9.1 doesn’t officially like, you’ll need to add the CPU override flags into boot.cfg so the installer doesn’t bail out.

Add the following options to the boot.cfg kernel line:

allowLegacyCPU=true
ignoreUnsupportedCPU=true

ESX must have ‘VM network’ and ‘Management network’ VLAN id of mgmt configured as shown

Below is my base ESXi host and the list of VMs currently running on it.

Verify vmnic alignment

On some servers, especially older Gen9/Gen10 boxes or anything running quirky PCI layouts, the vmnic numbering doesn’t always line up with the actual PCI devices. VCF won’t care until NSX comes into play — then it becomes a problem.

Use esxcli network nic list to confirm vmnic → MAC → PCI mapping.

JavaScript
for i in 0 1 2 3 4 5 6 7; do
echo "=== vmnic$i ==="
localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias list | grep "vmnic$i$"
done

The pci and logical numbers should clearly match.

JavaScript
localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias list > /tmp/alias_backup_$(date +%F).txt

Fix commands for physical devices

localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias store --alias vmnic0 --bus-address s00000002:03.00 --bus-type pci

Fix commands for logical devices

localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias store --alias vmnic0 --bus-address pci#s00000002:03.00#0 --bus-type logical

Network Requirements

For this deployment we’re sticking with the usual VCF networking expectations. Jumbo Frames (MTU 9000) are recommended across all VLANs, but at an absolute minimum you need 1600 MTU for NSX‑T overlays to function. Anything lower and you’ll hit packet drops the moment Geneve traffic shows up.

These are the port groups we’ll be creating for the VCF bring‑up, and because this is a nested vCloud Foundation setup, you need all the virtual networks in place before Cloud Builder even gets a look in.

A nested vCloud Foundation deployment requires multiple virtual networks to be in place before we can start the deployment. As part of this deployment, we’ve bgp configured on the vyOS tor routers.

Network TypeVLANPortGroup
Management Network1611pg-mgmt-1611
vMotion Network1612pg-vMotion-1612
vSAN Network1613pg-vSan-1613
NSX-T-Host Overlay1634pg-host-overlay-1634
NSX-T-edge-uplink-12711pg-nsx-t-edge-overlay
NSX-T-edge-overlay2713pg-nsx-t-edge-overlay
SDDC-vcF-TRUNK4095Trunk Port

VCF Installer

Download and deploy the OVA from the VMware portal. The process is the same as any standard OVA deployment. Note that the appliance requires an admin password with at least 15 characters.

For this setup, the installer appliance is deployed on VLAN 1611, giving it access to the domain controller and all ESXi hosts. As long as routing and VLAN tagging are correct, Cloud Builder will see everything it needs.

Make sure NTP sync is configured properly on the VCF installer. This is one of the most common failure points.

Cloud Builder is extremely sensitive to time drift — if the clock between the installer and the ESXi hosts drifts by more than ~30 seconds, the deployment can fail with completely unhelpful errors.

William Lam has documented quite a lot of hot fixes that can be applied . A few of them I used are here.

JavaScript
# Increase VCF Management Services Deployment Timeout
echo "vsp.bootstrap.task.timeout.minutes = 240" >> /etc/vmware/vcf/domainmanager/application.properties
echo "vsp.bootstrap.command.timeout.minutes = 200" >> /etc/vmware/vcf/domainmanager/application.properties

# Increase General Retry
echo "orchestrator.task.retry.max = 5" >> /etc/vmware/vcf/domainmanager/application.properties

# Increase NSX Manager Timeout
echo "nsxt.manager.wait.minutes = 180" >> /etc/vmware/vcf/domainmanager/application.properties

# Increase NSX Edge Timeout
echo "edge.node.vm.creation.max.wait.minutes = 90" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable 10GbE pNIC Check
echo "enable.speed.of.physical.nics.validation = false" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable vSAN ESA HCL Check
echo "vsan.esa.sddc.managed.disk.claim = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable vMotion Connectivity Check
echo "validation.disable.vmotion.connectivity.check = true" >> /etc/vmware/vcf/domainmanager/application.properties
echo "validation.disable.vmotion.l3.gateway.connectivity.check = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable vSAN Connectivity Check
echo "validation.disable.vsan.connectivity.check = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable TEP MTU Check
echo "validation.disable.network.connectivity.check = true" >> /etc/vmware/vcf/domainmanager/application.properties
echo "nsxt.mtu.validation.skip = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Disable NFS Connectivity Check
echo "validation.disable.nfs.configuration.connectivity.check = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Single Node AVI Load Balancer
echo "feature.vcf.vgl-41078.alb.single.node.cluster = true" >> /etc/vmware/vcf/domainmanager/application.properties

# Restart domainmanager
systemctl restart domainmanager

Also add to operationsmanager (needed for vSAN ESA HCL and 10GbE checks):

JavaScript
echo "enable.speed.of.physical.nics.validation = false" >> /etc/vmware/vcf/operationsmanager/application-prod.properties
echo "vsan.esa.sddc.managed.disk.claim = true" >> /etc/vmware/vcf/operationsmanager/application-prod.properties
systemctl restart operationsmanager

And feature.properties (for single host and vSAN ESA):

JavaScript
echo "feature.vcf.vgl-29121.single.host.domain = true" >> /home/vcf/feature.properties
echo "feature.vcf.vgl-43370.vsan.esa.sddc.managed.disk.claim = true" >> /home/vcf/feature.properties
echo 'y' | /opt/vmware/vcf/operationsmanager/scripts/cli/sddcmanager_restart_services.sh

VCF Installer – Initial Login

Log in to the VCF Installer VM using the web UI and move past the initial welcome screen. URL for this setup:

https://vcfinstaller.ash.local

Once you’re in, the first thing the installer will complain about is software binaries. VCF needs either:

  • a configured download token in the depot settings, or
  • an offline depot already uploaded.

If you haven’t generated a token yet, follow the VMware instructions and create one — you’ll need it for the automated bundle downloads.

From the main screen, click: Depot Settings and Binary Management. This is where you add your token, confirm connectivity, and verify that Cloud Builder can actually pull the required bundles before you move on.

From the Depot Settings and Binary Management page, click the Connect to the Online Depot widget, then hit Configure.

Copy the service ID from the VCF Installer screen, then head over to: vcf.broadcom.com

Paste the service ID into the registration field and click Register. This links your Cloud Builder instance to the online depot so it can actually pull the bundles.

Click Software depot registration and click new registration

Take the activation code you generated on the Broadcom portal and paste it into the Activation Code field in the VCF Installer. Once it’s in, click Authenticate.

If the code is valid, the installer will confirm the connection and you’ll see the depot status change to authenticated.

Our service-id is registered

Once the activation code is authenticated and the depot connection shows as valid, click Download All.

On the Deploy Wizard, click VMware Cloud Foundation

Click Next

Since I am performing a greenfield deployment, I selected the first option to deploy a new VCF fleet. If you already have an existing VCF fleet and want to scale your environment, choose the second option to deploy an additional VCF instance into the existing fleet.

If you are performing a brownfield deployment and need to import VCF Operations or VMware vCenter, select the corresponding option.

Select the Simple Deployment option and move on.

For the VPC Gateway Connectivity option, select Centralized Connectivity. This keeps the routing simple and avoids any of the distributed or advanced topologies that aren’t needed for this build.

Select principle storage type: vSAN, VMFS on Fibre Channel, or NFS v3.

Review and click proceed

You can either prefill this section using an exported JSON from a previous deployment, or just enter everything one field at a time. For this lab we’re entering the values manually.

These are the parameters you need to provide:

  • VCF version — Select the version matching the bundles you downloaded.
  • VCF instance name — Lowercase only, no spaces, no uppercase.
  • Management domain name — This becomes the SDDC Manager domain.
  • Deployment model — Single or HA. For this lab: single.
  • DNS domain name — Must match your environment’s FQDN structure.
  • DNS servers — Forward and reverse lookup must work.
  • NTP servers — Must be reachable and in sync with Cloud Builder and ESXi.

Enter the root password and FQDN for each ESXi host in the management domain.

Navigate back to the home screen to launch the deployment wizard. Depending on your use case, you can choose to deploy either VMware Cloud Foundation or vSphere Foundation.

Here we need 12 IPs for current scope or 30 IPs to allow for more components like VCF automation etc and auto-scaling for these VCF Management Services and automation so just reserve 30 IP’s

Choose vMotion Network (VLAN 1612): 172.16.12.0/24 and vSAN Network (VLAN 1613): 172.16.13.0/24

Host Tep Pool Network (VLAN 1634): 172.16.34.0/24

Enter the FDQN values for these here

  • VCF Operations Collector Appliance FQDN
  • VCF Operations License Server FQDN
  • VCF Fleet Services
  • VCF Insatance services FQDN
  • VCF Cloud proxy FQDN
  • Identity Broker FQDN
  • VCF AutomationFQDN
  • VCF Automation Services Runtime

Enter the vCenter and cluster details

In my setup we have 6 NIC’s so i’ll pick Storage Traffic And NSX Traffic Separation adn this will spin up 3 vDS

Leave everything as default

Enter the FQDN for the NSX VIP and NSX Mgr

Here we are deploying a new vcf installer

Click review

Runn all validations

After successful validation click deploy to start the deployment. The deployment takes few hours to complete.

Once deployment is complete, download the JSON specification and the passwords.

Here are the list of VM’s deployed

Login via VCFOps to validate everything.

vCF Build Logs

The location of the log file is /var/log/vmware/vcf/domainmanager in the VCF Installer VM. This file will give you a live update of the deployment and any errors if any

Bringup logs ( VCF Installer):

/var/log/vmware/vcf/bringup/vcf-bringup-debug.log

SDDC Manager (VCF 9.x):

/var/log/vmware/vcf/domainmanager/domainmanager.log

VCF Fleet Management:

/var/log/vrlcm/vmware_vrlcm.log

Collect all logs via SOS bundle:

# All logs
/opt/vmware/sddc-support/sos --collect-all-logs --zip

# VCF Installer logs only
/opt/vmware/sddc-support/sos --vcf-installer-logs --zip

# SDDC Manager logs only
/opt/vmware/sddc-support/sos --sddc-manager-logs --zip
(Visited 394 times, 4 visits today)

By Ash Thomas

Ash Thomas is a seasoned IT professional with extensive experience as a technical expert, complemented by a keen interest in blockchain technology.