Every chapter of The Lab Manual has GOTCHA boxes: problems I actually hit while building the lab, with the real error and the fix. These five cost me the most time.
1. Public DNS can't see your cluster
The bastion started out with public DNS servers. Public DNS can't resolve your internal cluster names, so openshift-install wait-for and oc couldn't find api.<cluster>.<domain>.
Fix: point the bastion at the internal DNS servers that hold the cluster records.
nmcli connection modify <nic> ipv4.dns "<dns1> <dns2>" nmcli connection up <nic> dig +short api.<cluster>.<domain> 2. No VDDK = slow
Without VDDK, MTV reads disks over HTTPS through vCenter. My 10 GiB test VM took 61 minutes to copy. The log line that gives it away is nbdkit: curl.
Fix: build a VDDK image and set vddkInitImage on the provider. Full walkthrough in part 3 of this series, "VDDK vs No VDDK".
3. NFS disks defaulted to RWO
OpenShift Virtualization didn't recognise my NFS StorageClass, so new VM disks would have been ReadWriteOnce, and live migration would have been impossible.
Fix: tell CDI the right access mode through the StorageProfile.
oc patch storageprofile nfs-csi --type merge \ -p '{"spec":{"claimPropertySets":[{"accessModes":["ReadWriteMany"],"volumeMode":"Filesystem"}],"cloneStrategy":"copy"}}' 4. A deleted project broke oc debug
I'd deleted a scratch project, but my oc context still pointed at it. Then oc debug node/... failed with:
error: unable to get namespace namespaces "nfs-test" not found oc debug creates its temporary Pod in the current project.
Fix: oc project default, or oc debug node/<node> --to-namespace=default. Rule: after deleting a project, run oc project and move off it.
5. MTV rejected the vCenter Secret
The first provider attempt failed in MTV's admission webhook. The Secret had createdForResourceType=providers but not createdForProviderType=vsphere, and MTV rejects one without the other. Both labels must arrive in the same request.
Fix: add both labels before applying.
oc create secret generic vcenter-lab -n openshift-mtv --dry-run=client -o yaml \ --from-literal=user=<user> --from-literal=password=<password> \ --from-literal=url=https://<vcenter>/sdk --from-literal=insecureSkipVerify=true \ | oc label -f - --local -o yaml createdForResourceType=providers createdForProviderType=vsphere \ | oc apply -f - What's your #6?
Each of these is in the free Lab Manual with the full capture. If you've hit something I haven't, open an issue or leave a comment. I'm collecting them for v2.
