<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tasks on inference-cache</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/</link><description>Recent content in Tasks on inference-cache</description><generator>Hugo</generator><language>en</language><atom:link href="https://cachebox-project.github.io/inference-cache/docs/tasks/index.xml" rel="self" type="application/rss+xml"/><item><title>Deploy a CacheBackend</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/deploy-a-cache-backend/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/tasks/deploy-a-cache-backend/</guid><description>&lt;p&gt;Get a cache-aware inference setup running in about five minutes. This assumes the
inference-cache operator (controller + policy server + CRDs) is already
&lt;a href="https://cachebox-project.github.io/inference-cache/docs/installation/"&gt;installed&lt;/a&gt;.&lt;/p&gt;


&lt;h2 id="1-write-the-minimum-cachebackend"&gt;
1. Write the minimum CacheBackend
&lt;a href="#1-write-the-minimum-cachebackend" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;CacheBackend&lt;/code&gt; binds to your inference-engine pods by label and makes their KV cache
reusable across requests. Here is the minimum-viable spec:&lt;/p&gt;</description></item><item><title>Bind an engine</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/bind-an-engine/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/tasks/bind-an-engine/</guid><description>&lt;p&gt;Binding is how a &lt;code&gt;CacheBackend&lt;/code&gt; claims inference-engine Pods in its namespace.
The engine Deployment and image remain inference-system owned.&lt;/p&gt;


&lt;h2 id="lifecycle"&gt;
Lifecycle
&lt;a href="#lifecycle" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Apply a typed &lt;code&gt;CacheBackend&lt;/code&gt; with &lt;code&gt;spec.lmCache.topology: PodLocal&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create engine Pods whose labels include every
&lt;code&gt;spec.engineSelector.matchLabels&lt;/code&gt; entry.&lt;/li&gt;
&lt;li&gt;At Pod CREATE, the webhook atomically injects the LMCache MP native sidecar,
shared memory, and the runtime-specific connector wire.&lt;/li&gt;
&lt;li&gt;When configured, the &lt;code&gt;kvevent-subscriber&lt;/code&gt; sidecar reports KV events to the
routing index.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="alert alert-warning" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;The match is evaluated once, at Pod CREATE&lt;/h4&gt;

 Relabeling an existing Pod does not re-run admission. Recreate the Pod after
changing labels or CacheBackend configuration.

&lt;/div&gt;



&lt;h2 id="typed-vllm-mp-wire"&gt;
Typed vLLM MP wire
&lt;a href="#typed-vllm-mp-wire" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The vLLM adapter injects &lt;code&gt;LMCacheMPConnector&lt;/code&gt; with the module path
&lt;code&gt;lmcache.integration.vllm.lmcache_mp_connector&lt;/code&gt;, loopback host/port,
&lt;code&gt;--disable-hybrid-kv-cache-manager&lt;/code&gt;, &lt;code&gt;PYTHONHASHSEED=0&lt;/code&gt;, and the fail-open
value. Reserved entries are:&lt;/p&gt;</description></item><item><title>Tune lookup and eviction</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/tune-lookup-and-eviction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/tasks/tune-lookup-and-eviction/</guid><description>&lt;p&gt;Most namespaces need no &lt;code&gt;CachePolicy&lt;/code&gt; — the server ships sane defaults. Reach for one when
you want to change how lookups are filtered/ranked, or how the index evicts, in a specific
namespace. There is &lt;strong&gt;at most one &lt;code&gt;CachePolicy&lt;/code&gt; per namespace&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://cachebox-project.github.io/inference-cache/docs/concepts/cachepolicy/"&gt;CachePolicy&lt;/a&gt; for the field-by-field reference; this page
is worked examples.&lt;/p&gt;


&lt;h2 id="a-production-shaped-policy"&gt;
A production-shaped policy
&lt;a href="#a-production-shaped-policy" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;inferencecache.io/v1alpha1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;CachePolicy&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;default&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;serving&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;eviction&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;LRU&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;evictionTTL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;30m&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;minimumPrefixTokens&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;16&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# skip lookups for very short prompts&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;minimumMatchedTokens&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;64&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# a replica needs 4 KV blocks of overlap to be offered&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;routingFloorScore&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# the top replica must clear this score&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;lookupTimeoutMs&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;5&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# server-side time budget per lookup (fail-open TIMEOUT)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;strategy&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;enableChainMatching&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;enableTenantHot&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;affinityRouting&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Enabled&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="recipes"&gt;
Recipes
&lt;a href="#recipes" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;


&lt;h3 id="reduce-noisy-hints-from-shared-system-prompts"&gt;
Reduce noisy hints from shared system prompts
&lt;a href="#reduce-noisy-hints-from-shared-system-prompts" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Chat templates give every request the same long system-prompt prefix, which would otherwise
match every replica. The default floors already handle this, but you can tighten them:&lt;/p&gt;</description></item><item><title>Isolate tenants</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/isolate-tenants/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/tasks/isolate-tenants/</guid><description>&lt;p&gt;Multi-tenancy in inference-cache comes in two layers: &lt;strong&gt;structural identity isolation&lt;/strong&gt;
(always on) and an optional &lt;strong&gt;entry-count quota&lt;/strong&gt;. For byte-level isolation you use
Kubernetes, not a cache field — this page explains why and how.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://cachebox-project.github.io/inference-cache/docs/concepts/cachetenant/"&gt;CacheTenant&lt;/a&gt; for the field reference.&lt;/p&gt;


&lt;h2 id="identity-isolation-is-automatic"&gt;
Identity isolation is automatic
&lt;a href="#identity-isolation-is-automatic" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The index is keyed by &lt;code&gt;(tenant, model, hash_scheme, adapter_id, prefix_hash)&lt;/code&gt;. Because
&lt;code&gt;tenant&lt;/code&gt; is part of the key, one tenant&amp;rsquo;s hints can never collide with another&amp;rsquo;s, and
&lt;code&gt;LookupRoute&lt;/code&gt; is tenant-scoped. You get this the moment your producers report a &lt;code&gt;tenant_id&lt;/code&gt;
— you do not need a &lt;code&gt;CacheTenant&lt;/code&gt; for isolation to hold.&lt;/p&gt;</description></item><item><title>Monitor the cache plane</title><link>https://cachebox-project.github.io/inference-cache/docs/tasks/monitor-the-cache-plane/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/tasks/monitor-the-cache-plane/</guid><description>&lt;p&gt;There are three complementary ways to watch a running install: the Kubernetes status
surfaces, the Prometheus metrics, and the &lt;code&gt;inferencecache doctor&lt;/code&gt; pre-flight diagnostic.&lt;/p&gt;


&lt;h2 id="kubectl-surfaces"&gt;
kubectl surfaces
&lt;a href="#kubectl-surfaces" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Per-backend health, matched pods, and live prefix/event evidence&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get cachebackend -A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# The cluster-wide cache &amp;#34;world map&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get cacheindex cluster-default -o yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Per-tenant entry counts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get cachetenant -A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When a backend is not &lt;code&gt;Ready&lt;/code&gt;, the reason is in &lt;code&gt;.status.conditions[]&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>