, ,

Preparing VCF 9 and Enabling the vSphere Supervisor (TKGI to VKS Series, Part 12)

The first hands-on step of the migration: stand up the vSphere Supervisor on VCF 9 beside your TKGI estate, with the design calls, the exact commands, and the failures that stall activation.

TKGI to VKS Series · Part 12 of 26

Zero BOSH directors. That is the shift this part is about. On TKGI, short for Tanzu Kubernetes Grid Integrated, you built a cluster by asking a BOSH director, the release and lifecycle engine, to assemble VMs from a stemcell while Tanzu Operations Manager stitched the tile together. On VCF 9 you switch on a capability that already lives inside the ESX hypervisor, and about 47 minutes later you hold a Kubernetes control plane with no separate lifecycle stack to babysit.

Key takeaways:
VKS begins with the vSphere Supervisor, a Kubernetes control plane embedded in ESX and enabled per workload domain, not a BOSH deployment.
You choose the zone model, control plane availability, and load balancer at activation, and the zone choice is permanent while control plane HA can be scaled later.
From VCF 9 the Supervisor Kubernetes releases ship through a subscribed content library, separate from vCenter.
Headline command: kubectl vsphere login –server=sup01.corp.local –vsphere-username administrator@vsphere.local
Log in by fully qualified name, never by raw IP, or the virtual IP certificate check fails on the name mismatch.
Who this is for: You run a TKGI 1.18 estate on NSX-T with dev, staging, and prod clusters, and you already have a VI workload domain built on VCF 9 with vCenter, ESX hosts, a distributed switch, and datastores in place. This part stands up the first Supervisor beside TKGI. It does not move a single workload yet.

Where the migration stands now

Parts 5 through 11 inventoried the TKGI estate and drew the VCF 9 target. Our reference migration is fixed: a production TKGI 1.18 estate on NSX-T with three clusters, UAA and LDAP authentication, a Harbor registry, NSX-T load balancing, one stateful application built from a web tier and PostgreSQL on persistent volumes, plus a couple of stateless services. Phase 3 starts here, and the first move is standing up the platform that will receive those workloads. Nothing about TKGI changes in this part. That is the core of the whole series: this is a migration onto a platform running beside the old one, not an in place upgrade of it. There is no path that turns BOSH and Ops Manager into a Supervisor.

The Supervisor is the Kubernetes control plane that VMware embeds directly into ESX. Each ESX host runs an agent called the Spherelet, which registers the host as a Kubernetes worker node. Enable the Supervisor and you get a conformant Kubernetes API from which vSphere Kubernetes Service, or VKS, provisions the guest clusters your applications actually land on. We covered the runtime mechanics in the standalone VKS Series, so this part spends its energy on the migration angle, the design calls, and the failures that stall an activation. For the full target picture, keep the series guide open in a tab.

One more framing before the commands. On TKGI, a cluster create meant a BOSH director building three to five VMs from a stemcell, often 20 to 30 minutes per cluster, on top of the Ops Manager apply that preceded it. Here the control plane is a property of the workload domain, so the 47 minute activation is a one time cost, not a per cluster tax. Every VKS guest cluster you create afterward is a Kubernetes object the Supervisor reconciles in minutes, with no director to resurrect and no tile to re apply. That single structural change, control plane as a platform capability rather than a deployed release, is why the day 2 model later in this series looks nothing like BOSH.

Prerequisites and preflight checks

Most failed activations I have seen were decided before anyone clicked Enable. Supervisor activation is fussy about routing, naming, and time. Walk this list first, because a stuck control plane at hour two usually traces back to one missing route or one absent DNS record.

Preflight itemWhy it mattersProof
Route: management network to vCenterControl plane VMs talk to vCenter over managementping and 443 reachable from the subnet
Route: management network to Spherelet vmknicESX hosts join as worker nodeshost vmknic reachable on the management subnet
Five consecutive management IPsControl plane and rolling upgrade addressingblock reserved and free of conflicts
Forward and reverse DNS for the VIP nameLogin uses the name, not the addressnslookup resolves both directions
NTP consistent across ESX and vCenterToken auth breaks on clock skewskew within a few seconds fleet wide
Storage policy and content libraryPlacement of control plane and imagespolicy visible, library synced

Run the name and time checks from a jump host on the management subnet before anything else. Versions tested: VCF 9.0 with the 9.1 line also generally available, Supervisor Kubernetes release synced from a subscribed content library, kubectl 1.31, and the kubectl vSphere plugin pulled from the Supervisor itself.

# forward and reverse resolution for the planned Supervisor VIP name nslookup sup01.corp.local # expected # Name: sup01.corp.local # Address: 10.20.30.40 nslookup 10.20.30.40 # expected: 40.30.20.10.in-addr.arpa name = sup01.corp.local # reachability to vCenter over management from the subnet nc -vz vcenter01.corp.local 443 # expected: Connection to vcenter01.corp.local 443 port [tcp/https] succeeded!

One preflight people skip is the content library sync itself. Because the Supervisor Kubernetes releases now arrive through a subscribed library rather than bundled with vCenter, a library that has never finished a sync will let you begin activation and then fail late, after the control plane VMs are already deploying. Confirm the last sync time reads recent, not never, before you submit, and treat a stale library as a blocker rather than a warning.

Design decisions before you activate

Three choices are locked in at activation to different degrees. Zone model is permanent. Control plane availability and load balancer can move later, with effort. Treat these tables as the reference artifact for this part: the mapping from what you want to what you must decide up front.

flowchart TD A[VI workload domain ready] –> B{Networking style} B –>|NSX VPC or Segment| C[NSX load balancer default] B –>|VLAN only| D[Foundation Load Balancer] C –> E{Zone model} D –> E E –>|Single management zone| F[Simple control plane, scale HA later] E –>|Three management zones| G[HA control plane, API activation only] F –> H[Activate Supervisor] G –> H H –> I[Download CLI, login by name]
Activation decision path, from a ready workload domain to first login
Zone modelWhat it buysCost
Single management zoneSimplest activation, works with a single cluster, allows simple or HA control planeOne cluster outage hits management and workloads together
Three management zonesControl plane survives a single cluster lossHA only, activation by API only, three clusters required, and no going back
Control planeNodesTrade
Simple1Default when activated with a workload domain, single point of failure, downtime during upgrade, scalable to HA later
High availability3Survives one node loss, more CPU and memory, only option for three zone model
Load balancerFitLimit
NSXDefault for NSX VPC and Segment models, no extra entitlementLayer 4 only, cannot serve non Supervisor workloads
Avi, the NSX Advanced Load BalancerAny networking model, Layer 7 rules, shareable, strong monitoringAdd on entitlement and its own deployment
Foundation Load BalancerVLAN networking, single or active standby pair, no entitlementLayer 4 only, limited scale, not for zonal HA
Contrarian call: Every lab writeup reaches for three management zones with an HA control plane on day one because it looks production grade. For a migration landing zone sitting beside TKGI, that is the wrong reflex. Zones cannot be changed after activation, so a three zone choice you make for looks locks you in, while control plane HA is a later scale operation. Start with a single management zone and a simple control plane, get workloads flowing, then scale the control plane to three nodes once the platform earns its keep.

Activation, step by step

Step 1, storage policy. Tag the datastore that will hold the control plane, then build a VM storage policy that matches the tag. Supervisor places its control plane, image cache, and objects by policy, and each zone is an independent failure domain with no cross zone replication, so keep management storage on consistent, local backing. Confirm the policy is visible to vCenter before you proceed.

# verify the policy exists (govc against vCenter, creds from environment) export GOVC_URL=https://vcenter01.corp.local govc storage.policy.ls | grep vks-supervisor # expected # vks-supervisor-gold

Step 2, content library. From VCF 9 the Supervisor Kubernetes releases are delivered apart from vCenter. Create a subscribed content library and sync the Supervisor images, or use a local library if the site is dark. Do not skip the sync, because activation cannot stage the control plane image without it. Read the password from an environment variable rather than pasting it.

# GOVC_PASSWORD is exported in the shell, never hardcoded govc library.ls # expected # /supervisor-images govc library.info /supervisor-images | grep -i subscription # expected shows the subscription URL and last sync time

Step 3, activate. In vCenter, open Workload Management and enable the Supervisor on the target cluster, or use the simplified deployment flow for a lighter footprint. Select the cluster, the zone model, the management network with the five IP block, the workload network, the storage policy, and the content library. Submit, then watch the config status. Control plane VMs deploy, then the Spherelet rolls out to each ESX host. Expect the status to sit on Configuring for a while, that is normal.

Step 4, get the CLI and log in. Pull the plugin straight from the Supervisor VIP. Here is where the naming rule bites, so log in by fully qualified name.

curl -LOk https://sup01.corp.local/wcp/plugin/linux-amd64/vsphere-plugin.zip unzip vsphere-plugin.zip export PATH=$PWD/bin:$PATH # password read from environment, prompted if unset, never on the command line read -s KUBECTL_VSPHERE_PASSWORD; export KUBECTL_VSPHERE_PASSWORD kubectl vsphere login –server=sup01.corp.local –vsphere-username administrator@vsphere.local # expected # Logged in successfully. # You have access to the following contexts: # sup01.corp.local # To change context, use kubectl config use-context <workload name>

Point the plugin at the raw address instead and the login is rejected on a certificate name mismatch, which is the documented reason to use a name. This is the real failure, not a hypothetical:

kubectl vsphere login –server=10.20.30.40 –vsphere-username administrator@vsphere.local # Error: Post https://10.20.30.40:443/wcp/login: x509: # certificate is valid for sup01.corp.local, not 10.20.30.40 # fix: use the FQDN so the server name indication presents the right VIP certificate
Naming shift: If your muscle memory reaches for the tanzu CLI, retrain it. In VCF 9 the kubectl vSphere plugin and the tanzu CLI for VKS are folded into the unified VCF CLI, which handles login and context refresh for both the Supervisor and the guest clusters. The kubectl vsphere login shown here still works and is the shortest path for a first login.

Verification and what green looks like

Green is three things at once: config status Running in Workload Management, a control plane node Ready, and ESX hosts showing up as worker nodes. Confirm from the CLI.

kubectl config get-contexts # CURRENT NAME CLUSTER AUTHINFO # * sup01.corp.local sup01.corp.local wcp:sup01.corp.local:administrator@vsphere.local kubectl get nodes # NAME STATUS ROLES AGE VERSION # 42a1c0…control Ready control-plane 6m v1.31.x # esx01.corp.local Ready <none> 5m v1.31.x # esx02.corp.local Ready <none> 5m v1.31.x kubectl get namespaces # NAME STATUS AGE # kube-system Active 7m # vmware-system-appplatform Active 7m # vmware-system-vmop Active 7m

The node version string reflects the Supervisor Kubernetes release you synced, so it moves with the content library, not with vCenter. A single control plane node is expected for a simple activation. Once this is green, the Supervisor is live and ready for its first vSphere Namespace, which is the next part.

Supervisor activation, minutes per phaseOne clean run on the reference cluster, 47 minutes end to endPreflight and DNS8Storage and library9Submit to CP deployed12Spherelet to nodes Ready16CLI login and verify2longest wait is the Spherelet rollout across hosts
Where the time goes in a clean activation

Rollback, fallback, and common failures

Rollback here is genuinely first class, because you are building beside a running estate. If activation goes sideways, disable the Supervisor from Workload Management. That removes the control plane VMs and any Supervisor side namespaces, and it leaves TKGI, its clusters, and every running workload completely untouched. There is no shared fate. You can disable, fix the routing or the library, and enable again the same afternoon. Keep the reserved IP block and DNS records in place between attempts so you are not chasing new conflicts each time.

Symptom and errorCauseFix
Config status stuck on Configuring past an hourManagement network has no route to vCenter or DNSAdd the route, fix forward and reverse DNS, then let it reconcile
x509: certificate is valid for sup01.corp.local, not the IPLogin attempted by raw addressLog in by FQDN so SNI presents the right certificate
Login fails, message notes clock skew or token not yet validNTP skew between ESX, vCenter, and control planeFix NTP fleet wide, keep skew within seconds, retry
Content library sync fails or images missingProxy or certificate blocks the subscription URLSet the library proxy, or switch to a local library and import
Insufficient resources to satisfy configured failover level for vSphere HACluster lacks headroom for the control plane VMsFree capacity or adjust HA admission control, then enable

Field note and my call

My first Supervisor activation beside a live TKGI estate sat on Configuring for 92 minutes before I killed it. I had gone in with three management zones because it felt like the grown up choice, and I had assumed the management subnet reached everything it needed. It did not. Reverse DNS for the VIP name was missing in one zone, and the second cluster had no route back to the primary vCenter. I disabled, which cost nothing on the TKGI side, added the reverse zone and one static route, dropped back to a single management zone with a simple control plane, and re enabled. That run finished in 47 minutes, the timing you saw in the chart above. Two lessons stuck. First, the zone decision is the one you cannot walk back, so do not spend it on appearances. Second, every minute I thought I saved by skipping the reverse DNS check, I paid back roughly tenfold in a stalled activation.

My call for a migration landing zone: single management zone, simple control plane, and the NSX load balancer if you are already on NSX. Scale the control plane to three nodes after the first workloads land and you trust the platform. Avoid three management zones on day one unless you have a hard, current requirement for zonal control plane survival, because it is permanent and it forces API only activation. Reach for Avi only when you genuinely need Layer 7 rules or a shared load balancer, not by default.

Clean result checklist and quick answers

A clean end state looks like this:

  • Workload Management shows config status Running for the cluster.
  • kubectl get nodes returns a control plane node Ready and ESX hosts as worker nodes.
  • Login succeeds by FQDN and the context is present.
  • Storage policy and content library are bound and synced.
  • TKGI and every existing cluster are unchanged and still serving.

Does enabling the Supervisor touch my TKGI clusters? No. It runs on a separate workload domain and shares no lifecycle with BOSH or Ops Manager.

Can I change the zone model later? No. Choose it at activation. Control plane HA, by contrast, is a later scale operation.

Is a Cloud Foundry estate migrated the same way? No. Tanzu Application Service is out of scope for this series, and its successor is Tanzu Platform for Cloud Foundry, not VKS.

What is my Monday move? On your own estate, reserve the five IP block, add the VIP name to DNS both directions, and confirm the management subnet reaches vCenter. That preflight alone prevents most stalled activations.

TKGI to VKS Series · Part 12 of 26
« Previous: Part 11  |  Guide  |  Next: Part 13 »

References

Broadcom TechDocs, Requirements for Simplified Supervisor Deployment
Broadcom TechDocs, vSphere Supervisor Models
Broadcom TechDocs, Download and Install the Kubernetes CLI Tools for vSphere

About The Author


Discover more from Journal of Intelligent Infrastructure

Subscribe to get the latest posts sent to your email.

Leave a Reply

Your email address will not be published. Required fields are marked *

Architect’s Toolkit

About the Author

Dr. Pranay Jha is a Cloud and AI Consultant with 18+ years of experience in hybrid cloud, virtualization, and enterprise infrastructure transformation. He specializes in VMware technologies, multi-cloud strategy, and Generative AI solutions. He holds a PhD in Computer Applications with research focused on Cloud and AI, has published multiple research papers, and has been a VMware vExpert since 2016 and a VMUG Community Leader.

Discover more from Journal of Intelligent Infrastructure

Subscribe now to keep reading and get access to the full archive.

Continue reading