The Second Cluster, As Built
Four Intel hosts on NFS, added to the management vCenter as pgvcf1-cl02 — built directly in vCenter, not by SDDC Manager, and why.
VCF 9.1.1 lab rebuild. Part of the follow-along guide, published live as the build happens.
📘 Official documentation. This is a lab walkthrough, not a replacement for the vendor docs. For the authoritative, supported procedures, follow Broadcom’s VMware Cloud Foundation 9.1 documentation. Where this guide and the official docs differ, the official docs win.
Where we are: after the VNA cluster. The management cluster, pgvcf1-cl01, is up on vSAN ESA with distributed VPC connectivity. This page adds the four Intel hosts as a second cluster in the same vCenter, on NFS.
Status: built and healthy, 2026-09-19. Every figure on this page was read from vCenter after the build, not carried over from a plan.
What is built
| vCenter | vc.pgvcf1.pgnet.io, 9.1.1.0 build 25712839 |
| Datacenter / cluster | pgvcf1-dc01 / pgvcf1-cl02 |
| Hosts | 4 — pgesxi1 to pgesxi4, ESX 9.1.1 build 25714478 |
| Capacity | 28 cores; 1533 GiB memory as vCenter reports it, which includes NVMe memory tiering where it is enabled |
| vSphere HA | On — admission control on, host monitoring on; one primary, three connected |
| vSphere DRS | On — fully automated |
| EVC | intel-haswell |
| Lifecycle | vSphere Lifecycle Manager image, base image 9.1.1.0.25714478 — the same image as pgvcf1-cl01 |
| Principal storage | pgnas-core-cl02, NFS v3 |
| Standard switches | None — every VMkernel adapter and the uplink are on the distributed switch |
| VMs | 0 |
Hosts
| Host | CPU | Cores | Memory (vCenter) | Management | Uplink on the switch |
|---|---|---|---|---|---|
pgesxi1 | Intel Core i9-12900H (12th gen) | 6 | 383 GiB | 10.128.1.230 | vmnic1, 10 Gb/s |
pgesxi2 | Intel Core i7-11700KF (11th gen) | 8 | 512 GiB | 10.128.1.232 | vmnic1, 10 Gb/s |
pgesxi3 | Intel Core i7-12700K (12th gen) | 8 | 511 GiB | 10.128.1.234 | vmnic1, 10 Gb/s |
pgesxi4 | Intel Core i5-12400 (12th gen) | 6 | 128 GiB | 10.128.1.236 | vmnic1, 10 Gb/s |
EVC
The cluster mixes 11th-generation (Rocket Lake) and 12th-generation (Alder Lake) parts, so it needs an EVC baseline. The baseline here is derived, not chosen. vCenter reports each host’s ceiling as maxEVCModeKey, its supportedEVCMode list is ordered oldest to newest, and the cluster baseline is the lowest of the hosts’ ceilings by that order. All four hosts report intel-haswell. It was set while the cluster held no VMs.
Networking
Where: vCenter › Networking.
One distributed switch, pgvcf1-cl02-vds01, set up to match the switch SDDC Manager built for pgvcf1-cl01: version 9.1.0, MTU 9000, Network I/O Control on, LLDP advertise and listen. It defines uplink1 and uplink2. Only uplink1 is populated, with vmnic1 on every host.
| Port group | VLAN | Binding | Teaming |
|---|---|---|---|
pgvcf1-cl02-vds01-pg-esx-mgmt | 1001 | Ephemeral | Load-based |
pgvcf1-cl02-vds01-pg-vmotion | 1105 | Early binding, auto-expand | Load-based |
pgvcf1-cl02-vds01-pg-nfs | 1104 | Early binding, auto-expand | Load-based |
VMkernel adapters
Every adapter is MTU 9000 with a static address. The vMotion and NFS addresses reuse the host’s management last octet. That keeps them outside .100–.199, the range the SDDC Manager network pool pgvcf1-np02 owns.
| Host | vmk0 management | vmk1 vMotion | vmk2 NFS |
|---|---|---|---|
pgesxi1 | 10.128.1.230 | 10.129.5.230 | 10.129.4.230 |
pgesxi2 | 10.128.1.232 | 10.129.5.232 | 10.129.4.232 |
pgesxi3 | 10.128.1.234 | 10.129.5.234 | 10.129.4.234 |
pgesxi4 | 10.128.1.236 | 10.129.5.236 | 10.129.4.236 |
- vMotion is on the dedicated
vmotionTCP/IP stack, with its own default gateway,10.129.5.1.pgvcf1-cl01’s vMotion network is a different subnet —10.129.2.0/24on VLAN 1102 — so vMotion between the clusters is routed, and the gateway on the vMotion stack is what gives it a route. - NFS is on the default stack. The storage server is
10.129.4.10, in the same subnet, so storage traffic is one layer-2 hop and never uses the management VMkernel.
Storage
Six NFS v3 datastores, all mounted read-write from the NAS’s storage-VLAN address, 10.129.4.10.
| Datastore | Mounted on | Tier | NAS snapshots |
|---|---|---|---|
pgnas-core-cl02 | pgvcf1-cl02 (4 hosts) | Fast | No |
vcf-primary | Both clusters (8 hosts) | Fast | No |
vcf-supervisor | Both clusters (8 hosts) | Fast | No |
vcf-secondary | Both clusters (8 hosts) | Bulk | Yes — daily, kept two weeks |
vcf-content | Both clusters (8 hosts) | Bulk | Yes — daily, kept two weeks |
vcf-images | Both clusters (8 hosts) | Bulk | No |
One server address per share, on every host. vCenter identifies an NFS datastore by server and path. The NAS also answers on the management subnet, at 10.128.1.110. The same share mounted through that address on one host and through 10.129.4.10 on another becomes two datastores, and vMotion and HA do not work between them. Each of the five shared datastores here is a single vCenter object, mounted on all eight hosts.
pgvcf1-cl01 reaches the same storage VLAN through a port group, pgvcf1-cl01-vds01-pg-nfs on VLAN 1104, and one VMkernel per host: 10.129.4.220, .222, .224 and .226.
Tags and folder
The six datastores sit in the datastore folder tenancy/pgnet-core and carry seven tags. Each category is single-cardinality and can be attached to datastores only.
| Category | Value |
|---|---|
tenant | pgnet-core |
owner | pgnet-admin |
storage-type | truenas-nfs |
storage-system | The NAS’s hostname |
storage-snapshot-owner | pgnet-core |
storage-tier | fast or bulk — derived from the NAS pool in the export path |
storage-snapshot | true or false — whether an enabled periodic snapshot task on the NAS covers the dataset |
These tags are descriptive. Workload placement uses a separate storage-use category, which tag-based storage policies read.
How it was built
Three scripts, each idempotent — a second run reports nothing to do — and each a dry run unless --apply is given. They are in the build repo and not published yet.
uv run --group vsphere scripts/cl02_vcenter_build.py --apply # cluster, switch, hosts, uplink move, VMkernels, storage, EVC, HA/DRS
uv run --group vsphere scripts/nfs_storage.py --apply # NFS port group and VMkernel where missing, and the shared mounts, both clusters
uv run --group vsphere scripts/datastore_tags.py --apply # tag categories, tags, datastore folder
cl02_vcenter_build.py runs in stages: cluster, vds, hosts, migrate, vmk, storage, evc, ha.
The migrate stage moves a host’s only uplink. vmnic1 and vmk0 move to the distributed switch in a single UpdateNetworkConfig call made through vCenter, so vCenter’s network rollback covers the whole move: if the host loses contact, the change is reverted. It was run on one host, checked, then run on the other three. Management connectivity was not interrupted on any host. The empty vSwitch0 was removed afterwards.
nfs_storage.py sends an 8972-byte ping with the don’t-fragment bit set to the storage server before it mounts anything, and stops if the ping fails. A mount over a VLAN that does not carry MTU 9000 succeeds and then performs badly. The ping fails immediately.
Evidence
| Check | Result |
|---|---|
| Hosts connected, not in maintenance mode | 4 of 4 |
| HA agent state | 1 primary, 3 connected to it |
vMotion stack, 8972 bytes with DF set, every host pair in pgvcf1-cl02 | 6 of 6, no loss |
vMotion stack, 1472 and 8972 bytes with DF set, each host to pgvcf1-cl01 at 10.129.2.100 (routed) | 8 of 8, no loss |
NFS VMkernel to 10.129.4.10, 8972 bytes with DF set | 8 of 8 hosts, no loss |
| Each shared datastore is one vCenter object | 5 of 5, none inaccessible, no duplicate names |
| Read-write access to the principal-storage export, per host — mount, create, delete, unmount | 4 of 4 |
| A second run of each script | Nothing to do |
Lab-only conditions
| What | Note |
|---|---|
| Consumer CPUs, and mixed generations in one cluster | None of these hosts is on the hardware compatibility guide |
| A single 10 Gb/s uplink per host | vCenter reports “no management network redundancy” on every host. A link or switch-port failure isolates that host |
pgesxi4 loads a community driver for its onboard Realtek NIC | The port is not used by the switch. A Lifecycle Manager remediation against the cluster image would remove a component that is not in the image |
Limitations of this cluster
It was built in vCenter and is not managed by SDDC Manager. The four hosts are not commissioned there and the cluster is not in its inventory. In practice:
- No VCF lifecycle for the cluster. Upgrades are driven from vCenter’s Lifecycle Manager, not from SDDC Manager.
- No SDDC Manager credential rotation for these hosts.
- SDDC Manager did not prepare the hosts for NSX. In 9.1 that is started from vCenter, and it was done by hand on 2026-09-19: all four hosts are NSX transport nodes with tunnel endpoints on VLAN 1305. The inputs, the result and the evidence are on the next page. Anything SDDC Manager would re-apply or reconcile on a cluster it prepared, it does not do here.
- A day-2 change to a switch SDDC Manager owns. The NFS port group and VMkernels added to
pgvcf1-cl01’s switch are not known to SDDC Manager.
Why SDDC Manager could not build it
SDDC Manager’s add-cluster workflow validates vMotion and NFS connectivity before it creates anything. Each validator builds a temporary standard switch on the host, and needs a free physical NIC taken from the NICs named in the cluster specification. On these hosts the only NIC that can be named is vmnic1, and it carries management:
No physical NIC could be attached to vSwitch 'pgvcf1-cl02-vds01' on host pgesxi1.pgnet.io. All candidate PNICs
[vmnic1] are already in use by other virtual switches. Verify that the active/standby uplink NICs for the 'NFS'
network are not exclusively consumed by the management vSwitch (vSwitch0).
A second NIC cannot simply be added to the specification, because the specification validator requires:
- The same
vmnicnames mapped to the same switch and uplink on every host. Otherwise: “Vmnic to vds association is not same across given set of hosts”. - Every NIC at least 10 Gb/s, or at least 1 Gb/s if it connects only to a management network.
These hosts have one cabled 10 Gb/s port each, and their spare ports differ from host to host in name and speed. pgesxi1 and pgesxi4 have a second 10 Gb/s port named vmnic0. pgesxi2’s second 10 Gb/s port is vmnic2, because its onboard 1 Gb/s NIC holds vmnic0. pgesxi3 has a single-port 10 Gb/s card.
The documentation states that a host with a single physical NIC is supported:
Hosts can have a single physical NIC or multiple physical NICs. For hosts with multiple physical NICs, only one can be connected to a standard switch.
Commissioning accepts a single-NIC host. The add-cluster validators on 9.1.1 do not run on one.
📖 Reference — VMware Cloud Foundation 9.1 documentation. Building Cloud Infrastructure › Managing ESX Hosts in VMware Cloud Foundation, pp. 2665–2672: the single-NIC statement above. Create a New Workload Domain, pp. 2674–2681: “Each host must have at least one physical NIC, connected to a standard switch.” Add an SDDC Cluster to a VCF Domain, pp. 2700–2708: the Skip failed hosts during cluster creation option. The validator messages are quoted from the product.
Plan to rectify
- Uniform dual 10 Gb/s on every host — the same two
vmnicnames on each, both cabled and trunked with VLANs 1001, 1104, 1105, 1305 and 4000 at MTU 9000. Optics and converters were ordered on 2026-09-19.pgesxi2needs its 10 Gb/s ports to enumerate asvmnic0andvmnic1, andpgesxi3needs a second 10 Gb/s port. - Prove each new link, with a check that tests a VLAN through one named NIC on a throwaway switch.
- Re-add the hosts through SDDC Manager. Evacuate the cluster and remove it from vCenter, commission the hosts against the network pool
pgvcf1-np02— vMotion on VLAN 1105, NFS on VLAN 1104, kept for this — and create the cluster with both NICs in the specification andskipFailedHostsset tofalse.
The 9.1 documentation describes importing a whole vCenter as a workload domain. It does not describe adopting one cluster, built by hand, into a vCenter that SDDC Manager already manages. So step 3 rebuilds the cluster’s membership rather than converting it in place. The names, addressing, switch layout and storage on this page are the ones SDDC Manager’s own build would produce, so workloads and tenancy configuration that refer to them carry over.
📖 Reference — VMware Cloud Foundation 9.1 documentation, Building Cloud Infrastructure › Import an Existing vCenter to Create a Workload Domain, pp. 2688–2695, Table 977 Supported Configurations: a vSphere Distributed Switch 8.0 or later, statically assigned VMkernel addresses, a dedicated network for vMotion, a datastore shared across and writable by all hosts in the cluster, and clusters using vSphere Lifecycle Manager images.
About the references
Page numbers are from the September 2026 build of the VMware Cloud Foundation 9.1 PDF. Broadcom rebuilds the PDF from time to time and the page numbers move, so each reference also gives the section name.