<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>VSphere Kubernetes Service on Cosmin.us</title><link>https://cosmin.us/tags/vsphere-kubernetes-service/</link><description>Recent content in VSphere Kubernetes Service on Cosmin.us</description><generator>Hugo</generator><language>en-US</language><dc:creator>Cosmin Trif</dc:creator><lastBuildDate>Wed, 21 Oct 2026 08:30:00 +0000</lastBuildDate><atom:link href="https://cosmin.us/tags/vsphere-kubernetes-service/index.xml" rel="self" type="application/rss+xml"/><item><title>One-Host Supervisor on VCF 9.1, Part 4: Enabling a Supervisor with One Control Plane VM</title><link>https://cosmin.us/one-host-supervisor-vcf-9-1-part-4-enable-supervisor/</link><pubDate>Wed, 21 Oct 2026 08:30:00 +0000</pubDate><dc:creator>Cosmin Trif</dc:creator><guid>https://cosmin.us/one-host-supervisor-vcf-9-1-part-4-enable-supervisor/</guid><description>&lt;p&gt;In &lt;a href="https://cosmin.us/one-host-supervisor-vcf-9-1-part-3-nsx-vpc-without-edges/"&gt;Part 3&lt;/a&gt; we gave NSX a way out without edges. Now we enable the Supervisor on the one-host cluster, with a single control plane VM instead of the usual three. Two things stalled it along the way, and I headed off a third before it could. I&amp;rsquo;ll go through all of them, then prove the result with a test pod.&lt;/p&gt;&#10;&lt;h2 id="before-you-begin"&gt;Before you begin&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;vSphere HA and DRS on, HA admission control off (Part 2)&lt;/li&gt;&#10;&lt;li&gt;The FTT=0 policy compatible with the vSAN datastore (Part 2)&lt;/li&gt;&#10;&lt;li&gt;Five consecutive free IPs on the management network for the Supervisor (mine: &lt;code&gt;10.1.1.85&lt;/code&gt; to &lt;code&gt;10.1.1.89&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;DNS servers that answer from the address they were queried on (more on that below)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Then ask vCenter whether the cluster can take a Supervisor on VPC networking:&lt;/p&gt;</description><content:encoded>&lt;p&gt;In &lt;a href="https://cosmin.us/one-host-supervisor-vcf-9-1-part-3-nsx-vpc-without-edges/"&gt;Part 3&lt;/a&gt; we gave NSX a way out without edges. Now we enable the Supervisor on the one-host cluster, with a single control plane VM instead of the usual three. Two things stalled it along the way, and I headed off a third before it could. I&amp;rsquo;ll go through all of them, then prove the result with a test pod.&lt;/p&gt;&#10;&lt;h2 id="before-you-begin"&gt;Before you begin&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;vSphere HA and DRS on, HA admission control off (Part 2)&lt;/li&gt;&#10;&lt;li&gt;The FTT=0 policy compatible with the vSAN datastore (Part 2)&lt;/li&gt;&#10;&lt;li&gt;Five consecutive free IPs on the management network for the Supervisor (mine: &lt;code&gt;10.1.1.85&lt;/code&gt; to &lt;code&gt;10.1.1.89&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;DNS servers that answer from the address they were queried on (more on that below)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Then ask vCenter whether the cluster can take a Supervisor on VPC networking:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/vcenter/namespace-management/cluster-compatibility?network_provider=NSX_VPC&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;My cluster (&lt;code&gt;domain-c44&lt;/code&gt;) came back &lt;code&gt;compatible: true&lt;/code&gt;. Keep the &lt;code&gt;network_provider&lt;/code&gt; filter: without it, vCenter lists edge cluster reasons that do not apply to a VPC Supervisor.&lt;/p&gt;&#10;&lt;h2 id="step-1-enable-the-supervisor"&gt;Step 1: Enable the Supervisor&lt;/h2&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;POST /api/vcenter/namespace-management/supervisors/domain-c44?action=enable_on_compute_cluster&#10;&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;supervisor-mgmt-a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;zone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zone-mgmt-02a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;control_plane&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;SMALL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;storage_policy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;FTT=0 policy id&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;backing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;backing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NETWORK&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;moref of mgmt-vds01-mgmt-02a&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ip_management&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dhcp_enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;gateway_address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.1/24&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ip_assignments&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;assignee&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NODE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;ranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.85&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dns&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.1&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;search_domains&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;site-a.vcf.lab&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ntp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.1&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;workloads&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;edge&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NSX_VPC&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;network_type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NSX_VPC&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;nsx_vpc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;nsx_project&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/orgs/default/projects/default&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;vpc_connectivity_profile&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/orgs/default/projects/default/vpc-connectivity-profiles/default&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;default_private_cidrs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;172.16.200.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;prefix&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;24&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ip_management&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dhcp_enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;gateway_address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ip_assignments&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;assignee&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;SERVICE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;ranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.96.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dns&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.1&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;search_domains&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;site-a.vcf.lab&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ntp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.1.1.1&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ephemeral_storage_policy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;FTT=0 policy id&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;image_storage_policy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;FTT=0 policy id&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A few notes on the spec:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;control_plane.count: 1&lt;/code&gt; is the whole point: one control plane VM.&lt;/li&gt;&#10;&lt;li&gt;The enable call creates the vSphere Zone named in &lt;code&gt;zone&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;The management network is a portgroup on the new cluster&amp;rsquo;s VDS, from Part 2.&lt;/li&gt;&#10;&lt;li&gt;The same FTT=0 policy covers the control plane, ephemeral and image storage.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Then watch it:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/vcenter/namespace-management/supervisors/summaries&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You want &lt;code&gt;config_status: RUNNING&lt;/code&gt; and &lt;code&gt;kubernetes_status: READY&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="what-is-normal-while-it-configures"&gt;What is normal while it configures&lt;/h2&gt;&#10;&lt;p&gt;These showed up in my lab and went away by themselves. Don&amp;rsquo;t chase them on the first pass:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;CONFIGURING&lt;/code&gt; with &lt;code&gt;ERROR&lt;/code&gt; or &lt;code&gt;WARNING&lt;/code&gt; for a long stretch&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Need 2 net devices, but found only 1 net devices&lt;/code&gt; while the control plane VM was coming up&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;signature verification result not found&lt;/code&gt; for the embedded velero and VKS (&lt;code&gt;tkg.vsphere.vmware.com&lt;/code&gt;) services, retried until they passed&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;One message kept repeating and did not go away: WCP could not create the &lt;code&gt;Kubernetes Service Content Library&lt;/code&gt;. Its log said &lt;code&gt;Unable to connect to kubernetes content library &amp;lt;depot URL&amp;gt; because Error creating kubernetes subscribed library 400 Bad Request&lt;/code&gt;. I did not chase the cause. It did not block the Supervisor, but you need a working image library before you deploy any VKS cluster.&lt;/p&gt;&#10;&lt;h2 id="stall-1-the-snapshot-from-part-2"&gt;Stall 1: the snapshot from Part 2&lt;/h2&gt;&#10;&lt;p&gt;About two hours after the enable, the control plane VM deployment failed and was cleaned up:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;The System VM for solution &amp;lt;supervisor id&amp;gt; on cluster domain-c44 has not been deployed because of unexpected error&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The Supervisor itself stayed in place, waiting to retry. The cause was the snapshot I took of the nested &lt;code&gt;esx-05a&lt;/code&gt; VM before creating the cluster. A nested ESXi running on a snapshot writes through the snapshot&amp;rsquo;s delta disk, and on my physical host that was painfully slow:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Nested host&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Write latency&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Write IOPS&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;esx-05a&lt;/code&gt;, on the snapshot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;172 ms average, 814 ms peak&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;about 20&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the other nested hosts, no snapshot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;250 to 340&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Nested vSAN on &lt;code&gt;esx-05a&lt;/code&gt; also kept losing access to its volume and getting it back every few minutes. The host events read &lt;code&gt;Lost access to volume &amp;lt;uuid&amp;gt; ... due to connectivity issues&lt;/code&gt;, then &lt;code&gt;Successfully restored access to volume &amp;lt;uuid&amp;gt; ... following connectivity issues&lt;/code&gt;. I deleted the snapshot, write latency dropped to 0 ms, and WCP picked the deployment up again on its own. No disable and re-enable needed.&lt;/p&gt;&#10;&lt;p&gt;This one only bites nested labs. A physical GPU host has no outer snapshot. If your host is nested, delete its snapshot as soon as Part 2 checks out.&lt;/p&gt;&#10;&lt;h2 id="stall-2-the-vlcm-health-gate"&gt;Stall 2: the vLCM health gate&lt;/h2&gt;&#10;&lt;p&gt;With the control plane VM up, the Supervisor started flipping between &lt;code&gt;CONFIGURING&lt;/code&gt; and &lt;code&gt;RUNNING&lt;/code&gt;. The API VIP was up and VKS and velero were running, but the &lt;code&gt;cci-ns&lt;/code&gt; core service needed a controller pod running as a vSphere Pod on &lt;code&gt;esx-05a&lt;/code&gt;, and Kubernetes had only one node: the control plane VM.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;esx-05a&lt;/code&gt; was not a node because its &lt;code&gt;spherelet&lt;/code&gt; agent was installed but not running. Every minute, WCP asked vLCM to finish setting it up (an apply on the cluster&amp;rsquo;s &lt;code&gt;solutions-internal&lt;/code&gt; software), and every minute vLCM refused:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;Health Check for &amp;#39;esx-05a.site-a.vcf.lab&amp;#39; failed&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That health check is vSAN health. On my nested NVMe disks it showed two yellow tests: &lt;code&gt;nvmeonhcl&lt;/code&gt; (hardware compatibility) and &lt;code&gt;vsanesacompliancecheck&lt;/code&gt;. In the lab I silenced the same seven checks Holodeck already silences on the 4-host cluster. In PowerCLI:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Get-Cluster&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cluster-mgmt-02a&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$hs&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Get-VsanView&lt;/span&gt; &lt;span class="n"&gt;-Id&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;VsanVcClusterHealthSystem-vsan-cluster-health-system&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$checks&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;nvmeonhcl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;controllerfirmware&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;autohclupdate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;controlleronhcl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;hcldiskclaimcheck&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;vsanesacompliancecheck&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;vsanesacompliancecloudcheck&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$hs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;VsanHealthSetVsanClusterSilentChecks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ExtensionData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MoRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;string[]&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$checks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="vm"&gt;$null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$hs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;VsanHealthGetVsanClusterSilentChecks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ExtensionData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MoRef&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;About two and a half minutes after the silence, WCP&amp;rsquo;s next retry went through. &lt;code&gt;spherelet&lt;/code&gt; started, &lt;code&gt;esx-05a&lt;/code&gt; joined as a node, and the Supervisor went to &lt;code&gt;RUNNING&lt;/code&gt; / &lt;code&gt;READY&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;On hardware that is on the vSAN HCL, I would expect these tests to pass and nothing to need silencing. Check vSAN health on the new cluster before you enable the Supervisor. If a test is yellow or red, fix it, or at least understand it, before you reach for this.&lt;/p&gt;&#10;&lt;h2 id="the-one-i-headed-off-dns-answering-from-the-wrong-address"&gt;The one I headed off: DNS answering from the wrong address&lt;/h2&gt;&#10;&lt;p&gt;VPC workloads reach your DNS servers through SNAT on the VNAs. If a DNS server sits on a router with several addresses and listens on &lt;code&gt;0.0.0.0&lt;/code&gt;, it can answer from a different address than the one it was asked on, and the client drops the reply. That broke VKS DNS in an earlier build of my lab. The Technitium DNS server on the Holodeck router was answering from the wrong address.&lt;/p&gt;&#10;&lt;p&gt;This time I bound the DNS server to explicit addresses before Part 3. If your pods resolve nothing and DNS just times out, check this first.&lt;/p&gt;&#10;&lt;h2 id="step-2-prove-it-with-a-test-pod"&gt;Step 2: Prove it with a test pod&lt;/h2&gt;&#10;&lt;p&gt;A &lt;code&gt;RUNNING&lt;/code&gt; / &lt;code&gt;READY&lt;/code&gt; status is not the same as a working path. To prove it, I ran one throwaway vSphere Pod that resolves a name and fetches an HTTPS page through the VPC.&lt;/p&gt;&#10;&lt;p&gt;Create a namespace:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;POST /api/vcenter/namespaces/instances/v2&#10;&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kit-smoke&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;supervisor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;supervisor id&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;storage_specs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;policy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;FTT=0 policy id&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then get onto the control plane VM. On the vCenter appliance, as root, &lt;code&gt;/usr/lib/vmware-wcp/decryptK8Pwd.py&lt;/code&gt; prints the control plane IP and root password. This is a lab shortcut; normally you log in with the VCF CLI or &lt;code&gt;kubectl vsphere login&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh root@10.1.1.85&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KUBECONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/etc/kubernetes/admin.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n kit-smoke run kit-smoke --image&lt;span class="o"&gt;=&lt;/span&gt;docker.io/library/busybox:1.36 --restart&lt;span class="o"&gt;=&lt;/span&gt;Never --command -- &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sh -c &lt;span class="s2"&gt;&amp;#34;nslookup vc-mgmt-a.site-a.vcf.lab 10.1.1.1 &amp;amp;&amp;amp; echo DNS_OK; wget -q -T 15 -O /dev/null https://www.google.com/ &amp;amp;&amp;amp; echo EGRESS_OK&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# wait for the pod to finish before reading its output&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n kit-smoke &lt;span class="nb"&gt;wait&lt;/span&gt; pod/kit-smoke --for&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.status.phase}&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Succeeded --timeout&lt;span class="o"&gt;=&lt;/span&gt;300s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n kit-smoke logs kit-smoke&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# the Supervisor API VIP, from the management network&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sk -o /dev/null -w &lt;span class="s1"&gt;&amp;#39;%{http_code}\n&amp;#39;&lt;/span&gt; https://10.1.7.197:6443/version&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In my case:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The pod reached &lt;code&gt;Succeeded&lt;/code&gt;, and printed &lt;code&gt;DNS_OK&lt;/code&gt; and &lt;code&gt;EGRESS_OK&lt;/code&gt;. busybox &lt;code&gt;wget&lt;/code&gt; also prints a note that it does not validate TLS certificates; that is expected.&lt;/li&gt;&#10;&lt;li&gt;The VIP answered &lt;code&gt;401&lt;/code&gt;. That is the result we want: the API is reachable and asks for credentials.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The LoadBalancer services all got their addresses from the external IP block in Part 3:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Service&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Address&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;kube-apiserver-lb-svc&lt;/code&gt; (the Supervisor API VIP)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.1.7.197&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;kube-dns-lb&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.1.7.193&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker-registry&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.1.7.194&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mgmt-image-proxy&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.1.7.196&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Clean up with &lt;code&gt;kubectl -n kit-smoke delete pod kit-smoke&lt;/code&gt;, then delete the namespace in vCenter.&lt;/p&gt;&#10;&lt;h2 id="where-we-ended-up"&gt;Where we ended up&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;supervisor-mgmt-a&lt;/code&gt; is &lt;code&gt;RUNNING&lt;/code&gt; / &lt;code&gt;READY&lt;/code&gt;, with one control plane VM&lt;/li&gt;&#10;&lt;li&gt;Two Kubernetes nodes: the control plane VM and &lt;code&gt;esx-05a&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;VKS 3.6.1, velero and &lt;code&gt;cci-ns&lt;/code&gt; running&lt;/li&gt;&#10;&lt;li&gt;The API VIP on &lt;code&gt;10.1.7.197&lt;/code&gt;, served through the VNAs&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Last, delete the SDDC Manager snapshot from Part 1 (and the nested host snapshot, if you have not already).&lt;/p&gt;&#10;&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next&lt;/h2&gt;&#10;&lt;p&gt;Two things before the GPU work. First, a VKS image library, since the Supervisor could not create its own. Then VCF Private AI Services. William&amp;rsquo;s &lt;a href="https://williamlam.com/2026/09/vcf-9-1-1-deploying-your-own-ai-models-with-vcf-private-ai-services-pais-3-0.html"&gt;PAIS 3.0 post&lt;/a&gt; lists what it needs: a Supervisor on VPC networking, which we now have, the PAIS Supervisor Service, a Harbor registry for the models, and an NVIDIA GPU through DirectPath I/O or vGPU. His post is on 9.1.1, so check the interoperability matrix for your Supervisor version first.&lt;/p&gt;&#10;</content:encoded></item></channel></rss>