<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Vigil Controller</title><link>https://oss.nextdoor.com/vigil/docs/reference/</link><description>Recent content in Reference on Vigil Controller</description><generator>Hugo</generator><language>en</language><atom:link href="https://oss.nextdoor.com/vigil/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Configuration</title><link>https://oss.nextdoor.com/vigil/docs/reference/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://oss.nextdoor.com/vigil/docs/reference/configuration/</guid><description>&lt;h2 id="configuration-file">Configuration File&lt;/h2>
&lt;p>Vigil reads configuration from a YAML file (default: &lt;code>/etc/vigil/config/config.yaml&lt;/code>).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The taint key to watch for and remove&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">taintKey&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;node.example.com/initializing&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The taint effect to match&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">taintEffect&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;NoSchedule&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># All known temporary startup taint keys in the cluster.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Used for DaemonSet discovery only — Vigil does not remove these taints.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Their respective controllers (CSI drivers, CNI plugins) handle removal.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">knownStartupTaintKeys&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;node.example.com/initializing&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;cni.istio.io/not-ready&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;ebs.csi.aws.com/agent-not-ready&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;efs.csi.aws.com/agent-not-ready&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Maximum time to wait before removing taint anyway (seconds)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">timeoutSeconds&lt;/span>: &lt;span style="color:#ae81ff">120&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># DaemonSets to exclude from readiness checks&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">excludeDaemonSets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">byName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">namespace&lt;/span>: &lt;span style="color:#ae81ff">kube-system&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">slow-daemonset&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="cli-flags">CLI Flags&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Flag&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>--config&lt;/code>&lt;/td>
 &lt;td>&lt;code>/etc/vigil/config/config.yaml&lt;/code>&lt;/td>
 &lt;td>Config file path&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--metrics-bind-address&lt;/code>&lt;/td>
 &lt;td>&lt;code>:8080&lt;/code>&lt;/td>
 &lt;td>Metrics endpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--health-probe-bind-address&lt;/code>&lt;/td>
 &lt;td>&lt;code>:8081&lt;/code>&lt;/td>
 &lt;td>Health/readiness probes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--leader-elect&lt;/code>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>Enable leader election&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--zap-log-level&lt;/code>&lt;/td>
 &lt;td>(default)&lt;/td>
 &lt;td>Log verbosity&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="configuration-fields">Configuration Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>taintKey&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;code>node.nextdoor.com/initializing&lt;/code>&lt;/td>
 &lt;td>The taint key to watch and remove&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>taintEffect&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;code>NoSchedule&lt;/code>&lt;/td>
 &lt;td>The taint effect to match&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>knownStartupTaintKeys&lt;/code>&lt;/td>
 &lt;td>[]string&lt;/td>
 &lt;td>&lt;code>[taintKey]&lt;/code>&lt;/td>
 &lt;td>All temporary startup taint keys in the cluster (used for discovery only — Vigil does not remove these)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>timeoutSeconds&lt;/code>&lt;/td>
 &lt;td>int&lt;/td>
 &lt;td>&lt;code>120&lt;/code>&lt;/td>
 &lt;td>Max wait time before forced taint removal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>excludeDaemonSets.byName&lt;/code>&lt;/td>
 &lt;td>[]object&lt;/td>
 &lt;td>&lt;code>[]&lt;/code>&lt;/td>
 &lt;td>DaemonSets to exclude by namespace/name&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Metrics</title><link>https://oss.nextdoor.com/vigil/docs/reference/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://oss.nextdoor.com/vigil/docs/reference/metrics/</guid><description>&lt;h2 id="metrics">Metrics&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>vigil_tainted_nodes&lt;/code>&lt;/td>
 &lt;td>Gauge&lt;/td>
 &lt;td>Nodes currently waiting for DaemonSet readiness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_taint_removal_duration_seconds&lt;/code>&lt;/td>
 &lt;td>Histogram&lt;/td>
 &lt;td>Time from node creation to taint removal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_successful_removals_total&lt;/code>&lt;/td>
 &lt;td>Counter&lt;/td>
 &lt;td>Taint removals after all DaemonSets Ready&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_timeout_removals_total&lt;/code>&lt;/td>
 &lt;td>Counter&lt;/td>
 &lt;td>Taint removals due to timeout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_expected_daemonsets&lt;/code>&lt;/td>
 &lt;td>Gauge (by node)&lt;/td>
 &lt;td>Expected DaemonSets per node&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_ready_daemonsets&lt;/code>&lt;/td>
 &lt;td>Gauge (by node)&lt;/td>
 &lt;td>Ready DaemonSet pods per node&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_reconcile_errors_total&lt;/code>&lt;/td>
 &lt;td>Counter&lt;/td>
 &lt;td>Reconciliation errors&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_discovery_duration_seconds&lt;/code>&lt;/td>
 &lt;td>Histogram&lt;/td>
 &lt;td>Time to evaluate scheduling rules&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>vigil_timeout_blocking_daemonset_total&lt;/code>&lt;/td>
 &lt;td>Counter (by ds)&lt;/td>
 &lt;td>Which DaemonSet blocked at timeout&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="alerting">Alerting&lt;/h2>
&lt;p>Recommended alert rules:&lt;/p></description></item><item><title>Helm Chart</title><link>https://oss.nextdoor.com/vigil/docs/reference/helm-chart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://oss.nextdoor.com/vigil/docs/reference/helm-chart/</guid><description>&lt;h2 id="installation">Installation&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>helm repo add vigil https://oss.nextdoor.com/vigil
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>helm repo update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>helm install vigil vigil/vigil-controller &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --namespace vigil-system &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="key-values">Key Values&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Value&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>replicaCount&lt;/code>&lt;/td>
 &lt;td>&lt;code>2&lt;/code>&lt;/td>
 &lt;td>Number of controller replicas&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>image.repository&lt;/code>&lt;/td>
 &lt;td>&lt;code>ghcr.io/nextdoor/vigil&lt;/code>&lt;/td>
 &lt;td>Container image&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>image.tag&lt;/code>&lt;/td>
 &lt;td>Chart appVersion&lt;/td>
 &lt;td>Image tag&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>controllerManager.leaderElection.enabled&lt;/code>&lt;/td>
 &lt;td>&lt;code>true&lt;/code>&lt;/td>
 &lt;td>Leader election&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>controllerManager.logLevel&lt;/code>&lt;/td>
 &lt;td>&lt;code>info&lt;/code>&lt;/td>
 &lt;td>Log level&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config.taintKey&lt;/code>&lt;/td>
 &lt;td>&lt;code>node.nextdoor.com/initializing&lt;/code>&lt;/td>
 &lt;td>Taint key to watch&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config.taintEffect&lt;/code>&lt;/td>
 &lt;td>&lt;code>NoSchedule&lt;/code>&lt;/td>
 &lt;td>Taint effect&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config.timeoutSeconds&lt;/code>&lt;/td>
 &lt;td>&lt;code>120&lt;/code>&lt;/td>
 &lt;td>Timeout before forced removal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config.knownStartupTaintKeys&lt;/code>&lt;/td>
 &lt;td>See values.yaml&lt;/td>
 &lt;td>Temporary startup taints to ignore during discovery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>serviceMonitor.enabled&lt;/code>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>Create ServiceMonitor&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>resources.requests.cpu&lt;/code>&lt;/td>
 &lt;td>&lt;code>100m&lt;/code>&lt;/td>
 &lt;td>CPU request&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>resources.requests.memory&lt;/code>&lt;/td>
 &lt;td>&lt;code>64Mi&lt;/code>&lt;/td>
 &lt;td>Memory request&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>resources.limits.cpu&lt;/code>&lt;/td>
 &lt;td>&lt;code>500m&lt;/code>&lt;/td>
 &lt;td>CPU limit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>resources.limits.memory&lt;/code>&lt;/td>
 &lt;td>&lt;code>128Mi&lt;/code>&lt;/td>
 &lt;td>Memory limit&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>See the full &lt;a href="https://github.com/Nextdoor/vigil/blob/main/charts/vigil-controller/values.yaml">values.yaml&lt;/a> for all options.&lt;/p></description></item><item><title>Benchmarks</title><link>https://oss.nextdoor.com/vigil/docs/reference/benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://oss.nextdoor.com/vigil/docs/reference/benchmarks/</guid><description>&lt;!-- This page is auto-generated by the /stress-test skill. Do not edit manually. -->
&lt;h2 id="latest-benchmark-results">Latest Benchmark Results&lt;/h2>
&lt;p>&lt;strong>Run date:&lt;/strong> 2026-03-28T21:50:52Z
&lt;strong>Git SHA:&lt;/strong> &lt;code>1577d67&lt;/code>
&lt;strong>Node count:&lt;/strong> 10,000&lt;/p>
&lt;h3 id="latency">Latency&lt;/h3>
&lt;p>The stress test measures three distinct latency phases:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Pod startup&lt;/strong> — time from node creation until all expected DaemonSet pods
become Ready. This is dominated by simulated pod startup delays and reflects
real-world DaemonSet boot time. Excludes never-ready nodes.&lt;/li>
&lt;li>&lt;strong>Vigil reaction&lt;/strong> — time from all pods becoming Ready until the taint is
removed. This isolates Vigil&amp;rsquo;s controller overhead: reconcile loop detection,
readiness verification, and the taint removal API call.&lt;/li>
&lt;li>&lt;strong>End-to-end&lt;/strong> — total time from node creation to taint removal. For
never-ready nodes, this equals the controller timeout.&lt;/li>
&lt;/ul>
&lt;h4 id="pod-startup-latency">Pod Startup Latency&lt;/h4>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Percentile&lt;/th>
 &lt;th>Latency&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>p50&lt;/td>
 &lt;td>3,761ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p95&lt;/td>
 &lt;td>38,220ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p99&lt;/td>
 &lt;td>51,901ms&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h4 id="vigil-reaction-time">Vigil Reaction Time&lt;/h4>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Percentile&lt;/th>
 &lt;th>Latency&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>p50&lt;/td>
 &lt;td>1,000ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p95&lt;/td>
 &lt;td>1,901ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p99&lt;/td>
 &lt;td>1,981ms&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h4 id="end-to-end-latency">End-to-End Latency&lt;/h4>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Percentile&lt;/th>
 &lt;th>Latency&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>p50&lt;/td>
 &lt;td>5,023ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p95&lt;/td>
 &lt;td>30,206ms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>p99&lt;/td>
 &lt;td>30,416ms&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="outcomes">Outcomes&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Outcome&lt;/th>
 &lt;th>Count&lt;/th>
 &lt;th>Percentage&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Success&lt;/td>
 &lt;td>9,500&lt;/td>
 &lt;td>95.0%&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Timeout&lt;/td>
 &lt;td>500&lt;/td>
 &lt;td>5.0%&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Pending&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>0.0%&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="resource-utilization">Resource Utilization&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Value&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Peak Heap&lt;/td>
 &lt;td>275.8 MB&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Final Heap&lt;/td>
 &lt;td>224.1 MB&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>System Memory&lt;/td>
 &lt;td>315.2 MB&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>GC Cycles&lt;/td>
 &lt;td>229&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>GC CPU Fraction&lt;/td>
 &lt;td>0.03%&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="resource-utilization-over-time">Resource Utilization Over Time&lt;/h3>
&lt;h4 id="heap-memory">Heap Memory&lt;/h4>
&lt;pre class="mermaid">xychart-beta
 title &amp;#34;Heap Allocation Over Time&amp;#34;
 x-axis &amp;#34;Elapsed (s)&amp;#34; [5, 40, 75, 110, 145, 180, 215, 250, 285, 320, 355, 390, 425, 460, 495, 530, 565, 600, 635, 670, 705, 740, 775, 810, 845, 880, 915, 950, 985, 1020]
 y-axis &amp;#34;Heap (MB)&amp;#34; 0 --&amp;gt; 280
 line [8, 11, 24, 31, 47, 41, 60, 76, 86, 73, 86, 114, 117, 88, 99, 97, 157, 128, 163, 187, 194, 190, 165, 227, 174, 223, 140, 165, 186, 214]&lt;/pre>
&lt;h4 id="goroutines">Goroutines&lt;/h4>
&lt;pre class="mermaid">xychart-beta
 title &amp;#34;Active Goroutines Over Time&amp;#34;
 x-axis &amp;#34;Elapsed (s)&amp;#34; [5, 40, 75, 110, 145, 180, 215, 250, 285, 320, 355, 390, 425, 460, 495, 530, 565, 600, 635, 670, 705, 740, 775, 810, 845, 880, 915, 950, 985, 1020]
 y-axis &amp;#34;Goroutines&amp;#34; 0 --&amp;gt; 250
 line [140, 185, 197, 196, 195, 194, 192, 199, 199, 199, 190, 192, 192, 194, 196, 194, 195, 199, 199, 192, 195, 199, 194, 204, 194, 194, 192, 190, 195, 133]&lt;/pre>
&lt;p>Memory grows linearly with node count (10 nodes/sec) as the informer cache
accumulates Node and Pod objects. The sawtooth pattern in heap allocation shows
the Go garbage collector reclaiming memory between allocation bursts. Goroutine
count remains stable (~190-200), confirming no goroutine leaks.&lt;/p></description></item></channel></rss>