VMware & Provisioning Overview

The lab's compute layer is vSphere: a single vCenter (VCSA) managing a cluster of ESXi
hosts (devhome-cl), with everything above the hypervisor — hosts, networking,
datastores, VMs, and Kubernetes clusters — provisioned by Terraform against the
vsphere provider.
See Compute & Storage for the cluster's host/VLAN/datastore layout.
The pipeline, end to end
- Packer builds golden VM templates from ISOs staged on the NAS — Ubuntu, Windows, and the HAProxy appliance used for Kubernetes control-plane load balancing.
- Terraform consumes those templates: it onboards ESXi
hosts into the cluster, wires up networking/storage, and clones VMs — including full
Kubernetes clusters via
kubeadm, orchestrated through a custom module and Ansible provisioners. - Ansible takes over for anything that's ongoing configuration rather than one-time provisioning: cluster start/stop, backups, certificate renewal.
- ArgoCD/Rancher take over once a cluster exists — everything that runs inside a cluster is GitOps-delivered, not provisioned by Terraform.
Terraform directory layout (terraform/vsphere/)
| Directory | Owns |
|---|---|
base/ |
The devhome-cl cluster itself, ESXi host onboarding, the shared workload VDS, NFS datastore mounts |
compute/ |
General-purpose VMs (dev VMs, Windows, dke-mgmt) |
modules/k8s/ |
The reusable kubeadm cluster module — used to stand up new dke-* workload clusters |
modules/argocd-register-clust/ |
Registers a cluster into ArgoCD as a target, given a kubeconfig |
modules/vault-k8s-auth/ |
Wires a cluster's ServiceAccount into Vault's Kubernetes auth method |
supervisor/ |
(Retired) the standalone Tanzu Supervisor stack — its cluster/VDS were folded into base/; only HAProxy/content-library/namespace resources remain relevant if this gets rebuilt |