<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Runtime Zero</title>
  <subtitle>Field notes on VMware technology, Kubernetes, industry trends and other things</subtitle>
  <link href="https://runtimezero.eu/feed.xml" rel="self"/>
  <link href="https://runtimezero.eu/"/>
  <id>https://runtimezero.eu/</id>
  <author><name>Runtime Zero</name></author>
  <updated>2026-10-12T00:00:00.000Z</updated>
  <entry>
    <title>Sizing VCF 9.1 Management Components: Start Lean, Scale Later</title>
    <link href="https://runtimezero.eu/posts/vcf-management-component-sizing/"/>
    <id>https://runtimezero.eu/posts/vcf-management-component-sizing/</id>
    <published>2026-10-12T00:00:00.000Z</published>
    <updated>2026-10-12T00:00:00.000Z</updated>
    <summary>Getting VCF management sizing right on Day 0 is hard, but VCF 9.1 lets you start lean and scale later. Here&#39;s a practical approach, with reference tables of what can scale and how.</summary>
    <content type="html">&lt;h2&gt;Why sizing is hard&lt;/h2&gt;
&lt;p&gt;I noticed in recent field engagements that much time is spent on getting all the initial sizing calculations right. The &lt;a href=&quot;https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vcf-9-0-and-later/9-1/planning-and-preparation.html&quot;&gt;Planning and Preparation&lt;/a&gt; Workbook shows what is necessary and possible for all the different components. This used to be a &amp;quot;few sizes fit all&amp;quot; approach - think T-shirt sizes. Choose too small and you might see issues creep in, go too big and resources are committed for a long time with no benefit. Recently, more flexibility was introduced with advanced sizing parameters that allow you to tweak the environment to your needs.&lt;/p&gt;
&lt;p&gt;Done right, you will know exactly what kind of resources the management stack will consume. The VMware team also provides some expert tooling for the different parts of the stack, &lt;a href=&quot;https://vcfopssizer.broadcom.com/&quot;&gt;VCF Operations Sizer&lt;/a&gt; and &lt;a href=&quot;https://vrlisizer.vmware.com/&quot;&gt;Log Management Sizer&lt;/a&gt; for example.&lt;/p&gt;
&lt;p&gt;And here lies the problem: to get it right, very deep knowledge of the environment is needed - at least for some of the components. Not a big problem if, say, VCF Operations has been in use before, but if you introduce that component into your stack, you will likely not know how many objects and metrics will be gathered, or what will be the ideal retention period to best support the operations team. Couple that with non-trivial scaling on Day 2 and it is clear why a lot of time and effort will be spent on sizing.&lt;/p&gt;
&lt;p&gt;Obviously, thinking about resource consumption is very important, but if scaling were easy, knowing the lower and upper bounds would completely suffice.&lt;/p&gt;
&lt;h2&gt;Simple vs. HA&lt;/h2&gt;
&lt;p&gt;The VCF Installer gives you two deployment paths: Simple or High Availability (HA). In general HA means each component will get deployed multiple (most often three) times, significantly increasing resource requirements. Resiliency doesn&#39;t come cheap. Simple mode will deploy a single instance. This used to be a one-time decision, which also explains all the effort put into sizing.&lt;/p&gt;
&lt;p&gt;Luckily this is not the case anymore. In VCF 9.1.0 and higher, scaling exercises became a lot more flexible and can be executed directly from the UI.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/04-vcf-management-component-sizing/vcf-components-management.png&quot; alt=&quot;VCF management components in VCF Operations&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/04-vcf-management-component-sizing/scaling-example.png&quot; alt=&quot;Scaling example in VCF Operations UI&quot;&gt;&lt;/p&gt;
&lt;p&gt;There are two caveats to consider: you can go from Simple to HA but not back, and you can scale up but not down.&lt;/p&gt;
&lt;h2&gt;Start lean, scale later&lt;/h2&gt;
&lt;p&gt;So given the constraints of the installer and the flexible scaling after deployment, I recommend the following pragmatic approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Determine&lt;/strong&gt; lower and upper bounds for your environment (e.g. when you have 250 hosts, T-shirt size small is not a valid choice for vCenter)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt; with the lower bounds in &lt;strong&gt;Simple&lt;/strong&gt; mode to get up and running quickly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable HA&lt;/strong&gt; for the components you will depend upon&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scale up&lt;/strong&gt; the components as necessary, based on operational data&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What can be scaled&lt;/h2&gt;
&lt;p&gt;I put together the following tables to show which scaling operations are available in the user interface or via the API.&lt;/p&gt;
&lt;div class=&quot;rz-table-wrap&quot;&gt;&lt;table class=&quot;table table-compact rz-table--records&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Management Component&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;#VMs&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;Simple / HA&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scaling Sizes&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scale Storage&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scaling Direction&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1+ / 3+&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L, XL&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;Cloud proxy nodes can be added and scaled as needed&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / 3&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Operations for Networks&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;2+ / 4+&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;M, L, XL&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;&lt;strong&gt;Simple:&lt;/strong&gt; 1 platform node, 1+ collector nodes; &lt;strong&gt;HA:&lt;/strong&gt; 3 platform nodes, 1+ collector nodes&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Services Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;4+ / 6+&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;&lt;strong&gt;Simple:&lt;/strong&gt; 1 control plane node, 3+ worker nodes; &lt;strong&gt;HA:&lt;/strong&gt; 3 control plane nodes, 3+ worker nodes&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;SDDC Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;no&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;vCenter Server&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L, XL&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;Scalable via API, see &lt;a href=&quot;https://blogs.vmware.com/cloud-foundation/2026/05/12/resizing-vmware-vcenter/&quot;&gt;Resizing VMware vCenter&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;NSX Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / 3&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L, XL&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;no&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;Scale out in NSX UI, scale up directly in vCenter&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Legend:&lt;/strong&gt; S = Small, M = Medium, L = Large, XL = Extra Large (the same abbreviations apply to the second table). &amp;quot;+&amp;quot; is short for &amp;quot;or more&amp;quot;, &amp;quot;-&amp;quot; means not available or not applicable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Because the following components run inside the Kubernetes-based VCF Management Services Runtime, capacity is measured in replicas rather than virtual machines.&lt;/p&gt;
&lt;div class=&quot;rz-table-wrap&quot;&gt;&lt;table class=&quot;table table-compact rz-table--records&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;VCF Management Services Component&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;#Replicas&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;Simple / HA&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scaling Sizes&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scale Storage&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Scaling Direction&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Fleet lifecycle&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;SDDC lifecycle&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Software depot&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Identity broker&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / 3&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Salt master&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Salt RaaS&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Telemetry&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;no&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Log Management&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / 3+&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up, out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;rz-comment&quot;&gt;Up to 19 replicas possible&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Real-time metrics&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;S, M, L&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;yes&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;up&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Real-time metrics store&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;1 / -&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;no&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;Sizing the management stack no longer has to be a high-stakes decision on Day 0. Deploy every component in Simple mode with the lower bounds you determined, enable HA where you depend on it, and scale up when real consumption in VCF Operations or Log Management tells you to.&lt;/p&gt;
&lt;p&gt;Just keep one rule in mind before clicking scale: &lt;strong&gt;it is a one-way street&lt;/strong&gt;. You can go from Simple to HA and scale up, but not back - so let measured usage drive the decision, not the worst case.&lt;/p&gt;
&lt;p&gt;The sizes and limits in the tables reflect VCF 9.1.0. Capabilities change between releases, so check the Planning and Preparation Workbook before you rely on them.&lt;/p&gt;
</content>
    <category term="VCF"/>
  </entry>
  <entry>
    <title>Enabling Pod Monitoring on VKS Clusters via the VCF Operations API</title>
    <link href="https://runtimezero.eu/posts/enable-pod-monitoring-in-vcf-operations-api/"/>
    <id>https://runtimezero.eu/posts/enable-pod-monitoring-in-vcf-operations-api/</id>
    <published>2026-08-20T00:00:00.000Z</published>
    <updated>2026-08-20T00:00:00.000Z</updated>
    <summary>VCF Operations 9.1 can toggle Pod Monitoring for VKS clusters from the UI, but the API field behind that toggle isn&#39;t documented anywhere. Here&#39;s how it is flipped via the REST API, and wrapped into a reusable Python script.</summary>
    <content type="html">&lt;h2&gt;Automatic observability of VKS Clusters in VCF Operations&lt;/h2&gt;
&lt;p&gt;Part of the VKS addon catalog are Prometheus and Telegraf. In the past, to enable the metrics collection (and shipping to VCF Operations) those had to be installed manually. An excellent guide on how to do this can be found here: &lt;a href=&quot;https://vrealize.it/2025/10/24/monitoring-vks-clusters-in-vcf-operations/&quot;&gt;Monitoring VKS Clusters in VCF Operations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With the introduction of VCF 9.1 the platform is using the new addon management framework to automate the installation of the required packages similar to how Cluster Autoscaler installation is handled. For all new VKS clusters, this is enabled by default - no extra steps necessary. Here is an example of the annotations that get added by the system:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/03-enable-pod-monitoring-in-vcf-operations-api/vks-cluster-monitoring-annotations.png&quot; alt=&quot;VKS cluster with automatic monitoring enabled&quot;&gt;&lt;/p&gt;
&lt;p&gt;If for some reason you don&#39;t want that, you can set the annotation to disabled. The official documentation provides more detail on the behaviour: &lt;a href=&quot;https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vcf-consumption/latest/managing-vsphere-kuberenetes-service-clusters-and-workloads/operating-tkg-service-clusters/monitoring-vks-clusters-using-vcf-operations.html&quot;&gt;Monitoring VKS Clusters Using VCF Operations&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;By default data is aggregated at the node/cluster level and namespace, deployment and replicaset level as well, as can be seen in this example:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/03-enable-pod-monitoring-in-vcf-operations-api/out-of-the-box-metrics.png&quot; alt=&quot;Out of the box available metrics&quot;&gt;&lt;/p&gt;
&lt;p&gt;Actual pod and container metrics are not enabled by default. This makes sense - pod/container data is often short-lived due to their ephemeral nature. But sometimes this level of detail is necessary. VCF Operations 9.1 lets you toggle &lt;strong&gt;Pod Monitoring&lt;/strong&gt; for a VKS (vSphere Kubernetes Service) cluster from the UI, once that cluster has been added to the system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/03-enable-pod-monitoring-in-vcf-operations-api/enable-pod-monitoring-ui.png&quot; alt=&quot;Enable pod monitoring in the UI&quot;&gt;&lt;/p&gt;
&lt;p&gt;Since this is a manual UI task, I wanted to find out the API way to do this, in preparation for further automation down the line - like toggle this setting right from within VCF Automation.&lt;/p&gt;
&lt;p&gt;VCF Operations exposes a REST API endpoint called &lt;code&gt;suite-api&lt;/code&gt; - this is the same, officially supported integration API documented at &lt;a href=&quot;https://developer.broadcom.com/xapis/vcf-operations-api/latest/&quot;&gt;developer.broadcom.com/xapis/vcf-operations-api&lt;/a&gt;, and it&#39;s also self-hosted on every appliance at:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://&amp;lt;vcf-ops-host&amp;gt;/suite-api/docs/rest/index.html
https://&amp;lt;vcf-ops-host&amp;gt;/suite-api/doc/swagger-ui.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The built-in Swagger UI makes it especially easy to try out the API and start experimenting. What is &lt;em&gt;not&lt;/em&gt; spelled out anywhere in the docs is which field controls pod monitoring for a VKS cluster. That part had to be reverse-engineered from the live resource model.&lt;/p&gt;
&lt;h2&gt;Step 1 - Authenticate&lt;/h2&gt;
&lt;p&gt;Every call needs a bearer token from &lt;code&gt;/api/auth/token/acquire&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sk&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-X&lt;/span&gt; POST https://&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;vcf-ops-host&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;/suite-api/api/auth/token/acquire &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Accept: application/json&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;username&quot;:&quot;&amp;lt;username&gt;&quot;,&quot;password&quot;:&quot;&amp;lt;password&gt;&quot;}&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Response:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;978f65d0-...::f3b9b83c-...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;validity&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;...&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;expiresAt&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;roles&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Send it back as a header on every subsequent request:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Authorization: OpsToken &amp;lt;token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 2 - Find the adapter kind that owns Kubernetes objects&lt;/h2&gt;
&lt;p&gt;VCF Operations models everything as &lt;strong&gt;adapter kinds&lt;/strong&gt; -&amp;gt; &lt;strong&gt;resource kinds&lt;/strong&gt; -&amp;gt; &lt;strong&gt;resources&lt;/strong&gt;. To find where VKS clusters live, list adapter kinds and look for one whose
resource kinds mention Kubernetes objects:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sk&lt;/span&gt; https://&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;host&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;/suite-api/api/adapterkinds &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Authorization: OpsToken &lt;span class=&quot;token variable&quot;&gt;$TOKEN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Accept: application/json&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The adapter kind &lt;code&gt;SupervisorAdapter&lt;/code&gt; (&amp;quot;vSphere Supervisor&amp;quot;) turned up with resource kinds including &lt;code&gt;GuestCluster&lt;/code&gt;, &lt;code&gt;SupervisorCluster&lt;/code&gt;, &lt;code&gt;KubernetesPod&lt;/code&gt;, &lt;code&gt;KubernetesNamespace&lt;/code&gt;, etc. &lt;code&gt;GuestCluster&lt;/code&gt; is what the UI labels &lt;strong&gt;VKS Cluster&lt;/strong&gt; - confirmed by describing it:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sk&lt;/span&gt; https://&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;host&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;/suite-api/api/adapterkinds/SupervisorAdapter/resourcekinds/GuestCluster &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Authorization: OpsToken &lt;span class=&quot;token variable&quot;&gt;$TOKEN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Accept: application/json&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;POD_CONTAINER_MONITORING&lt;/code&gt; immediately stands out - that&#39;s the field the &amp;quot;Enable Pod Monitoring&amp;quot; toggle in the UI is writing to.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GuestCluster&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VKS Cluster&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;adapterKind&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SupervisorAdapter&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;resourceIdentifierTypes&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GUEST_CLUSTER_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;MONITORING_ENABLED&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;POD_CONTAINER_MONITORING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/mark&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SUPERVISOR_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VC_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Listing actual &lt;code&gt;GuestCluster&lt;/code&gt; resources across several VKS clusters confirmed it: clusters with pod monitoring enabled in the UI had &lt;code&gt;POD_CONTAINER_MONITORING = &amp;quot;true&amp;quot;&lt;/code&gt;, and the one cluster with it turned off had &lt;code&gt;&amp;quot;false&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sk&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://&amp;lt;host&gt;/suite-api/api/resources?resourceKind=GuestCluster&amp;amp;adapterKind=SupervisorAdapter&amp;amp;name=metrics-test&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Authorization: OpsToken &lt;span class=&quot;token variable&quot;&gt;$TOKEN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Accept: application/json&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is a response for one cluster (with some data trimmed out that is noise for our purposes):&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;resourceList&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;resourceKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;metrics-test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;adapterKindKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SupervisorAdapter&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;resourceKindKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GuestCluster&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;resourceIdentifiers&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GUEST_CLUSTER_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b6cc361b-a0d3-4757-8d77-7a7977be9f75&quot;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;MONITORING_ENABLED&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;true&quot;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;POD_CONTAINER_MONITORING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;false&quot;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SUPERVISOR_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;6e227f64-7211-48c5-b201-1e25ce19678e&quot;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VC_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;f7839017-1f73-4122-b27c-3ed8450729e6&quot;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;identifier&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;38ff122b-8776-4d70-8b3c-fac80c9825c3&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;links&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;href&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/suite-api/api/resources/38ff122b-8776-4d70-8b3c-fac80c9825c3&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;rel&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SELF&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;linkToSelf&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Worth noting is the &lt;strong&gt;&lt;code&gt;identifier&lt;/code&gt;&lt;/strong&gt; (top-level, &lt;code&gt;38ff122b-8776-4d70-8b3c-fac80c9825c3&lt;/code&gt;) - the ID needed for the next step.&lt;/p&gt;
&lt;h2&gt;Step 3 - Flip it&lt;/h2&gt;
&lt;p&gt;The write path is &lt;code&gt;PUT /suite-api/api/resources&lt;/code&gt;. The body is the full resource, with the identifier&#39;s value changed, and the resource&#39;s own ID passed in a field literally called &lt;code&gt;identifier&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;# file&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; update_resource.json&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;identifier&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;resource-id&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;resourceKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;cluster-name&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;adapterKindKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SupervisorAdapter&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;resourceKindKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GuestCluster&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;resourceIdentifiers&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;GUEST_CLUSTER_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;MONITORING_ENABLED&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;POD_CONTAINER_MONITORING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/mark&gt;
&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SUPERVISOR_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;identifierType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VC_UUID&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;dataType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;STRING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;isPartOfUniqueness&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sk&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-X&lt;/span&gt; PUT &lt;span class=&quot;token string&quot;&gt;&quot;https://&amp;lt;host&gt;/suite-api/api/resources&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Authorization: OpsToken &lt;span class=&quot;token variable&quot;&gt;$TOKEN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Accept: application/json&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; @update_resource.json&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A follow-up &lt;code&gt;GET&lt;/code&gt; on the resource or check in the UI confirmed the change has been applied successfully, with pod and container details now showing up in VCF Operations:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/03-enable-pod-monitoring-in-vcf-operations-api/pod-and-container-details-after-enabling.png&quot; alt=&quot;Pod and container details after enabling pod monitoring&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Putting it into a Python script&lt;/h2&gt;
&lt;p&gt;Broadcom put together an official Python SDK for VCF: &lt;strong&gt;&lt;a href=&quot;https://pypi.org/project/vcf-sdk/&quot;&gt;vcf-sdk&lt;/a&gt;&lt;/strong&gt;, a meta-package that pulls in per-product client libraries - &lt;code&gt;vmware-vcenter&lt;/code&gt;, &lt;code&gt;vcf-nsx&lt;/code&gt;, &lt;code&gt;vcf-operations&lt;/code&gt;, etc. The one we need is &lt;code&gt;vcf-operations&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Since I am not much of a programmer, I utilized the SDK and AI to help me out with putting this together. The code can be found here: &lt;a href=&quot;https://github.com/christschn81/runtimezero-posts-additional-files/tree/main/03-enable-pod-monitoring-in-vcf-operations-api&quot;&gt;Python client&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install and usage:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;python3 &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; venv .venv &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; vcf-operations&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;9.1&lt;/span&gt;.0.0

&lt;span class=&quot;token comment&quot;&gt;# list clusters and current state&lt;/span&gt;
python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--list&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# enable on a named cluster&lt;/span&gt;
python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; bookstore-app &lt;span class=&quot;token parameter variable&quot;&gt;--enable&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# no --cluster given -&gt; interactive picker&lt;/span&gt;
python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--enable&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The password is prompted for interactively when &lt;code&gt;--password&lt;/code&gt; is omitted. For unattended runs, set &lt;code&gt;VCF_OPS_PASSWORD&lt;/code&gt; instead of passing it on the command line.&lt;/p&gt;
&lt;p&gt;I ran this end-to-end (list -&amp;gt; enable -&amp;gt; verify -&amp;gt; disable) against a live VCF Operations 9.1 appliance:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--list&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                     POD MONITORING
metrics-test             disabled
kubernetes-cluster-93hv  disabled
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; metrics-test &lt;span class=&quot;token parameter variable&quot;&gt;--enable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;metrics-test: pod monitoring enabled
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--list&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                     POD MONITORING
metrics-test             enabled
kubernetes-cluster-93hv  disabled
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;python3 set_pod_monitoring.py &lt;span class=&quot;token parameter variable&quot;&gt;--host&lt;/span&gt; ops-a.site-a.vcf.lab &lt;span class=&quot;token parameter variable&quot;&gt;--username&lt;/span&gt; admin &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; metrics-test &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; kubernetes-cluster-93hv &lt;span class=&quot;token parameter variable&quot;&gt;--disable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;metrics-test: pod monitoring disabled
kubernetes-cluster-93hv: already disabled, skipping
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;Pod and container metrics carry a cost - more data points, more storage, more noise - which is why the VCF Operations leaves them off by default. Being able to flip that on and off through the API, rather than only by clicking through the UI, makes it practical to enable the extra detail exactly when it&#39;s needed - chasing down a noisy workload or an OOM-killed pod - and turn it back off once the investigation is done, instead of leaving it running indefinitely out of convenience.&lt;/p&gt;
&lt;p&gt;Next up: I want to do this in VCF Automation, so pod monitoring can be toggled automatically as part of a cluster&#39;s day-2 workflow or deployment.&lt;/p&gt;
</content>
    <category term="Observability"/>
    <category term="VKS"/>
  </entry>
  <entry>
    <title>Configuring Cluster Autoscaler Scan Interval on VKS</title>
    <link href="https://runtimezero.eu/posts/autoscaler-scan-interval-for-vks/"/>
    <id>https://runtimezero.eu/posts/autoscaler-scan-interval-for-vks/</id>
    <published>2026-08-01T00:00:00.000Z</published>
    <updated>2026-08-06T00:00:00.000Z</updated>
    <summary>Cluster Autoscaler ships with VKS out of the box, but tuning its scaling speed isn&#39;t officially documented. Here&#39;s how to configure the scan-interval with proof it actually works.</summary>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update Aug 6 2026:&lt;/strong&gt; verified the setting survives a cluster and addon upgrade — see &lt;a href=&quot;#update-testing-upgrade-workflows&quot;&gt;Testing upgrade workflows&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Cluster Autoscaler in VMware vSphere Kubernetes Service (VKS)&lt;/h2&gt;
&lt;p&gt;Cluster Autoscaler is provided as one of the available and supported addons in VKS. This has been the case for many years and there have been meaningful improvements in how Cluster Autoscaler is implemented and its capabilities. Two of my favorites are &amp;quot;scale-to-zero&amp;quot; and the automatic installation provided by VKS during cluster deployment. VKS also takes care of upgrading Cluster Autoscaler to match the cluster version - pretty neat.&lt;/p&gt;
&lt;h2&gt;Configuring Cluster Autoscaler Behaviour&lt;/h2&gt;
&lt;p&gt;One of my clients asked me if it is possible to influence how Cluster Autoscaler behaves, specifically how quickly scaling happens. The answer was not easily found and is not officially documented (yet).&lt;/p&gt;
&lt;p&gt;First let&#39;s look at what is documented. Cluster Autoscaler provides various configuration parameters to influence its mode of operation. A helpful resource can be found here: &lt;a href=&quot;https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md&quot;&gt;Cluster Autoscaler FAQ&lt;/a&gt;. The parameter to influence scale up speed is determined by the &lt;code&gt;--scan-interval&lt;/code&gt; setting, which should default to 10s if not specified.&lt;/p&gt;
&lt;p&gt;The current state of what can be configured is covered in the &lt;a href=&quot;https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vcf-consumption/latest/managing-vsphere-kuberenetes-service-clusters-and-workloads/autoscaling-tkg-service-clusters.html&quot;&gt;VMware Cloud Foundation Consumption&lt;/a&gt; documentation. VKS is using &lt;a href=&quot;https://carvel.dev/&quot;&gt;Carvel&lt;/a&gt; tools for packaging and managing addons, which stores the configuration in a Kubernetes secret. The available parameters are:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;ignoreDaemonsetsUtilization&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;maxNodeProvisionTime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 15m
  &lt;span class=&quot;token key atrule&quot;&gt;maxNodesTotal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;metricsPort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8085&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterAdd&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10m
  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterDelete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10s
  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterFailure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 3m
  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownUnneededTime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10m
&lt;span class=&quot;token key atrule&quot;&gt;clusterConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;clusterName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;CLUSTER_NAME&quot;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;clusterNamespace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VSPHERE_NAMESPACE&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;paused&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notably the scan-interval is missing from the arguments list, but can still be specified using an undocumented &lt;code&gt;extraArguments&lt;/code&gt; section like so:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;ignoreDaemonsetsUtilization&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;maxNodeProvisionTime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 15m&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;maxNodesTotal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;metricsPort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8085&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterAdd&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10m&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterDelete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10s&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownDelayAfterFailure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 3m&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;scaleDownUnneededTime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10m&lt;/span&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;extraArguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;/mark&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; scan&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;interval=60s&lt;/mark&gt;
&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;clusterConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;clusterName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;CLUSTER_NAME&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token key atrule&quot;&gt;clusterNamespace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;VSPHERE_NAMESPACE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;paused&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Time to try this out and verify the result.&lt;/p&gt;
&lt;h2&gt;Verification&lt;/h2&gt;
&lt;p&gt;I am using VCF Automation to get a cluster up and running quickly with autoscaling already enabled. This particular cluster is running vSphere Kubernetes Release (VKr) version 1.35.5, with a single control plane and autoscaler number of nodes set to 0-3.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/02-autoscaler-scan-interval-for-vks/k8s-cluster.png&quot; alt=&quot;VKS cluster with automatic autoscaling enabled&quot;&gt;&lt;/p&gt;
&lt;p&gt;Logging into the cluster and checking the default behaviour, we can confirm that the default interval is indeed 10s. This can be seen in the timing of the log messages and also the message itself:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Downloads/kubernetes-cluster-746q-kubeconfig.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl logs cluster-autoscaler-7cb8bb799c-8ctfv &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; triggered&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;I0730 14:26:07.622322       1 trigger.go:98] Autoscaler loop triggered by a 10s timer
I0730 14:26:19.638775       1 trigger.go:98] Autoscaler loop triggered by a 10s timer
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In order to change this we can apply the configuration from before, which overrides the existing secret containing the current configuration. For reference the complete definition looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# file: autoscaler-values.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;apiVersion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; v1
&lt;span class=&quot;token key atrule&quot;&gt;kind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Secret
&lt;span class=&quot;token key atrule&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; kubernetes&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cluster&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;746q&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cluster&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;autoscaler&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;values
  &lt;span class=&quot;token key atrule&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; vmware&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;system&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;tkg
&lt;span class=&quot;token key atrule&quot;&gt;stringData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;values.yaml&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
    ---
    vksAddonManagement: true
    priorityClassName: &quot;&quot;
    clusterConfig:
      clusterName: &quot;kubernetes-cluster-746q&quot;
      clusterNamespace: &quot;development-east-a-nlg6r&quot;
    arguments:
      metricsPort: 8085
      maxNodesTotal: 0
      scaleDownDelayAfterAdd: &quot;10m&quot;
      scaleDownDelayAfterDelete: &quot;10s&quot;
      scaleDownDelayAfterFailure: &quot;3m&quot;
      scaleDownUnneededTime: &quot;10m&quot;
      maxNodeProvisionTime: &quot;15m&quot;
      ignoreDaemonsetsUtilization: true
      startupTaint: &quot;node.cluster.x-k8s.io/uninitialized&quot;
      extraArguments:
      - scan-interval=60s
    paused: false
    resources:
      requests:
        cpu: &quot;25m&quot;
        memory: &quot;50Mi&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl apply &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; autoscaler-values.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;secret/kubernetes-cluster-746q-cluster-autoscaler-values configured
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get pods &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; auto&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;cluster-autoscaler-76f9ff5574-vssmc                           1/1     Running   0               31s
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl logs cluster-autoscaler-76f9ff5574-vssmc &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; triggered&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;I0730 14:56:00.215137       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
I0730 14:57:02.246144       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And indeed the change got picked up! This confirms that the scan-interval parameter can be set via the extraArguments field.&lt;/p&gt;
&lt;h2&gt;Choosing a value&lt;/h2&gt;
&lt;p&gt;I used 60s here because a longer interval is easy to confirm in the logs, not because it&#39;s a recommendation. The parameter works in both directions: a shorter interval makes Cluster Autoscaler re-evaluate more often — faster reaction to pending pods, at the cost of more API calls and CPU on the autoscaler pod. If your goal is quicker scale-up, go below the 10s default, not above it. Keep in mind &lt;code&gt;scan-interval&lt;/code&gt; is only one factor in how fast a node actually arrives — maxNodeProvisionTime and the underlying VM provisioning time usually dominate. VCF 9.1 has you covered though, because of the new &amp;quot;Fast Deploy&amp;quot; capability - dropping provisioning time significantly.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;extraArguments&lt;/code&gt; is undocumented at this time. It works, but it isn&#39;t in the VCF documentation.&lt;/li&gt;
&lt;li&gt;Applying the change restarts the autoscaler, as the deployment needs to get reconciled after the secret has been changed. That means scaling will not be available for a short period of time.&lt;/li&gt;
&lt;li&gt;If the addon is managed by VKS, which upgrades Cluster Autoscaler along with the cluster, read the update section on where to properly adjust the addon values so an upgrade does not reset things.&lt;/li&gt;
&lt;li&gt;There are two more ways to install addons in VKS. Either through plain &lt;code&gt;kubectl&lt;/code&gt; or &lt;code&gt;vcf&lt;/code&gt; CLI addon management. If you use one of the two, then applying the &lt;code&gt;extraArguments&lt;/code&gt; section either survives the upgrade or gets reapplied as part of the upgrade workflow. This is well documented in the respective upgrade sections here: &lt;a href=&quot;https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vcf-consumption/latest/managing-vsphere-kuberenetes-service-clusters-and-workloads/autoscaling-tkg-service-clusters.html&quot;&gt;VMware Cloud Foundation Consumption&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Update: Testing upgrade workflows&lt;/h2&gt;
&lt;p&gt;When using the automatic installation for Cluster Autoscaler the configuration source for the addon lives outside the cluster in the vSphere Namespace where the cluster is instantiated. It is captured in an &lt;code&gt;AddonConfig&lt;/code&gt; that gets created before the cluster is installed and follows a deterministic naming scheme: &lt;code&gt;&amp;lt;CLUSTER-NAME&amp;gt;-cluster-autoscaler&lt;/code&gt;. So let&#39;s try the upgrade from the beginning:&lt;/p&gt;
&lt;p&gt;First a fresh cluster is needed - again using version 1.35.5 and VCF Automation to provide it:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/02-autoscaler-scan-interval-for-vks/k8s-new-cluster.png&quot; alt=&quot;New VKS cluster for upgrade testing&quot;&gt;&lt;/p&gt;
&lt;p&gt;Find the &lt;code&gt;AddonConfig&lt;/code&gt; after logging into the vSphere Namespace:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;vcf context use&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;? Select a context sv:development-east-a-nlg6r
&lt;span class=&quot;highlight-line&quot;&gt;[ok] Token is still active. Skipped the token refresh for context &quot;sv:development-east-a-nlg6r&quot;&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;[i] Successfully activated context &#39;sv:development-east-a-nlg6r&#39; (Type: kubernetes) &lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;[i] Fetching recommended plugins for active context &#39;sv:development-east-a-nlg6r&#39;...&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get AddonConfig &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; autoscaler &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                                            ADDONCONFIGDEFINITION                                                   CLUSTER                   READY   AGE
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;kubernetes-cluster-2qh5-cluster-autoscaler      cluster-autoscaler.vks.vmware.com.1.35.0---vmware.3-vks.1               kubernetes-cluster-2qh5   True    103s&lt;/mark&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Adding the &lt;code&gt;extraArguments&lt;/code&gt; section to the &lt;code&gt;AddonConfig&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl edit  addonconfig kubernetes-cluster-2qh5-cluster-autoscaler&lt;/span&gt;&lt;/span&gt;&lt;/mark&gt;
&lt;span class=&quot;token output&quot;&gt;addonconfig.addons.kubernetes.vmware.com/kubernetes-cluster-2qh5-cluster-autoscaler edited
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get  addonconfig kubernetes-cluster-2qh5-cluster-autoscaler &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; yaml &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-B&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; scan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;spec:
&lt;span class=&quot;highlight-line&quot;&gt;  addonConfigDefinitionRef:&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    name: cluster-autoscaler.vks.vmware.com.1.35.0---vmware.3-vks.1&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    namespace: vmware-system-vks-public&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  clusterName: kubernetes-cluster-2qh5&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;  values:&lt;/span&gt;
&lt;span class=&quot;highlight-line&quot;&gt;    arguments:&lt;/span&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;      extraArguments:&lt;/mark&gt;
&lt;mark class=&quot;highlight-line highlight-line-active&quot;&gt;      - scan-interval=60s&lt;/mark&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And checking the change is live in the cluster:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Downloads/kubernetes-cluster-2qh5-kubeconfig.yaml &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get nodes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                                                              STATUS   ROLES           AGE     VERSION
kubernetes-cluster-2qh5-bsgqs-bxwnq                               Ready    control-plane   5m12s   v1.35.5+vmware.1
kubernetes-cluster-2qh5-kubernetes-cluster-2qh5-np-hxss-trrxtvj   Ready    &amp;lt;none&gt;          3m18s   v1.35.5+vmware.1
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get pods &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; scale&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;cluster-autoscaler-6c78d798cf-5bls6                           1/1     Running   0          69s
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl logs cluster-autoscaler-6c78d798cf-5bls6 &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; timer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;I0806 07:56:34.223878       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nice - &lt;code&gt;scan-interval&lt;/code&gt; got changed to our desired 60s value. Now the cluster is upgraded to version 1.36.1 - again via the comfort of VCF Automation, where this is a one-click operation:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://runtimezero.eu/assets/images/posts/02-autoscaler-scan-interval-for-vks/k8s-upgrade-cluster.png&quot; alt=&quot;Upgrading the new VKS cluster&quot;&gt;&lt;/p&gt;
&lt;p&gt;Confirm Cluster Autoscaler got upgraded along with the VKr:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get AddonConfig&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                                            ADDONCONFIGDEFINITION                                                   CLUSTER                   READY   AGE
kubernetes-cluster-2qh5-cluster-autoscaler      cluster-autoscaler.vks.vmware.com.1.36.0---vmware.1-vks.1               kubernetes-cluster-2qh5   True    
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get  addonconfig kubernetes-cluster-2qh5-cluster-autoscaler &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; yaml &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-B&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; scan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;spec:
  addonConfigDefinitionRef:
    name: cluster-autoscaler.vks.vmware.com.1.36.0---vmware.1-vks.1
    namespace: vmware-system-vks-public
  clusterName: kubernetes-cluster-2qh5
  values:
    arguments:
      extraArguments:
      - scan-interval=60s
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;AddonConfig&lt;/code&gt; got updated to reflect the new version - the &lt;code&gt;extraArguments&lt;/code&gt; section is still in place. Now also confirm in the cluster itself:&lt;/p&gt;
&lt;pre class=&quot;language-shellsession&quot;&gt;&lt;code class=&quot;language-shellsession&quot;&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Downloads/kubernetes-cluster-2qh5-kubeconfig.yaml &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get nodes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAME                                                              STATUS   ROLES           AGE     VERSION
kubernetes-cluster-2qh5-bsgqs-cnlz9                               Ready    control-plane   5m53s   v1.36.1+vmware.4
kubernetes-cluster-2qh5-kubernetes-cluster-2qh5-np-hxss-trgmnkg   Ready    &amp;lt;none&gt;          2m5s    v1.36.1+vmware.4
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get pkgi &lt;span class=&quot;token parameter variable&quot;&gt;-A&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; scale&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;NAMESPACE            NAME                                                 PACKAGE NAME                                  PACKAGE VERSION                 DESCRIPTION                                                            AGE   PAUSED
vmware-system-tkg    kubernetes-cluster-2qh5-cluster-autoscaler           cluster-autoscaler.kubernetes.vmware.com      1.36.0+vmware.1-vks.1           Reconcile succeeded                                                    15m   
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl get pods &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; scale&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;cluster-autoscaler-775dc8747c-4d882                           1/1     Running   0          6m54s
&lt;/span&gt;&lt;span class=&quot;token command&quot;&gt;&lt;span class=&quot;token shell-symbol important&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;token bash language-bash&quot;&gt;kubectl logs cluster-autoscaler-775dc8747c-4d882 &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; kube-system &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; timer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token output&quot;&gt;I0806 08:06:04.780859       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
I0806 08:07:06.814368       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
I0806 08:08:08.432838       1 trigger.go:98] Autoscaler loop triggered by a 1m0s timer
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The cluster got upgraded correctly, Cluster Autoscaler version got bumbed to match the Kubernetes version and the custom configuration is still in place.&lt;/p&gt;
</content>
    <category term="VKS"/>
    <category term="Kubernetes"/>
  </entry>
  <entry>
    <title>In the Making</title>
    <link href="https://runtimezero.eu/posts/welcome-to-runtime-zero/"/>
    <id>https://runtimezero.eu/posts/welcome-to-runtime-zero/</id>
    <published>2026-07-01T00:00:00.000Z</published>
    <updated>2026-07-01T00:00:00.000Z</updated>
    <summary>Runtimezero will soon be up and running with it&#39;s true first post.</summary>
    <content type="html">&lt;h2&gt;Welcome to Runtime Zero&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Runtime Zero&lt;/strong&gt; is a technical blog with field notes on VMware technology, Kubernetes, industry trends and other things - written for the people who run this stuff and sometimes for the ones in charge of the budget.&lt;/p&gt;
&lt;p&gt;Opinions are my own.&lt;/p&gt;
&lt;p&gt;It is a clean and highly opinionated space. I highly value privacy, so this site runs without trackers, popups, CDNs or ads.&lt;/p&gt;
&lt;h2&gt;The Site Manifesto&lt;/h2&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# file: manifesto.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;runtimezero.eu&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Active &amp;amp; Under Construction&quot;&lt;/span&gt;

&lt;span class=&quot;token key atrule&quot;&gt;maintainer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Christian Schausberger&quot;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;current_title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Solutions Architect at Broadcom&quot;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;experience&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;20+ years&quot;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;opinions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;unfiltered, my own&quot;&lt;/span&gt;

&lt;span class=&quot;token key atrule&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;stack&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Eleventy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Markdown&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Clarity&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;bloat_index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0.0%&quot;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;trackers_installed&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;annoying_popups&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;newsletter_walls&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;cookies_set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1 (light or dark mode preference)&quot;&lt;/span&gt;

&lt;span class=&quot;token key atrule&quot;&gt;intended_audience&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Everyone who wants to understand how (but is too lazy to read the docs)&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Everyone who wants to understand why (but is too lazy to read the docs)&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;The brave souls managing the infrastructure budget&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
    <category term="Everything Else"/>
  </entry>
</feed>
