In my lab I am going to have a physical VCF environment for my training and testing purposes but will also have the capability to stand up nested VCF and VVF environments to aid in troubleshooting or testing for customer related projects. I have come to find that having this setup has been invaluable to me during my time at VMware.
Since the VCF requirements are for 3 physical hosts, I am going to have modify my VCF installer appliance which is not a supported configuration so it is run at your own risk. Luckily William Lam is already ahead in this and has a blog post that assist with this type of modification
Deploying VCF 9.0 on a single host
One caveat to running this type of deployment is that it must be a JSON install, I initially used the VCF GUI deployment and add 2 nested hosts to my initial install to build out the JSON I need. There are many ways to accomplish this and I have been working on a JSON builder for 9.0 but its slow going so far as time allows.
Below is a sample JSON for VCF management domain deployment if you wanted to build your own
{
“sddcId”:”vcf”,
“vcfInstanceName”:”vcf-mgmt”,
“workflowType”:”VCF”,”version”:”9.0.0.0″,
“skipEsxThumbprintValidation”:true,
“ceipEnabled”:false,
“dnsSpec”:{“nameservers”:[“xxx.xxx.xxx.xxx”,”xxx.xxx.xxx.xxx”],”subdomain”:”local”},
“ntpServers”:[“time.google.com”],
“vcenterSpec”:{
“vcenterHostname”:”vcm.local”,
“rootVcenterPassword”:”password”,
“vmSize”:”small”,
“storageSize”:””,
“adminUserSsoPassword”:”password”,
“ssoDomain”:”vsphere.local”,
“useExistingDeployment”:false},
“clusterSpec”:{
“failuresToTolerate”: 0,
“clusterName”:”vcf-mgmt-cl01″,
“datacenterName”:”vcf-mgmt”},
“datastoreSpec”:{“vsanSpec”:{“esaConfig”:{“enabled”:true},
“datastoreName”:”vcf–mgmt-vsan01″}
},
“nsxtSpec”:{
“nsxtManagerSize”:”medium”,
“nsxtManagers”:[{“hostname”:”nsxm1.local”}],
“vipFqdn”:”nsxm.local”,
“useExistingDeployment”:false,
“nsxtAdminPassword”:”password”,
“nsxtAuditPassword”:”password”,
“rootNsxtManagerPassword”:”password”,
“skipNsxOverlayOverManagementNetwork”:true,
“ipAddressPoolSpec”:null,
“transportVlanId”:”510″
},
“vcfOperationsSpec”:{
“nodes”:[{“hostname”:”ops.local”,”rootUserPassword”:”password”,”type”:”master”}],
“adminUserPassword”:”password”,
“applianceSize”:”small”,
“useExistingDeployment”:false,
“loadBalancerFqdn”:null},
“vcfOperationsFleetManagementSpec”:{
“hostname”:”fleet.local”,
“rootUserPassword”:”password”,
“adminUserPassword”:”password”,
“useExistingDeployment”:false},
“vcfOperationsCollectorSpec”:{
“hostname”:”collector.local”,
“applicationSize”:”small”,
“rootUserPassword”:”password”,
“useExistingDeployment”:false},
“vcfAutomationSpec”:{
“hostname”:”auto.local”,
“adminUserPassword”:”password”,
“ipPool”:[“xxx.xxx.xxx.51″,”xxx.xxx.xxx.52”],
“nodePrefix”:”vcfa”,
“internalClusterCidr”:”198.18.0.0/15″,
“useExistingDeployment”:false},
“hostSpecs”:[{
“hostname”:”dell1.local”,
“credentials”:{“username”:”root”,”password”:”password”},
“sslThumbprint”:”A2:1F:57:A1:96:24:77:7E:E3:BA:F3:E0:70:CA:2F:7B:7C:A2:3F:F2:99:68:03:D0:70:7D:2B:D0:B1:88:7A:1F”}],
“networkSpecs”:[
{“networkType”:”MANAGEMENT”,
“subnet”:”xxx.xxx.xxx.0/27″,
“gateway”:”xxx.xxx.xxx.1″,
“subnetMask”:null,
“includeIpAddress”:null,
“includeIpAddressRanges”:null,
“vlanId”:”110″,
“mtu”:1500,
“teamingPolicy”:”loadbalance_loadbased”,”activeUplinks”:[“uplink1″,”uplink2”],
“standbyUplinks”:[],
“portGroupKey”:”vcf-mgmt”},
{“networkType”:”VM_MANAGEMENT”,
“subnet”:”xxx.xxx.xxx.0/25″,
“gateway”:”xxx.xxx.xxx.1″,
“subnetMask”:null,
“includeIpAddress”:null,
“includeIpAddressRanges”:null,
“vlanId”:”201″,
“mtu”:1500,
“teamingPolicy”:”loadbalance_loadbased”,”activeUplinks”:[“uplink1″,”uplink2”],
“standbyUplinks”:[],
“portGroupKey”:”vcf-vm-mgmt”},
{“networkType”:”VMOTION”,
“subnet”:”xxx.xxx.xxx.32/27″,
“gateway”:”xxx.xxx.xxx.33″,
“subnetMask”:null,
“includeIpAddress”:null,
“includeIpAddressRanges”:[{“startIpAddress”:”xxx.xxx.xxx.34″,”endIpAddress”:”xxx.xxx.xxx.62″}],
“vlanId”:”111″,
“mtu”:”9000″,
“teamingPolicy”:”loadbalance_loadbased”,”activeUplinks”:[“uplink1″,”uplink2”],
“standbyUplinks”:[],”portGroupKey”:”vcf-vmotion”},
{“networkType”:”VSAN”,
“subnet”:”xxx.xxx.xxx.64/27″,
“gateway”:”xxx.xxx.xxx.65″,
“subnetMask”:null,
“includeIpAddress”:null,”includeIpAddressRanges”:[{“startIpAddress”:”xxx.xxx.xxx.66″,”endIpAddress”:”xxx.xxx.xxx.94″}],
“vlanId”:”112″,
“mtu”:”9000″,
“teamingPolicy”:”loadbalance_loadbased”,”activeUplinks”:[“uplink1″,”uplink2”],
“standbyUplinks”:[],
“portGroupKey”:”vcf-vsan”}],
“dvsSpecs”:[{“dvsName”:”vcf-mgmt-vds01″,
“networks”:[“MANAGEMENT”,”VM_MANAGEMENT”,”VMOTION”,”VSAN”],
“mtu”:9000,
“nsxtSwitchConfig”:{“transportZones”:[{“transportType”:”OVERLAY”,”name”:”vcf-mgmt-overlay-tz”}]},
“vmnicsToUplinks”:[{“id”:”vmnic2″,”uplink”:”uplink1″},{“id”:”vmnic3″,”uplink”:”uplink2″}],
“nsxTeamings”:[{“policy”:”FAILOVER_ORDER”,”activeUplinks”:[“uplink1″,”uplink2”],
“standByUplinks”:[]}],
“lagSpecs”:null}],
“sddcManagerSpec”:{“hostname”:”sddc.local”,”useExistingDeployment”:false,”rootPassword”:”password”,”sshPassword”:”password”,”localUserPassword”:”password”}}
After running through the JSON deployment in the VCF installer, the only other issue I ran into was the vSAN storage policy caused any error but my original JSON file didn’t have the “failuresToTolerate” option listed and was trying to build a policy with redundancy enabled which doesn’t work for a single host deployment.
I simply changed the vSAN storage policy manually in the vCenter and restarted the deployment.
