Holodeck is an excellent tool for deploying a complete VCF environment in your home lab. It provides a fully nested environment including vCenter, vSAN, and NSX. For a broader overview, check out the details HERE.
The main limitation is that Holodeck is designed to run on a single ESXi host with substantial resources. I don’t have such a high-capacity host, but I do have access to a 3-node cluster.
The Cluster
Three ESXi hosts managed by vCenter with shared storage. Every host has 2 network uplinks, both connected to two switches.
The Holodeck host prep document suggests creating a Standard Switch, which works only for a single host. Distributed switches allows multiple hosts to use the switch as long they exist within the same host cluster. If you plan to use multiple hosts, create a distributed switch and connect all host uplinks to it. I have a trunk port group configured with 10 VLANs. Not all VLANs are necessary, but this setup provides me the flexibility to test various scenarios with NSX.

DRS and HA are enabled in my cluster, holodeck don’t like this but I’ll fix this later.
Holo Console
To create the custom ISO, download all the necessary software and update the “createISO.ps1” script. If you have licenses, you can include them in the file. If the license values are empty, evaluation licenses (valid for 60 days) will be used by default.
If you plan to use different subnets and VLANs, update the createISO.ps1
, holoHosts.txt
, and additionalcommands.bat
files with the new values. You can also add your physical hosts or vCenter to the holoHosts.txt
file, in this case u can use DNS names during deployment.
Upload the ISO and deploy the console VM.
VCF Lab Constructor
Before deployment, the Holo-Site-1-vcf-ems-public.json
file needs to be updated.
- Ensure that the SDDC Manager password meets the minimum requirement of 15 characters, the default password in the file is too short.
- Update all IP addresses and VLANs if you prefer not to use the default subnets.
I wanted to use DNS and NTP on my console VM. To make this working I added an extra variable “cbIPAddress” to the json.
"ntpServers": ["10.x.x.201"], # the ip of my console vm
"cbIPAddress": ["10.x.x.221"], # the ip of my Cloud-Builder vm
VLCGui.ps1
also needs to be updated.
Function parseBringUpFile{
If ($global:Ways -ilike "internalsvcs") {
$txtCBIP.text = $bringupObject.cbIPAddress # Use the new variable created in the json
}
}
Since I didn’t want to disable DRS and HA, I simply commented out the check.
#If ($item.HAEnabled -Or $($item.DrsEnabled -And $item.DrsAutomationLevel -eq "FullyAutomated")) {
# $errArray += "hadrs"
#}
DNS Manager
In my case I’m using windows DNS on my console VM (Domain controller). Cloud builder uses FQDNs to deploy and connect to the environment. Before we can start the deployment, DNS needs some changes.
In DNS manager, create a reverse lookup zone and add the following A-record:
- esxi-1
- esxi-2
- esxi-3
- esxi-4
- sddc-manager
- vcenter-mgmt
- nsx-mgmt
- edge1-mgmt
- edge2-mgmt
Enjoy
These adjustments make it possible to deploy Holodeck on a three-node (or larger) cluster.
Disclaimer: This is not supported by the Holodeck team. Changing the configuration is at your own risk.