<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Operations on bouine</title><link>https://bouine.org/v0.4/docs/operations/</link><description>Recent content in Operations on bouine</description><generator>Hugo</generator><language>en</language><atom:link href="https://bouine.org/v0.4/docs/operations/index.xml" rel="self" type="application/rss+xml"/><item><title>Lifecycle</title><link>https://bouine.org/v0.4/docs/operations/lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/lifecycle/</guid><description>&lt;h2 id="starting-bouine"&gt;Starting bouine&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bouine serve --config /etc/bouine/config.yaml --log-format json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;On Kubernetes the StatefulSet container runs this command via the Helm
chart (see &lt;code&gt;deploy/helm/bouine/templates/statefulset.yaml&lt;/code&gt;). The
&lt;code&gt;--log-format json&lt;/code&gt; flag ensures structured logging for aggregation.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://bouine.org/v0.4/docs/operations/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/authentication/</guid><description>&lt;p&gt;All write endpoints require &lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code&gt;. The token is resolved in priority order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BOUINE_ADMIN_TOKEN&lt;/code&gt; environment variable&lt;/strong&gt; (recommended for Kubernetes / Vault injection)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;admin.token&lt;/code&gt; in the config file&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-generated&lt;/strong&gt; random token (logged as &lt;code&gt;WARN&lt;/code&gt; at startup)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="environment-variable"&gt;Environment variable&lt;/h3&gt;
&lt;p&gt;Set &lt;code&gt;BOUINE_ADMIN_TOKEN&lt;/code&gt; to inject the token without baking it into the config ConfigMap:&lt;/p&gt;</description></item><item><title>Cache invalidation</title><link>https://bouine.org/v0.4/docs/operations/cache-invalidation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/cache-invalidation/</guid><description>&lt;h2 id="purge-exact-url"&gt;Purge (exact URL)&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;# CLI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bouine purge https://example.com/products/123 --token &amp;lt;token&amp;gt;
&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:#6272a4"&gt;# API&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -X POST http://127.0.0.1:9000/v1/purge &lt;span style="color:#f1fa8c"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#f1fa8c"&gt;&amp;#34;Authorization: Bearer &amp;lt;token&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#f1fa8c"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#f1fa8c"&gt;&amp;#39;{&amp;#34;url&amp;#34;:&amp;#34;https://example.com/products/123&amp;#34;}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;In a cluster, the purge is forwarded to all live peers via HTTP fan-out (in &lt;code&gt;strong&lt;/code&gt; mode) or gossiped via the memberlist broadcast queue (in &lt;code&gt;eventual&lt;/code&gt; mode).&lt;/p&gt;</description></item><item><title>Cluster consistency modes</title><link>https://bouine.org/v0.4/docs/operations/cluster-modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/cluster-modes/</guid><description>&lt;h2 id="verify-your-mode"&gt;Verify your mode&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;# Prometheus metric: always 1 with the mode label.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -s http://127.0.0.1:9000/metrics | grep bouine_cluster_mode_info
&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:#6272a4"&gt;# Admin API: /v1/cluster/peers returns all members in every mode.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -s http://127.0.0.1:9000/v1/cluster/peers &lt;span style="color:#f1fa8c"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#f1fa8c"&gt;&amp;#34;Authorization: Bearer &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;${&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;BOUINE_ADMIN_TOKEN&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;
&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:#6272a4"&gt;# CLI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bouine cluster peers --server 127.0.0.1:9000 --token &lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;${&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;BOUINE_ADMIN_TOKEN&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Expected: every node reports the same &lt;code&gt;mode&lt;/code&gt; label. If they disagree, the cluster
has a configuration drift — every pod must use the same mode.&lt;/p&gt;</description></item><item><title>Monitoring</title><link>https://bouine.org/v0.4/docs/operations/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/monitoring/</guid><description>&lt;h2 id="prometheus-metrics"&gt;Prometheus metrics&lt;/h2&gt;
&lt;p&gt;All metrics are exposed at &lt;code&gt;GET /metrics&lt;/code&gt; on the admin port (default &lt;code&gt;:9000&lt;/code&gt;) in Prometheus text format. No authentication is required to scrape this endpoint.&lt;/p&gt;
&lt;h3 id="traffic-red"&gt;Traffic (RED)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metric&lt;/th&gt;
 &lt;th&gt;Labels&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bouine_requests_total&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;method&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;cache_result&lt;/code&gt;, &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;route&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total requests processed. &lt;strong&gt;This is the primary RED counter.&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bouine_request_duration_seconds&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;method&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;cache_result&lt;/code&gt;, &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;route&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Request latency histogram. Includes native histogram buckets for higher-resolution percentiles. Carries Prometheus &lt;strong&gt;exemplars&lt;/strong&gt; linking high-latency observations to a trace ID when tracing is enabled.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bouine_response_bytes_total&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;method&lt;/code&gt;, &lt;code&gt;cache_result&lt;/code&gt;, &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;route&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total bytes written in responses.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;cache_result&lt;/code&gt;&lt;/strong&gt; values: &lt;code&gt;HIT&lt;/code&gt;, &lt;code&gt;MISS&lt;/code&gt;, &lt;code&gt;STALE&lt;/code&gt;, &lt;code&gt;REVALIDATED&lt;/code&gt;, &lt;code&gt;BYPASS&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Dashboard</title><link>https://bouine.org/v0.4/docs/operations/dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/dashboard/</guid><description>&lt;p&gt;The operator dashboard is embedded directly in the admin server — no extra process, no Node toolchain. Open it at:&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http://&amp;lt;admin-addr&amp;gt;/dashboard/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Default on localhost: &lt;strong&gt;

&lt;a class="link link--text" href="http://localhost:9000/dashboard/" rel="external"&gt;http://localhost:9000/dashboard/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="logging-in"&gt;Logging in&lt;/h2&gt;
&lt;p&gt;The dashboard uses a session cookie derived from the admin bearer token.&lt;/p&gt;</description></item><item><title>Kubernetes operations</title><link>https://bouine.org/v0.4/docs/operations/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/kubernetes/</guid><description>&lt;h2 id="scaling"&gt;Scaling&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl scale statefulset/bouine -n &amp;lt;namespace&amp;gt; --replicas&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Gossip auto-discovers peers via the headless Service DNS. New pods join the cluster within 60s.&lt;/p&gt;
&lt;h2 id="rolling-update-zero-5xx"&gt;Rolling update (zero 5xx)&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl rollout restart statefulset/bouine -n &amp;lt;namespace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl rollout status statefulset/bouine -n &amp;lt;namespace&amp;gt; --timeout&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;180s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;StatefulSet rolls one pod at a time (reverse ordinal). Each pod must pass the readiness probe (&lt;code&gt;GET /readyz&lt;/code&gt;) before the next is replaced.&lt;/p&gt;</description></item><item><title>Observability guide</title><link>https://bouine.org/v0.4/docs/operations/observability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/observability/</guid><description>&lt;p&gt;This guide walks you through deploying a complete observability stack for bouine using the &lt;strong&gt;Grafana LGTM&lt;/strong&gt; components (Loki, Grafana, Tempo, Mimir/Prometheus) and &lt;strong&gt;Grafana Alloy&lt;/strong&gt; as the unified collection agent.&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; monitoring namespace
&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; │ Grafana ──queries──▶ Prometheus (metrics) │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; │ Loki (logs) │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; │ Tempo (traces) │
&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; │ Grafana Alloy (single agent) │
&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; scrape :9000│ │OTLP :4318
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tail pod logs (k8s API) │
&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; bouine pods&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Grafana Alloy&lt;/strong&gt; replaces three separate agents:&lt;/p&gt;</description></item><item><title>Cloudflare CDN propagation</title><link>https://bouine.org/v0.4/docs/operations/cloudflare/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/cloudflare/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;When bouine sits behind Cloudflare (or any scenario where Cloudflare caches
responses delivered through bouine), invalidating a URL in bouine is not
enough — the entry may also be cached at the Cloudflare edge.&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://bouine.org/v0.4/docs/operations/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bouine.org/v0.4/docs/operations/troubleshooting/</guid><description>&lt;h2 id="quick-reference"&gt;Quick reference&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Symptom&lt;/th&gt;
 &lt;th&gt;Severity&lt;/th&gt;
 &lt;th&gt;Jump to&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Pods don&amp;rsquo;t discover each other&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Critical&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#pods-do-not-discover-each-other"&gt;Cluster discovery&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Rolling restart produces 503/502&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#rolling-restart-produces-503502"&gt;Rolling restart&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Purge doesn&amp;rsquo;t propagate&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#purge-does-not-propagate-across-cluster"&gt;Purge propagation&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HIT p99 spikes to 50–100 ms under load&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#hit-p99-spikes-to-50100-ms-under-load"&gt;GC stop-the-world pauses&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;X-Cache&lt;/code&gt; always MISS&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#x-cache-is-always-miss"&gt;Cache misses&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Stale reads on one node&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#stale-reads"&gt;Stale reads&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Low hit rate in eventual mode&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#low-hit-rate-in-eventual-mode"&gt;Low hit rate&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Docker build slow on Apple Silicon&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;

&lt;a class="link link--text" href="https://bouine.org/v0.4/docs/operations/troubleshooting/#docker-build-is-slow-on-apple-silicon"&gt;Docker build&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="cluster-discovery"&gt;Cluster discovery&lt;/h2&gt;
&lt;h3 id="pods-do-not-discover-each-other"&gt;Pods do not discover each other&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Check the headless Service:&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>