This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch gh-pages
in repository
https://gitbox.apache.org/repos/asf/superset-kubernetes-operator.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new c7bea81 docs: deploy 5082162c5b7b081c405180c36b841bdd70ef487a
c7bea81 is described below
commit c7bea81fbf62c5733e21b4bc23920a95005608e3
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Oct 23 06:52:38 2026 +0000
docs: deploy 5082162c5b7b081c405180c36b841bdd70ef487a
---
architecture/overview/index.html | 2 +-
getting-started/index.html | 4 +-
search.json | 2 +-
user-guide/configuration/index.html | 406 ++++++++++++++++++++----------------
user-guide/installation/index.html | 1 +
user-guide/lifecycle/index.html | 18 +-
6 files changed, 238 insertions(+), 195 deletions(-)
diff --git a/architecture/overview/index.html b/architecture/overview/index.html
index aac50de..5263c4c 100644
--- a/architecture/overview/index.html
+++ b/architecture/overview/index.html
@@ -1567,7 +1567,7 @@ under the License.
<a id="__codelineno-5-7" name="__codelineno-5-7"
href="#__codelineno-5-7"></a><span class="c1"># Component config</span>
<a id="__codelineno-5-8" name="__codelineno-5-8"
href="#__codelineno-5-8"></a><span class="n">CELERY_ANNOTATIONS</span> <span
class="o">=</span> <span class="p">{</span><span
class="s2">"tasks.add"</span><span class="p">:</span> <span
class="p">{</span><span class="s2">"rate_limit"</span><span class="p">:</span>
<span class="s2">"10/s"</span><span class="p">}}</span>
</code></pre></div>
-<p>Note: All operator-managed settings (<code>SECRET_KEY</code>,
<code>SQLALCHEMY_DATABASE_URI</code>, web server port) are rendered into the
config file from operator-internal <code>SUPERSET_OPERATOR__*</code> env vars.
Both passthrough and structured metastore modes render
<code>SQLALCHEMY_DATABASE_URI</code> from
<code>SUPERSET_OPERATOR__DB_URI</code> (passthrough) or
<code>SUPERSET_OPERATOR__DB_*</code> (structured).</p>
+<p>Note: <code>SECRET_KEY</code> and <code>SQLALCHEMY_DATABASE_URI</code> are
rendered into the config file from operator-internal
<code>SUPERSET_OPERATOR__*</code> env vars. The web server port is written as a
fixed <code>SUPERSET_WEBSERVER_PORT = 8088</code> assignment. Both passthrough
and structured metastore modes render <code>SQLALCHEMY_DATABASE_URI</code> from
<code>SUPERSET_OPERATOR__DB_URI</code> (passthrough) or
<code>SUPERSET_OPERATOR__DB_*</code> (structured).</p>
<table>
<thead>
<tr>
diff --git a/getting-started/index.html b/getting-started/index.html
index 750bd5a..02be4bf 100644
--- a/getting-started/index.html
+++ b/getting-started/index.html
@@ -1180,7 +1180,7 @@ under the License.
</code></pre></div>
<p>Replace <code><version></code> with a published chart version (e.g.,
<code>0.1.0</code>); see <a href="../reference/downloads/">Downloads</a> for
published tags.</p>
<h2 id="2-deploy-superset">2. Deploy Superset<a class="headerlink"
href="#2-deploy-superset" title="Permanent link">¶</a></h2>
-<p>Create a minimal Superset instance in dev mode (inline credentials for
simplicity):</p>
+<p>Create a minimal Superset instance in dev mode (inline credentials for
simplicity). The example uses the <code>-dev</code> image variant because it
ships the <code>psycopg2</code> PostgreSQL driver. The lean image (e.g.
<code>6.1.0</code>) has no database drivers, so migrations would fail:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1"
name="__codelineno-1-1" href="#__codelineno-1-1"></a>kubectl<span class="w">
</span>apply<span class="w"> </span>-f<span class="w"> </span>-<span class="w">
</span><span class="s"><<'EOF'</span>
<a id="__codelineno-1-2" name="__codelineno-1-2"
href="#__codelineno-1-2"></a><span class="s">apiVersion:
superset.apache.org/v1alpha1</span>
<a id="__codelineno-1-3" name="__codelineno-1-3"
href="#__codelineno-1-3"></a><span class="s">kind: Superset</span>
@@ -1189,7 +1189,7 @@ under the License.
<a id="__codelineno-1-6" name="__codelineno-1-6"
href="#__codelineno-1-6"></a><span class="s">spec:</span>
<a id="__codelineno-1-7" name="__codelineno-1-7"
href="#__codelineno-1-7"></a><span class="s"> environment: Development</span>
<a id="__codelineno-1-8" name="__codelineno-1-8"
href="#__codelineno-1-8"></a><span class="s"> image:</span>
-<a id="__codelineno-1-9" name="__codelineno-1-9"
href="#__codelineno-1-9"></a><span class="s"> tag: "6.1.0"</span>
+<a id="__codelineno-1-9" name="__codelineno-1-9"
href="#__codelineno-1-9"></a><span class="s"> tag: "6.1.0-dev"</span>
<a id="__codelineno-1-10" name="__codelineno-1-10"
href="#__codelineno-1-10"></a><span class="s"> secretKey:
thisIsNotSecure_changeInProduction!</span>
<a id="__codelineno-1-11" name="__codelineno-1-11"
href="#__codelineno-1-11"></a><span class="s"> metastore:</span>
<a id="__codelineno-1-12" name="__codelineno-1-12"
href="#__codelineno-1-12"></a><span class="s"> uri:
postgresql+psycopg2://superset:superset@postgres:5432/superset</span>
diff --git a/search.json b/search.json
index 21dd1bf..2f489af 100644
--- a/search.json
+++ b/search.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-_,:!=\\[\\]()\\\\\"`/]+|\\.(?!\\d)"},"items":[{"location":"","level":1,"title":"Home","text":"","path":["Home"],"tags":[]},{"location":"#apache-superset-kubernetes-operator","level":1,"title":"Apache
Superset Kubernetes Operator","text":"<p>Alpha API</p> <p>The API is still
<code>v1alpha1</code> — CRD schemas and behavior may change between releases
until it stabilizes.</p> <p>A Kubernetes operator for deploying and managing
Apache Superset. B [...]
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-_,:!=\\[\\]()\\\\\"`/]+|\\.(?!\\d)"},"items":[{"location":"","level":1,"title":"Home","text":"","path":["Home"],"tags":[]},{"location":"#apache-superset-kubernetes-operator","level":1,"title":"Apache
Superset Kubernetes Operator","text":"<p>Alpha API</p> <p>The API is still
<code>v1alpha1</code> — CRD schemas and behavior may change between releases
until it stabilizes.</p> <p>A Kubernetes operator for deploying and managing
Apache Superset. B [...]
\ No newline at end of file
diff --git a/user-guide/configuration/index.html
b/user-guide/configuration/index.html
index 858f289..bcdcac0 100644
--- a/user-guide/configuration/index.html
+++ b/user-guide/configuration/index.html
@@ -2031,16 +2031,18 @@ under the License.
<h3 id="dev-mode-example">Dev Mode Example<a class="headerlink"
href="#dev-mode-example" title="Permanent link">¶</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1"
name="__codelineno-0-1" href="#__codelineno-0-1"></a><span
class="nt">spec</span><span class="p">:</span>
<a id="__codelineno-0-2" name="__codelineno-0-2"
href="#__codelineno-0-2"></a><span class="w"> </span><span
class="nt">environment</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">Development</span>
-<a id="__codelineno-0-3" name="__codelineno-0-3"
href="#__codelineno-0-3"></a><span class="w"> </span><span
class="nt">secretKey</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar
l-Scalar-Plain">thisIsNotSecure_changeInProduction!</span>
-<a id="__codelineno-0-4" name="__codelineno-0-4"
href="#__codelineno-0-4"></a><span class="w"> </span><span
class="nt">metastore</span><span class="p">:</span>
-<a id="__codelineno-0-5" name="__codelineno-0-5"
href="#__codelineno-0-5"></a><span class="w"> </span><span
class="nt">uri</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar
l-Scalar-Plain">postgresql+psycopg2://superset:superset@postgres:5432/superset</span>
-<a id="__codelineno-0-6" name="__codelineno-0-6"
href="#__codelineno-0-6"></a><span class="w"> </span><span
class="nt">featureFlags</span><span class="p">:</span>
-<a id="__codelineno-0-7" name="__codelineno-0-7"
href="#__codelineno-0-7"></a><span class="w"> </span><span
class="nt">ENABLE_TEMPLATE_PROCESSING</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
-<a id="__codelineno-0-8" name="__codelineno-0-8"
href="#__codelineno-0-8"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span>
-<a id="__codelineno-0-9" name="__codelineno-0-9"
href="#__codelineno-0-9"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
-<a id="__codelineno-0-10" name="__codelineno-0-10"
href="#__codelineno-0-10"></a><span class="w"> </span><span
class="nt">init</span><span class="p">:</span>
-<a id="__codelineno-0-11" name="__codelineno-0-11"
href="#__codelineno-0-11"></a><span class="w"> </span><span
class="nt">adminUser</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span>
-<a id="__codelineno-0-12" name="__codelineno-0-12"
href="#__codelineno-0-12"></a><span class="w"> </span><span
class="nt">loadExamples</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">true</span>
+<a id="__codelineno-0-3" name="__codelineno-0-3"
href="#__codelineno-0-3"></a><span class="w"> </span><span
class="nt">image</span><span class="p">:</span>
+<a id="__codelineno-0-4" name="__codelineno-0-4"
href="#__codelineno-0-4"></a><span class="w"> </span><span
class="nt">tag</span><span class="p">:</span><span class="w"> </span><span
class="s">"6.1.0-dev"</span>
+<a id="__codelineno-0-5" name="__codelineno-0-5"
href="#__codelineno-0-5"></a><span class="w"> </span><span
class="nt">secretKey</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar
l-Scalar-Plain">thisIsNotSecure_changeInProduction!</span>
+<a id="__codelineno-0-6" name="__codelineno-0-6"
href="#__codelineno-0-6"></a><span class="w"> </span><span
class="nt">metastore</span><span class="p">:</span>
+<a id="__codelineno-0-7" name="__codelineno-0-7"
href="#__codelineno-0-7"></a><span class="w"> </span><span
class="nt">uri</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar
l-Scalar-Plain">postgresql+psycopg2://superset:superset@postgres:5432/superset</span>
+<a id="__codelineno-0-8" name="__codelineno-0-8"
href="#__codelineno-0-8"></a><span class="w"> </span><span
class="nt">featureFlags</span><span class="p">:</span>
+<a id="__codelineno-0-9" name="__codelineno-0-9"
href="#__codelineno-0-9"></a><span class="w"> </span><span
class="nt">ENABLE_TEMPLATE_PROCESSING</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
+<a id="__codelineno-0-10" name="__codelineno-0-10"
href="#__codelineno-0-10"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span>
+<a id="__codelineno-0-11" name="__codelineno-0-11"
href="#__codelineno-0-11"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
+<a id="__codelineno-0-12" name="__codelineno-0-12"
href="#__codelineno-0-12"></a><span class="w"> </span><span
class="nt">init</span><span class="p">:</span>
+<a id="__codelineno-0-13" name="__codelineno-0-13"
href="#__codelineno-0-13"></a><span class="w"> </span><span
class="nt">adminUser</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span>
+<a id="__codelineno-0-14" name="__codelineno-0-14"
href="#__codelineno-0-14"></a><span class="w"> </span><span
class="nt">loadExamples</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">true</span>
</code></pre></div>
<h3 id="prod-mode-example">Prod Mode Example<a class="headerlink"
href="#prod-mode-example" title="Permanent link">¶</a></h3>
<p>Use <code>secretKeyFrom</code> and <code>metastore.uriFrom</code> to
reference Kubernetes Secrets. The operator injects the corresponding env vars
with <code>valueFrom.secretKeyRef</code>:</p>
@@ -2340,6 +2342,12 @@ and <a
href="https://superset.apache.org/user-docs/databases/supported/mysql/">M
<td>Superset session signing key</td>
</tr>
<tr>
+<td><code>SUPERSET_OPERATOR__PREVIOUS_SECRET_KEY</code></td>
+<td>Operator-internal</td>
+<td>Operator (from <code>previousSecretKey</code> or
<code>previousSecretKeyFrom</code>)</td>
+<td>Previous signing key used during secret key rotation</td>
+</tr>
+<tr>
<td><code>SUPERSET_OPERATOR__DB_URI</code></td>
<td>Operator-internal</td>
<td>Operator (from <code>metastore.uri</code> or
<code>metastore.uriFrom</code>)</td>
@@ -2364,25 +2372,39 @@ and <a
href="https://superset.apache.org/user-docs/databases/supported/mysql/">M
<td>Valkey connection fields</td>
</tr>
<tr>
+<td><code>SUPERSET_OPERATOR__VALKEY_USER</code></td>
+<td>Operator-internal</td>
+<td>Operator (from <code>valkey.username</code> or
<code>valkey.usernameFrom</code>)</td>
+<td>Valkey ACL username</td>
+</tr>
+<tr>
<td><code>SUPERSET_OPERATOR__VALKEY_PASS</code></td>
<td>Operator-internal</td>
<td>Operator (from <code>valkey.password</code> or
<code>valkey.passwordFrom</code>)</td>
<td>Valkey password</td>
</tr>
<tr>
+<td><code>SUPERSET_OPERATOR__FLOWER_URL_PREFIX</code></td>
+<td>Operator-internal</td>
+<td>Operator (from <code>celeryFlower.service.gatewayPath</code>, default
<code>/flower</code>)</td>
+<td>Flower URL prefix</td>
+</tr>
+<tr>
<td><code>SUPERSET_OPERATOR__FORCE_RELOAD</code></td>
<td>Operator-internal</td>
<td>Operator (from <code>spec.forceReload</code>)</td>
<td>Triggers rolling restart</td>
</tr>
<tr>
-<td><code>SUPERSET_WEBSERVER_PORT</code></td>
+<td><code>SERVER_WORKER_AMOUNT</code>, <code>SERVER_THREADS_AMOUNT</code>,
<code>SERVER_WORKER_CLASS</code>, <code>GUNICORN_TIMEOUT</code>,
<code>GUNICORN_KEEPALIVE</code>, <code>WORKER_MAX_REQUESTS</code>,
<code>WORKER_MAX_REQUESTS_JITTER</code>,
<code>SERVER_LIMIT_REQUEST_LINE</code>,
<code>SERVER_LIMIT_REQUEST_FIELD_SIZE</code>,
<code>GUNICORN_LOGLEVEL</code></td>
<td>Standard</td>
-<td>Rendered in config</td>
-<td>Web server port (8088)</td>
+<td>Operator (from <code>webServer.gunicorn</code>, web server only, skipped
when <code>preset: disabled</code>)</td>
+<td>Gunicorn settings read by <code>run-server.sh</code></td>
</tr>
</tbody>
</table>
+<p>Operator-set env vars are merged after
<code>podTemplate.container.env</code>, so a user-defined env var with the same
name is overridden and the operator logs <code>operator env var overrides
user-specified value</code>. Use the matching CRD field instead, for example
<code>webServer.gunicorn.workers</code> rather than
<code>SERVER_WORKER_AMOUNT</code>.</p>
+<p>The web server port is not an env var. The operator writes
<code>SUPERSET_WEBSERVER_PORT = 8088</code> directly into the web server's
<code>superset_config.py</code>.</p>
<p>The operator does <strong>not</strong> set <code>PYTHONPATH</code> — it
relies on the upstream Superset image's default (which already includes
<code>/app/pythonpath</code>, where the operator mounts the rendered
<code>superset_config.py</code>). Custom images must preserve this entry on
<code>PYTHONPATH</code> for the rendered config to be picked up.</p>
<p><strong>Tier descriptions:</strong></p>
<ul>
@@ -2422,13 +2444,13 @@ and <a
href="https://superset.apache.org/user-docs/databases/supported/mysql/">M
<td><code>SUPERSET_OPERATOR__DB_NAME</code></td>
<td style="text-align: center;">—</td>
<td style="text-align: center;">—</td>
-<td style="text-align: center;">Set (if <code>database</code> provided)</td>
+<td style="text-align: center;">Set (from <code>database</code> or
<code>databaseFrom</code>)</td>
</tr>
<tr>
<td><code>SUPERSET_OPERATOR__DB_USER</code></td>
<td style="text-align: center;">—</td>
<td style="text-align: center;">—</td>
-<td style="text-align: center;">Set (if <code>username</code> provided)</td>
+<td style="text-align: center;">Set (from <code>username</code> or
<code>usernameFrom</code>)</td>
</tr>
<tr>
<td><code>SUPERSET_OPERATOR__DB_PASS</code></td>
@@ -2450,11 +2472,15 @@ and <a
href="https://superset.apache.org/user-docs/databases/supported/mysql/">M
<tbody>
<tr>
<td><code>SUPERSET_OPERATOR__VALKEY_HOST</code></td>
-<td>Always (from <code>valkey.host</code>)</td>
+<td>Always (from <code>valkey.host</code> or <code>valkey.hostFrom</code>)</td>
</tr>
<tr>
<td><code>SUPERSET_OPERATOR__VALKEY_PORT</code></td>
-<td>Always (from <code>valkey.port</code>, default 6379)</td>
+<td>Always (from <code>valkey.port</code> or <code>valkey.portFrom</code>,
default 6379)</td>
+</tr>
+<tr>
+<td><code>SUPERSET_OPERATOR__VALKEY_USER</code></td>
+<td><code>valkey.username</code> or <code>valkey.usernameFrom</code> is
set</td>
</tr>
<tr>
<td><code>SUPERSET_OPERATOR__VALKEY_PASS</code></td>
@@ -2586,40 +2612,42 @@ for up-to-date guidance on deploying extensions.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1"
name="__codelineno-22-1" href="#__codelineno-22-1"></a><span
class="nt">spec</span><span class="p">:</span>
<a id="__codelineno-22-2" name="__codelineno-22-2"
href="#__codelineno-22-2"></a><span class="w"> </span><span
class="nt">valkey</span><span class="p">:</span>
<a id="__codelineno-22-3" name="__codelineno-22-3"
href="#__codelineno-22-3"></a><span class="w"> </span><span
class="nt">host</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">valkey.default.svc</span>
-<a id="__codelineno-22-4" name="__codelineno-22-4"
href="#__codelineno-22-4"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span>
-<a id="__codelineno-22-5" name="__codelineno-22-5"
href="#__codelineno-22-5"></a><span class="w"> </span><span
class="nt">celeryBeat</span><span class="p">:</span>
-<a id="__codelineno-22-6" name="__codelineno-22-6"
href="#__codelineno-22-6"></a><span class="w"> </span><span
class="nt">config</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">|</span>
-<a id="__codelineno-22-7" name="__codelineno-22-7"
href="#__codelineno-22-7"></a><span class="w"> </span><span
class="no">from celery.schedules import crontab</span>
-<a id="__codelineno-22-8" name="__codelineno-22-8"
href="#__codelineno-22-8"></a>
-<a id="__codelineno-22-9" name="__codelineno-22-9"
href="#__codelineno-22-9"></a><span class="w"> </span><span
class="no">CELERY_BEAT_SCHEDULER_EXPIRES = 7 * 24 * 60 * 60</span>
+<a id="__codelineno-22-4" name="__codelineno-22-4"
href="#__codelineno-22-4"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
+<a id="__codelineno-22-5" name="__codelineno-22-5"
href="#__codelineno-22-5"></a><span class="w"> </span><span
class="nt">celery</span><span class="p">:</span>
+<a id="__codelineno-22-6" name="__codelineno-22-6"
href="#__codelineno-22-6"></a><span class="w"> </span><span
class="nt">prefetchMultiplier</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">1</span>
+<a id="__codelineno-22-7" name="__codelineno-22-7"
href="#__codelineno-22-7"></a><span class="w"> </span><span
class="nt">celeryBeat</span><span class="p">:</span>
+<a id="__codelineno-22-8" name="__codelineno-22-8"
href="#__codelineno-22-8"></a><span class="w"> </span><span
class="nt">config</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">|</span>
+<a id="__codelineno-22-9" name="__codelineno-22-9"
href="#__codelineno-22-9"></a><span class="w"> </span><span
class="no">from celery.schedules import crontab</span>
<a id="__codelineno-22-10" name="__codelineno-22-10"
href="#__codelineno-22-10"></a>
-<a id="__codelineno-22-11" name="__codelineno-22-11"
href="#__codelineno-22-11"></a><span class="w"> </span><span
class="no">CeleryConfig.beat_schedule = {</span>
-<a id="__codelineno-22-12" name="__codelineno-22-12"
href="#__codelineno-22-12"></a><span class="w"> </span><span
class="no">"reports.scheduler": {</span>
-<a id="__codelineno-22-13" name="__codelineno-22-13"
href="#__codelineno-22-13"></a><span class="w"> </span><span
class="no">"task": "reports.scheduler",</span>
-<a id="__codelineno-22-14" name="__codelineno-22-14"
href="#__codelineno-22-14"></a><span class="w"> </span><span
class="no">"schedule": crontab(minute="*", hour="*"),</span>
-<a id="__codelineno-22-15" name="__codelineno-22-15"
href="#__codelineno-22-15"></a><span class="w"> </span><span
class="no">"options": {"expires": CELERY_BEAT_SCHEDULER_EXPIRES},</span>
-<a id="__codelineno-22-16" name="__codelineno-22-16"
href="#__codelineno-22-16"></a><span class="w"> </span><span
class="no">},</span>
-<a id="__codelineno-22-17" name="__codelineno-22-17"
href="#__codelineno-22-17"></a><span class="w"> </span><span
class="no">"reports.prune_log": {</span>
-<a id="__codelineno-22-18" name="__codelineno-22-18"
href="#__codelineno-22-18"></a><span class="w"> </span><span
class="no">"task": "reports.prune_log",</span>
-<a id="__codelineno-22-19" name="__codelineno-22-19"
href="#__codelineno-22-19"></a><span class="w"> </span><span
class="no">"schedule": crontab(minute=0, hour=0),</span>
-<a id="__codelineno-22-20" name="__codelineno-22-20"
href="#__codelineno-22-20"></a><span class="w"> </span><span
class="no">},</span>
-<a id="__codelineno-22-21" name="__codelineno-22-21"
href="#__codelineno-22-21"></a><span class="w"> </span><span
class="no">}</span>
-<a id="__codelineno-22-22" name="__codelineno-22-22"
href="#__codelineno-22-22"></a><span class="w"> </span><span
class="nt">config</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">|</span>
-<a id="__codelineno-22-23" name="__codelineno-22-23"
href="#__codelineno-22-23"></a><span class="w"> </span><span
class="no">CeleryConfig.imports = (</span>
-<a id="__codelineno-22-24" name="__codelineno-22-24"
href="#__codelineno-22-24"></a><span class="w"> </span><span
class="no">"superset.sql_lab",</span>
-<a id="__codelineno-22-25" name="__codelineno-22-25"
href="#__codelineno-22-25"></a><span class="w"> </span><span
class="no">"superset.tasks.scheduler",</span>
-<a id="__codelineno-22-26" name="__codelineno-22-26"
href="#__codelineno-22-26"></a><span class="w"> </span><span
class="no">"superset.tasks.thumbnails",</span>
-<a id="__codelineno-22-27" name="__codelineno-22-27"
href="#__codelineno-22-27"></a><span class="w"> </span><span
class="no">"superset.tasks.cache",</span>
-<a id="__codelineno-22-28" name="__codelineno-22-28"
href="#__codelineno-22-28"></a><span class="w"> </span><span
class="no">"superset.tasks.slack",</span>
-<a id="__codelineno-22-29" name="__codelineno-22-29"
href="#__codelineno-22-29"></a><span class="w"> </span><span
class="no">)</span>
-<a id="__codelineno-22-30" name="__codelineno-22-30"
href="#__codelineno-22-30"></a><span class="w"> </span><span
class="no">CeleryConfig.worker_prefetch_multiplier = 1</span>
-<a id="__codelineno-22-31" name="__codelineno-22-31"
href="#__codelineno-22-31"></a><span class="w"> </span><span
class="no">CeleryConfig.task_acks_late = False</span>
-<a id="__codelineno-22-32" name="__codelineno-22-32"
href="#__codelineno-22-32"></a><span class="w"> </span><span
class="no">CeleryConfig.task_annotations = {</span>
-<a id="__codelineno-22-33" name="__codelineno-22-33"
href="#__codelineno-22-33"></a><span class="w"> </span><span
class="no">"sql_lab.get_sql_results": {</span>
-<a id="__codelineno-22-34" name="__codelineno-22-34"
href="#__codelineno-22-34"></a><span class="w"> </span><span
class="no">"rate_limit": "100/s",</span>
-<a id="__codelineno-22-35" name="__codelineno-22-35"
href="#__codelineno-22-35"></a><span class="w"> </span><span
class="no">},</span>
-<a id="__codelineno-22-36" name="__codelineno-22-36"
href="#__codelineno-22-36"></a><span class="w"> </span><span
class="no">}</span>
+<a id="__codelineno-22-11" name="__codelineno-22-11"
href="#__codelineno-22-11"></a><span class="w"> </span><span
class="no">CELERY_BEAT_SCHEDULER_EXPIRES = 7 * 24 * 60 * 60</span>
+<a id="__codelineno-22-12" name="__codelineno-22-12"
href="#__codelineno-22-12"></a>
+<a id="__codelineno-22-13" name="__codelineno-22-13"
href="#__codelineno-22-13"></a><span class="w"> </span><span
class="no">CeleryConfig.beat_schedule = {</span>
+<a id="__codelineno-22-14" name="__codelineno-22-14"
href="#__codelineno-22-14"></a><span class="w"> </span><span
class="no">"reports.scheduler": {</span>
+<a id="__codelineno-22-15" name="__codelineno-22-15"
href="#__codelineno-22-15"></a><span class="w"> </span><span
class="no">"task": "reports.scheduler",</span>
+<a id="__codelineno-22-16" name="__codelineno-22-16"
href="#__codelineno-22-16"></a><span class="w"> </span><span
class="no">"schedule": crontab(minute="*", hour="*"),</span>
+<a id="__codelineno-22-17" name="__codelineno-22-17"
href="#__codelineno-22-17"></a><span class="w"> </span><span
class="no">"options": {"expires": CELERY_BEAT_SCHEDULER_EXPIRES},</span>
+<a id="__codelineno-22-18" name="__codelineno-22-18"
href="#__codelineno-22-18"></a><span class="w"> </span><span
class="no">},</span>
+<a id="__codelineno-22-19" name="__codelineno-22-19"
href="#__codelineno-22-19"></a><span class="w"> </span><span
class="no">"reports.prune_log": {</span>
+<a id="__codelineno-22-20" name="__codelineno-22-20"
href="#__codelineno-22-20"></a><span class="w"> </span><span
class="no">"task": "reports.prune_log",</span>
+<a id="__codelineno-22-21" name="__codelineno-22-21"
href="#__codelineno-22-21"></a><span class="w"> </span><span
class="no">"schedule": crontab(minute=0, hour=0),</span>
+<a id="__codelineno-22-22" name="__codelineno-22-22"
href="#__codelineno-22-22"></a><span class="w"> </span><span
class="no">},</span>
+<a id="__codelineno-22-23" name="__codelineno-22-23"
href="#__codelineno-22-23"></a><span class="w"> </span><span
class="no">}</span>
+<a id="__codelineno-22-24" name="__codelineno-22-24"
href="#__codelineno-22-24"></a><span class="w"> </span><span
class="nt">config</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">|</span>
+<a id="__codelineno-22-25" name="__codelineno-22-25"
href="#__codelineno-22-25"></a><span class="w"> </span><span
class="no">CeleryConfig.imports = (</span>
+<a id="__codelineno-22-26" name="__codelineno-22-26"
href="#__codelineno-22-26"></a><span class="w"> </span><span
class="no">"superset.sql_lab",</span>
+<a id="__codelineno-22-27" name="__codelineno-22-27"
href="#__codelineno-22-27"></a><span class="w"> </span><span
class="no">"superset.tasks.scheduler",</span>
+<a id="__codelineno-22-28" name="__codelineno-22-28"
href="#__codelineno-22-28"></a><span class="w"> </span><span
class="no">"superset.tasks.thumbnails",</span>
+<a id="__codelineno-22-29" name="__codelineno-22-29"
href="#__codelineno-22-29"></a><span class="w"> </span><span
class="no">"superset.tasks.cache",</span>
+<a id="__codelineno-22-30" name="__codelineno-22-30"
href="#__codelineno-22-30"></a><span class="w"> </span><span
class="no">"superset.tasks.slack",</span>
+<a id="__codelineno-22-31" name="__codelineno-22-31"
href="#__codelineno-22-31"></a><span class="w"> </span><span
class="no">)</span>
+<a id="__codelineno-22-32" name="__codelineno-22-32"
href="#__codelineno-22-32"></a><span class="w"> </span><span
class="no">CeleryConfig.task_acks_late = False</span>
+<a id="__codelineno-22-33" name="__codelineno-22-33"
href="#__codelineno-22-33"></a><span class="w"> </span><span
class="no">CeleryConfig.task_annotations = {</span>
+<a id="__codelineno-22-34" name="__codelineno-22-34"
href="#__codelineno-22-34"></a><span class="w"> </span><span
class="no">"sql_lab.get_sql_results": {</span>
+<a id="__codelineno-22-35" name="__codelineno-22-35"
href="#__codelineno-22-35"></a><span class="w"> </span><span
class="no">"rate_limit": "100/s",</span>
+<a id="__codelineno-22-36" name="__codelineno-22-36"
href="#__codelineno-22-36"></a><span class="w"> </span><span
class="no">},</span>
+<a id="__codelineno-22-37" name="__codelineno-22-37"
href="#__codelineno-22-37"></a><span class="w"> </span><span
class="no">}</span>
</code></pre></div>
+<p>Set worker command-line options such as prefetch multiplier, concurrency,
and pool through <code>spec.celeryWorker.celery</code> (see <a
href="#celery-worker-configuration">Celery Worker Configuration</a>), not
through <code>CeleryConfig.worker_*</code> settings. The operator passes them
as <code>celery worker</code> flags, and those flags take precedence over the
matching <code>CeleryConfig</code> values.</p>
<h4 id="without-valkey">Without Valkey<a class="headerlink"
href="#without-valkey" title="Permanent link">¶</a></h4>
<p>When <code>spec.valkey</code> is unset, the operator emits no
<code>CeleryConfig</code> class. Provide both connectivity and app behavior
manually via <code>spec.config</code>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1"
name="__codelineno-23-1" href="#__codelineno-23-1"></a><span
class="nt">spec</span><span class="p">:</span>
@@ -2916,8 +2944,7 @@ for up-to-date guidance on deploying extensions.</p>
<a id="__codelineno-36-6" name="__codelineno-36-6"
href="#__codelineno-36-6"></a><span class="w"> </span><span
class="nt">fsGroup</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">1000</span>
<a id="__codelineno-36-7" name="__codelineno-36-7"
href="#__codelineno-36-7"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
<a id="__codelineno-36-8" name="__codelineno-36-8"
href="#__codelineno-36-8"></a><span class="w"> </span><span
class="nt">securityContext</span><span class="p">:</span>
-<a id="__codelineno-36-9" name="__codelineno-36-9"
href="#__codelineno-36-9"></a><span class="w"> </span><span
class="nt">readOnlyRootFilesystem</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
-<a id="__codelineno-36-10" name="__codelineno-36-10"
href="#__codelineno-36-10"></a><span class="w"> </span><span
class="nt">allowPrivilegeEscalation</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
+<a id="__codelineno-36-9" name="__codelineno-36-9"
href="#__codelineno-36-9"></a><span class="w"> </span><span
class="nt">allowPrivilegeEscalation</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
</code></pre></div>
<p>Or override per component (replaces the top-level value):</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1"
name="__codelineno-37-1" href="#__codelineno-37-1"></a><span
class="nt">spec</span><span class="p">:</span>
@@ -2927,38 +2954,51 @@ for up-to-date guidance on deploying extensions.</p>
<a id="__codelineno-37-5" name="__codelineno-37-5"
href="#__codelineno-37-5"></a><span class="w"> </span><span
class="nt">runAsUser</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">1000</span>
<a id="__codelineno-37-6" name="__codelineno-37-6"
href="#__codelineno-37-6"></a><span class="w"> </span><span
class="nt">runAsNonRoot</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">true</span>
</code></pre></div>
-<h2 id="autoscaling-hpa">Autoscaling (HPA)<a class="headerlink"
href="#autoscaling-hpa" title="Permanent link">¶</a></h2>
+<p>If you enable <code>readOnlyRootFilesystem</code>, mount an
<code>emptyDir</code> at <code>/tmp</code>. The web server and Celery beat
write temporary files there, and fail to start without it:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-38-1"
name="__codelineno-38-1" href="#__codelineno-38-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-38-2" name="__codelineno-38-2"
href="#__codelineno-38-2"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-38-3" name="__codelineno-38-3"
href="#__codelineno-38-3"></a><span class="w"> </span><span
class="nt">autoscaling</span><span class="p">:</span>
-<a id="__codelineno-38-4" name="__codelineno-38-4"
href="#__codelineno-38-4"></a><span class="w"> </span><span
class="nt">minReplicas</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">2</span>
-<a id="__codelineno-38-5" name="__codelineno-38-5"
href="#__codelineno-38-5"></a><span class="w"> </span><span
class="nt">maxReplicas</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">10</span>
-<a id="__codelineno-38-6" name="__codelineno-38-6"
href="#__codelineno-38-6"></a><span class="w"> </span><span
class="nt">metrics</span><span class="p">:</span>
-<a id="__codelineno-38-7" name="__codelineno-38-7"
href="#__codelineno-38-7"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">Resource</span>
-<a id="__codelineno-38-8" name="__codelineno-38-8"
href="#__codelineno-38-8"></a><span class="w"> </span><span
class="nt">resource</span><span class="p">:</span>
-<a id="__codelineno-38-9" name="__codelineno-38-9"
href="#__codelineno-38-9"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">cpu</span>
-<a id="__codelineno-38-10" name="__codelineno-38-10"
href="#__codelineno-38-10"></a><span class="w"> </span><span
class="nt">target</span><span class="p">:</span>
-<a id="__codelineno-38-11" name="__codelineno-38-11"
href="#__codelineno-38-11"></a><span class="w"> </span><span
class="nt">type</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">Utilization</span>
-<a id="__codelineno-38-12" name="__codelineno-38-12"
href="#__codelineno-38-12"></a><span class="w"> </span><span
class="nt">averageUtilization</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">75</span>
+<a id="__codelineno-38-2" name="__codelineno-38-2"
href="#__codelineno-38-2"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
+<a id="__codelineno-38-3" name="__codelineno-38-3"
href="#__codelineno-38-3"></a><span class="w"> </span><span
class="nt">volumes</span><span class="p">:</span>
+<a id="__codelineno-38-4" name="__codelineno-38-4"
href="#__codelineno-38-4"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">tmp</span>
+<a id="__codelineno-38-5" name="__codelineno-38-5"
href="#__codelineno-38-5"></a><span class="w"> </span><span
class="nt">emptyDir</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">{}</span>
+<a id="__codelineno-38-6" name="__codelineno-38-6"
href="#__codelineno-38-6"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-38-7" name="__codelineno-38-7"
href="#__codelineno-38-7"></a><span class="w"> </span><span
class="nt">securityContext</span><span class="p">:</span>
+<a id="__codelineno-38-8" name="__codelineno-38-8"
href="#__codelineno-38-8"></a><span class="w"> </span><span
class="nt">readOnlyRootFilesystem</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
+<a id="__codelineno-38-9" name="__codelineno-38-9"
href="#__codelineno-38-9"></a><span class="w"> </span><span
class="nt">volumeMounts</span><span class="p">:</span>
+<a id="__codelineno-38-10" name="__codelineno-38-10"
href="#__codelineno-38-10"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">tmp</span>
+<a id="__codelineno-38-11" name="__codelineno-38-11"
href="#__codelineno-38-11"></a><span class="w"> </span><span
class="nt">mountPath</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">/tmp</span>
</code></pre></div>
-<p>When HPA is configured, the <code>replicas</code> field is ignored (HPA
manages scaling).</p>
-<h2 id="pod-disruption-budget">Pod Disruption Budget<a class="headerlink"
href="#pod-disruption-budget" title="Permanent link">¶</a></h2>
+<h2 id="autoscaling-hpa">Autoscaling (HPA)<a class="headerlink"
href="#autoscaling-hpa" title="Permanent link">¶</a></h2>
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1"
name="__codelineno-39-1" href="#__codelineno-39-1"></a><span
class="nt">spec</span><span class="p">:</span>
<a id="__codelineno-39-2" name="__codelineno-39-2"
href="#__codelineno-39-2"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-39-3" name="__codelineno-39-3"
href="#__codelineno-39-3"></a><span class="w"> </span><span
class="nt">podDisruptionBudget</span><span class="p">:</span>
-<a id="__codelineno-39-4" name="__codelineno-39-4"
href="#__codelineno-39-4"></a><span class="w"> </span><span
class="nt">minAvailable</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">1</span>
+<a id="__codelineno-39-3" name="__codelineno-39-3"
href="#__codelineno-39-3"></a><span class="w"> </span><span
class="nt">autoscaling</span><span class="p">:</span>
+<a id="__codelineno-39-4" name="__codelineno-39-4"
href="#__codelineno-39-4"></a><span class="w"> </span><span
class="nt">minReplicas</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">2</span>
+<a id="__codelineno-39-5" name="__codelineno-39-5"
href="#__codelineno-39-5"></a><span class="w"> </span><span
class="nt">maxReplicas</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">10</span>
+<a id="__codelineno-39-6" name="__codelineno-39-6"
href="#__codelineno-39-6"></a><span class="w"> </span><span
class="nt">metrics</span><span class="p">:</span>
+<a id="__codelineno-39-7" name="__codelineno-39-7"
href="#__codelineno-39-7"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">Resource</span>
+<a id="__codelineno-39-8" name="__codelineno-39-8"
href="#__codelineno-39-8"></a><span class="w"> </span><span
class="nt">resource</span><span class="p">:</span>
+<a id="__codelineno-39-9" name="__codelineno-39-9"
href="#__codelineno-39-9"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">cpu</span>
+<a id="__codelineno-39-10" name="__codelineno-39-10"
href="#__codelineno-39-10"></a><span class="w"> </span><span
class="nt">target</span><span class="p">:</span>
+<a id="__codelineno-39-11" name="__codelineno-39-11"
href="#__codelineno-39-11"></a><span class="w"> </span><span
class="nt">type</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">Utilization</span>
+<a id="__codelineno-39-12" name="__codelineno-39-12"
href="#__codelineno-39-12"></a><span class="w"> </span><span
class="nt">averageUtilization</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">75</span>
</code></pre></div>
-<h2 id="component-enabledisable">Component Enable/Disable<a class="headerlink"
href="#component-enabledisable" title="Permanent link">¶</a></h2>
-<p>All components follow the same rule: presence = enabled, absence =
disabled. Set a component's spec to enable it (use <code>{}</code> for
defaults), omit it or set to null to disable:</p>
+<p>When HPA is configured, the <code>replicas</code> field is ignored (HPA
manages scaling).</p>
+<h2 id="pod-disruption-budget">Pod Disruption Budget<a class="headerlink"
href="#pod-disruption-budget" title="Permanent link">¶</a></h2>
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1"
name="__codelineno-40-1" href="#__codelineno-40-1"></a><span
class="nt">spec</span><span class="p">:</span>
<a id="__codelineno-40-2" name="__codelineno-40-2"
href="#__codelineno-40-2"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-40-3" name="__codelineno-40-3"
href="#__codelineno-40-3"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span><span class="w">
</span><span class="c1"># enabled with 2 replicas</span>
-<a id="__codelineno-40-4" name="__codelineno-40-4"
href="#__codelineno-40-4"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
-<a id="__codelineno-40-5" name="__codelineno-40-5"
href="#__codelineno-40-5"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">3</span><span class="w">
</span><span class="c1"># enabled with 3 replicas</span>
-<a id="__codelineno-40-6" name="__codelineno-40-6"
href="#__codelineno-40-6"></a><span class="w"> </span><span
class="nt">celeryBeat</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w">
</span><span class="c1"># enabled with defaults</span>
-<a id="__codelineno-40-7" name="__codelineno-40-7"
href="#__codelineno-40-7"></a><span class="w"> </span><span
class="nt">celeryFlower</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w"> </span><span
class="c1"># enabled with defaults</span>
-<a id="__codelineno-40-8" name="__codelineno-40-8"
href="#__codelineno-40-8"></a><span class="w"> </span><span
class="nt">websocketServer</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">null</span><span class="w">
</span><span class="c1"># disabled (or omit entirely)</span>
-<a id="__codelineno-40-9" name="__codelineno-40-9"
href="#__codelineno-40-9"></a><span class="w"> </span><span
class="nt">mcpServer</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w">
</span><span class="c1"># enabled with defaults</span>
+<a id="__codelineno-40-3" name="__codelineno-40-3"
href="#__codelineno-40-3"></a><span class="w"> </span><span
class="nt">podDisruptionBudget</span><span class="p">:</span>
+<a id="__codelineno-40-4" name="__codelineno-40-4"
href="#__codelineno-40-4"></a><span class="w"> </span><span
class="nt">minAvailable</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">1</span>
+</code></pre></div>
+<h2 id="component-enabledisable">Component Enable/Disable<a class="headerlink"
href="#component-enabledisable" title="Permanent link">¶</a></h2>
+<p>All components follow the same rule: presence = enabled, absence =
disabled. Set a component's spec to enable it (use <code>{}</code> for
defaults), omit it or set to null to disable:</p>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1"
name="__codelineno-41-1" href="#__codelineno-41-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-41-2" name="__codelineno-41-2"
href="#__codelineno-41-2"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
+<a id="__codelineno-41-3" name="__codelineno-41-3"
href="#__codelineno-41-3"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span><span class="w">
</span><span class="c1"># enabled with 2 replicas</span>
+<a id="__codelineno-41-4" name="__codelineno-41-4"
href="#__codelineno-41-4"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
+<a id="__codelineno-41-5" name="__codelineno-41-5"
href="#__codelineno-41-5"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">3</span><span class="w">
</span><span class="c1"># enabled with 3 replicas</span>
+<a id="__codelineno-41-6" name="__codelineno-41-6"
href="#__codelineno-41-6"></a><span class="w"> </span><span
class="nt">celeryBeat</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w">
</span><span class="c1"># enabled with defaults</span>
+<a id="__codelineno-41-7" name="__codelineno-41-7"
href="#__codelineno-41-7"></a><span class="w"> </span><span
class="nt">celeryFlower</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w"> </span><span
class="c1"># enabled with defaults</span>
+<a id="__codelineno-41-8" name="__codelineno-41-8"
href="#__codelineno-41-8"></a><span class="w"> </span><span
class="nt">websocketServer</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">null</span><span class="w">
</span><span class="c1"># disabled (or omit entirely)</span>
+<a id="__codelineno-41-9" name="__codelineno-41-9"
href="#__codelineno-41-9"></a><span class="w"> </span><span
class="nt">mcpServer</span><span class="p">:</span><span class="w">
</span><span class="p p-Indicator">{}</span><span class="w">
</span><span class="c1"># enabled with defaults</span>
</code></pre></div>
<p>A Superset CR with no components enabled is valid — the operator will run
initialization (if not disabled) but deploy no workloads. The parent status
will report <code>Phase: Running</code> with condition reason
<code>NoComponentsEnabled</code>.</p>
<h3 id="resource-names">Resource Names<a class="headerlink"
href="#resource-names" title="Permanent link">¶</a></h3>
@@ -2966,83 +3006,83 @@ for up-to-date guidance on deploying extensions.</p>
<p>The parent name must be a valid DNS label: lowercase alphanumeric and
hyphens only (<code>^[a-z0-9]([-a-z0-9]*[a-z0-9])?$</code>), at most 63
characters. Since sub-resource names append a component suffix, the parent name
is further constrained by the longest enabled component's suffix. The longest
suffix is <code>-websocket-server</code> (17 characters), so parent names must
be at most 46 characters when websocket-server is enabled. CRD validation
enforces the appropriate limit for e [...]
<h2 id="deployment-template">Deployment Template<a class="headerlink"
href="#deployment-template" title="Permanent link">¶</a></h2>
<p>The <code>deploymentTemplate</code> and <code>podTemplate</code> fields
configure the Kubernetes Deployment and Pod for each component. They mirror the
Kubernetes hierarchy as siblings:</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1"
name="__codelineno-41-1" href="#__codelineno-41-1"></a>deploymentTemplate
→ DeploymentSpec-level
-<a id="__codelineno-41-2" name="__codelineno-41-2"
href="#__codelineno-41-2"></a>podTemplate →
PodSpec-level
-<a id="__codelineno-41-3" name="__codelineno-41-3"
href="#__codelineno-41-3"></a>└── container → main
container
+<div class="highlight"><pre><span></span><code><a id="__codelineno-42-1"
name="__codelineno-42-1" href="#__codelineno-42-1"></a>deploymentTemplate
→ DeploymentSpec-level
+<a id="__codelineno-42-2" name="__codelineno-42-2"
href="#__codelineno-42-2"></a>podTemplate →
PodSpec-level
+<a id="__codelineno-42-3" name="__codelineno-42-3"
href="#__codelineno-42-3"></a>└── container → main
container
</code></pre></div>
<p><code>deploymentTemplate</code> carries Deployment-level fields:
<code>strategy</code>, <code>revisionHistoryLimit</code>,
<code>minReadySeconds</code>, <code>progressDeadlineSeconds</code>, and
<code>labels</code>/<code>annotations</code> for the Deployment object's own
metadata. Deployment <code>labels</code>/<code>annotations</code> are merged by
key (component wins over top-level); operator-managed labels are applied last
and cannot be overridden. They land on the Deployment metad [...]
<h3 id="three-usage-patterns">Three usage patterns<a class="headerlink"
href="#three-usage-patterns" title="Permanent link">¶</a></h3>
<p><strong>1. Omit entirely</strong> — use operator defaults (most users start
here):</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-42-1"
name="__codelineno-42-1" href="#__codelineno-42-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-42-2" name="__codelineno-42-2"
href="#__codelineno-42-2"></a><span class="w"> </span><span
class="nt">image</span><span class="p">:</span>
-<a id="__codelineno-42-3" name="__codelineno-42-3"
href="#__codelineno-42-3"></a><span class="w"> </span><span
class="nt">tag</span><span class="p">:</span><span class="w"> </span><span
class="s">"6.1.0"</span>
-<a id="__codelineno-42-4" name="__codelineno-42-4"
href="#__codelineno-42-4"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-42-5" name="__codelineno-42-5"
href="#__codelineno-42-5"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
-</code></pre></div>
-<p><strong>2. Set top-level defaults</strong> — apply to all components:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-43-1"
name="__codelineno-43-1" href="#__codelineno-43-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-43-2" name="__codelineno-43-2"
href="#__codelineno-43-2"></a><span class="w"> </span><span
class="nt">deploymentTemplate</span><span class="p">:</span>
-<a id="__codelineno-43-3" name="__codelineno-43-3"
href="#__codelineno-43-3"></a><span class="w"> </span><span
class="nt">revisionHistoryLimit</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">3</span>
-<a id="__codelineno-43-4" name="__codelineno-43-4"
href="#__codelineno-43-4"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
-<a id="__codelineno-43-5" name="__codelineno-43-5"
href="#__codelineno-43-5"></a><span class="w"> </span><span
class="nt">terminationGracePeriodSeconds</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">60</span>
-<a id="__codelineno-43-6" name="__codelineno-43-6"
href="#__codelineno-43-6"></a><span class="w"> </span><span
class="nt">nodeSelector</span><span class="p">:</span>
-<a id="__codelineno-43-7" name="__codelineno-43-7"
href="#__codelineno-43-7"></a><span class="w"> </span><span
class="nt">workload</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset</span>
-<a id="__codelineno-43-8" name="__codelineno-43-8"
href="#__codelineno-43-8"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
-<a id="__codelineno-43-9" name="__codelineno-43-9"
href="#__codelineno-43-9"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
-<a id="__codelineno-43-10" name="__codelineno-43-10"
href="#__codelineno-43-10"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
-<a id="__codelineno-43-11" name="__codelineno-43-11"
href="#__codelineno-43-11"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
-<a id="__codelineno-43-12" name="__codelineno-43-12"
href="#__codelineno-43-12"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
-<a id="__codelineno-43-13" name="__codelineno-43-13"
href="#__codelineno-43-13"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
-<a id="__codelineno-43-14" name="__codelineno-43-14"
href="#__codelineno-43-14"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">LOG_LEVEL</span>
-<a id="__codelineno-43-15" name="__codelineno-43-15"
href="#__codelineno-43-15"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">INFO</span>
-<a id="__codelineno-43-16" name="__codelineno-43-16"
href="#__codelineno-43-16"></a>
-<a id="__codelineno-43-17" name="__codelineno-43-17"
href="#__codelineno-43-17"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-43-18" name="__codelineno-43-18"
href="#__codelineno-43-18"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
-<a id="__codelineno-43-19" name="__codelineno-43-19"
href="#__codelineno-43-19"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
-<a id="__codelineno-43-20" name="__codelineno-43-20"
href="#__codelineno-43-20"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">4</span>
+<a id="__codelineno-43-2" name="__codelineno-43-2"
href="#__codelineno-43-2"></a><span class="w"> </span><span
class="nt">image</span><span class="p">:</span>
+<a id="__codelineno-43-3" name="__codelineno-43-3"
href="#__codelineno-43-3"></a><span class="w"> </span><span
class="nt">tag</span><span class="p">:</span><span class="w"> </span><span
class="s">"6.1.0"</span>
+<a id="__codelineno-43-4" name="__codelineno-43-4"
href="#__codelineno-43-4"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
+<a id="__codelineno-43-5" name="__codelineno-43-5"
href="#__codelineno-43-5"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
</code></pre></div>
-<p>All components inherit the deployment template, pod template (node
selector, termination grace period), and container template (resources, env
vars).</p>
-<p><strong>3. Per-component customization</strong> — field-level merge with
top-level:</p>
+<p><strong>2. Set top-level defaults</strong> — apply to all components:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-44-1"
name="__codelineno-44-1" href="#__codelineno-44-1"></a><span
class="nt">spec</span><span class="p">:</span>
<a id="__codelineno-44-2" name="__codelineno-44-2"
href="#__codelineno-44-2"></a><span class="w"> </span><span
class="nt">deploymentTemplate</span><span class="p">:</span>
<a id="__codelineno-44-3" name="__codelineno-44-3"
href="#__codelineno-44-3"></a><span class="w"> </span><span
class="nt">revisionHistoryLimit</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">3</span>
<a id="__codelineno-44-4" name="__codelineno-44-4"
href="#__codelineno-44-4"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
-<a id="__codelineno-44-5" name="__codelineno-44-5"
href="#__codelineno-44-5"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
-<a id="__codelineno-44-6" name="__codelineno-44-6"
href="#__codelineno-44-6"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
-<a id="__codelineno-44-7" name="__codelineno-44-7"
href="#__codelineno-44-7"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
-<a id="__codelineno-44-8" name="__codelineno-44-8"
href="#__codelineno-44-8"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
-<a id="__codelineno-44-9" name="__codelineno-44-9"
href="#__codelineno-44-9"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
-<a id="__codelineno-44-10" name="__codelineno-44-10"
href="#__codelineno-44-10"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
-<a id="__codelineno-44-11" name="__codelineno-44-11"
href="#__codelineno-44-11"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">LOG_LEVEL</span>
-<a id="__codelineno-44-12" name="__codelineno-44-12"
href="#__codelineno-44-12"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">INFO</span>
-<a id="__codelineno-44-13" name="__codelineno-44-13"
href="#__codelineno-44-13"></a>
-<a id="__codelineno-44-14" name="__codelineno-44-14"
href="#__codelineno-44-14"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
-<a id="__codelineno-44-15" name="__codelineno-44-15"
href="#__codelineno-44-15"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
-<a id="__codelineno-44-16" name="__codelineno-44-16"
href="#__codelineno-44-16"></a><span class="w"> </span><span
class="nt">deploymentTemplate</span><span class="p">:</span>
-<a id="__codelineno-44-17" name="__codelineno-44-17"
href="#__codelineno-44-17"></a><span class="w"> </span><span
class="nt">strategy</span><span class="p">:</span>
-<a id="__codelineno-44-18" name="__codelineno-44-18"
href="#__codelineno-44-18"></a><span class="w"> </span><span
class="nt">type</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">RollingUpdate</span>
-<a id="__codelineno-44-19" name="__codelineno-44-19"
href="#__codelineno-44-19"></a><span class="w"> </span><span
class="nt">rollingUpdate</span><span class="p">:</span>
-<a id="__codelineno-44-20" name="__codelineno-44-20"
href="#__codelineno-44-20"></a><span class="w"> </span><span
class="nt">maxSurge</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">1</span>
-<a id="__codelineno-44-21" name="__codelineno-44-21"
href="#__codelineno-44-21"></a><span class="w"> </span><span
class="nt">maxUnavailable</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">0</span>
-<a id="__codelineno-44-22" name="__codelineno-44-22"
href="#__codelineno-44-22"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
-<a id="__codelineno-44-23" name="__codelineno-44-23"
href="#__codelineno-44-23"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
-<a id="__codelineno-44-24" name="__codelineno-44-24"
href="#__codelineno-44-24"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
-<a id="__codelineno-44-25" name="__codelineno-44-25"
href="#__codelineno-44-25"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
-<a id="__codelineno-44-26" name="__codelineno-44-26"
href="#__codelineno-44-26"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"4"</span><span class="w"> </span><span class="c1">#
replaces entire resources struct</span>
-<a id="__codelineno-44-27" name="__codelineno-44-27"
href="#__codelineno-44-27"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"8Gi"</span>
-<a id="__codelineno-44-28" name="__codelineno-44-28"
href="#__codelineno-44-28"></a><span class="w"> </span><span
class="nt">command</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">[</span><span class="s">"gunicorn"</span><span class="p
p-Indicator">]</span>
-<a id="__codelineno-44-29" name="__codelineno-44-29"
href="#__codelineno-44-29"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
-<a id="__codelineno-44-30" name="__codelineno-44-30"
href="#__codelineno-44-30"></a><span class="w"> </span><span
class="nt">preStop</span><span class="p">:</span>
-<a id="__codelineno-44-31" name="__codelineno-44-31"
href="#__codelineno-44-31"></a><span class="w"> </span><span
class="nt">exec</span><span class="p">:</span>
-<a id="__codelineno-44-32" name="__codelineno-44-32"
href="#__codelineno-44-32"></a><span class="w"> </span><span
class="nt">command</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">[</span><span class="s">"/bin/sh"</span><span class="p
p-Indicator">,</span><span class="w"> </span><span class="s">"-c"</span><span
class="p p-Indicator">,</span><span class="w"> </span><span
class="s">"sleep</span><span class="nv"> </span><span class="s">15"</sp [...]
-<a id="__codelineno-44-33" name="__codelineno-44-33"
href="#__codelineno-44-33"></a>
-<a id="__codelineno-44-34" name="__codelineno-44-34"
href="#__codelineno-44-34"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
-<a id="__codelineno-44-35" name="__codelineno-44-35"
href="#__codelineno-44-35"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">8</span>
-<a id="__codelineno-44-36" name="__codelineno-44-36"
href="#__codelineno-44-36"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
-<a id="__codelineno-44-37" name="__codelineno-44-37"
href="#__codelineno-44-37"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
-<a id="__codelineno-44-38" name="__codelineno-44-38"
href="#__codelineno-44-38"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
-<a id="__codelineno-44-39" name="__codelineno-44-39"
href="#__codelineno-44-39"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">CELERY_CONCURRENCY</span>
-<a id="__codelineno-44-40" name="__codelineno-44-40"
href="#__codelineno-44-40"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="s">"8"</span><span class="w"> </span><span class="c1"># merged
with top-level LOG_LEVEL env var</span>
+<a id="__codelineno-44-5" name="__codelineno-44-5"
href="#__codelineno-44-5"></a><span class="w"> </span><span
class="nt">terminationGracePeriodSeconds</span><span class="p">:</span><span
class="w"> </span><span class="l l-Scalar l-Scalar-Plain">60</span>
+<a id="__codelineno-44-6" name="__codelineno-44-6"
href="#__codelineno-44-6"></a><span class="w"> </span><span
class="nt">nodeSelector</span><span class="p">:</span>
+<a id="__codelineno-44-7" name="__codelineno-44-7"
href="#__codelineno-44-7"></a><span class="w"> </span><span
class="nt">workload</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset</span>
+<a id="__codelineno-44-8" name="__codelineno-44-8"
href="#__codelineno-44-8"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-44-9" name="__codelineno-44-9"
href="#__codelineno-44-9"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
+<a id="__codelineno-44-10" name="__codelineno-44-10"
href="#__codelineno-44-10"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
+<a id="__codelineno-44-11" name="__codelineno-44-11"
href="#__codelineno-44-11"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
+<a id="__codelineno-44-12" name="__codelineno-44-12"
href="#__codelineno-44-12"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
+<a id="__codelineno-44-13" name="__codelineno-44-13"
href="#__codelineno-44-13"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
+<a id="__codelineno-44-14" name="__codelineno-44-14"
href="#__codelineno-44-14"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">LOG_LEVEL</span>
+<a id="__codelineno-44-15" name="__codelineno-44-15"
href="#__codelineno-44-15"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">INFO</span>
+<a id="__codelineno-44-16" name="__codelineno-44-16"
href="#__codelineno-44-16"></a>
+<a id="__codelineno-44-17" name="__codelineno-44-17"
href="#__codelineno-44-17"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
+<a id="__codelineno-44-18" name="__codelineno-44-18"
href="#__codelineno-44-18"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
+<a id="__codelineno-44-19" name="__codelineno-44-19"
href="#__codelineno-44-19"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
+<a id="__codelineno-44-20" name="__codelineno-44-20"
href="#__codelineno-44-20"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">4</span>
+</code></pre></div>
+<p>All components inherit the deployment template, pod template (node
selector, termination grace period), and container template (resources, env
vars).</p>
+<p><strong>3. Per-component customization</strong> — field-level merge with
top-level:</p>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-45-1"
name="__codelineno-45-1" href="#__codelineno-45-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-45-2" name="__codelineno-45-2"
href="#__codelineno-45-2"></a><span class="w"> </span><span
class="nt">deploymentTemplate</span><span class="p">:</span>
+<a id="__codelineno-45-3" name="__codelineno-45-3"
href="#__codelineno-45-3"></a><span class="w"> </span><span
class="nt">revisionHistoryLimit</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">3</span>
+<a id="__codelineno-45-4" name="__codelineno-45-4"
href="#__codelineno-45-4"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
+<a id="__codelineno-45-5" name="__codelineno-45-5"
href="#__codelineno-45-5"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-45-6" name="__codelineno-45-6"
href="#__codelineno-45-6"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
+<a id="__codelineno-45-7" name="__codelineno-45-7"
href="#__codelineno-45-7"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
+<a id="__codelineno-45-8" name="__codelineno-45-8"
href="#__codelineno-45-8"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
+<a id="__codelineno-45-9" name="__codelineno-45-9"
href="#__codelineno-45-9"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
+<a id="__codelineno-45-10" name="__codelineno-45-10"
href="#__codelineno-45-10"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
+<a id="__codelineno-45-11" name="__codelineno-45-11"
href="#__codelineno-45-11"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">LOG_LEVEL</span>
+<a id="__codelineno-45-12" name="__codelineno-45-12"
href="#__codelineno-45-12"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">INFO</span>
+<a id="__codelineno-45-13" name="__codelineno-45-13"
href="#__codelineno-45-13"></a>
+<a id="__codelineno-45-14" name="__codelineno-45-14"
href="#__codelineno-45-14"></a><span class="w"> </span><span
class="nt">webServer</span><span class="p">:</span>
+<a id="__codelineno-45-15" name="__codelineno-45-15"
href="#__codelineno-45-15"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">2</span>
+<a id="__codelineno-45-16" name="__codelineno-45-16"
href="#__codelineno-45-16"></a><span class="w"> </span><span
class="nt">deploymentTemplate</span><span class="p">:</span>
+<a id="__codelineno-45-17" name="__codelineno-45-17"
href="#__codelineno-45-17"></a><span class="w"> </span><span
class="nt">strategy</span><span class="p">:</span>
+<a id="__codelineno-45-18" name="__codelineno-45-18"
href="#__codelineno-45-18"></a><span class="w"> </span><span
class="nt">type</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">RollingUpdate</span>
+<a id="__codelineno-45-19" name="__codelineno-45-19"
href="#__codelineno-45-19"></a><span class="w"> </span><span
class="nt">rollingUpdate</span><span class="p">:</span>
+<a id="__codelineno-45-20" name="__codelineno-45-20"
href="#__codelineno-45-20"></a><span class="w"> </span><span
class="nt">maxSurge</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">1</span>
+<a id="__codelineno-45-21" name="__codelineno-45-21"
href="#__codelineno-45-21"></a><span class="w"> </span><span
class="nt">maxUnavailable</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">0</span>
+<a id="__codelineno-45-22" name="__codelineno-45-22"
href="#__codelineno-45-22"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
+<a id="__codelineno-45-23" name="__codelineno-45-23"
href="#__codelineno-45-23"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-45-24" name="__codelineno-45-24"
href="#__codelineno-45-24"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
+<a id="__codelineno-45-25" name="__codelineno-45-25"
href="#__codelineno-45-25"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
+<a id="__codelineno-45-26" name="__codelineno-45-26"
href="#__codelineno-45-26"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"4"</span><span class="w"> </span><span class="c1">#
replaces entire resources struct</span>
+<a id="__codelineno-45-27" name="__codelineno-45-27"
href="#__codelineno-45-27"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"8Gi"</span>
+<a id="__codelineno-45-28" name="__codelineno-45-28"
href="#__codelineno-45-28"></a><span class="w"> </span><span
class="nt">command</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">[</span><span class="s">"gunicorn"</span><span class="p
p-Indicator">]</span>
+<a id="__codelineno-45-29" name="__codelineno-45-29"
href="#__codelineno-45-29"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
+<a id="__codelineno-45-30" name="__codelineno-45-30"
href="#__codelineno-45-30"></a><span class="w"> </span><span
class="nt">preStop</span><span class="p">:</span>
+<a id="__codelineno-45-31" name="__codelineno-45-31"
href="#__codelineno-45-31"></a><span class="w"> </span><span
class="nt">exec</span><span class="p">:</span>
+<a id="__codelineno-45-32" name="__codelineno-45-32"
href="#__codelineno-45-32"></a><span class="w"> </span><span
class="nt">command</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">[</span><span class="s">"/bin/sh"</span><span class="p
p-Indicator">,</span><span class="w"> </span><span class="s">"-c"</span><span
class="p p-Indicator">,</span><span class="w"> </span><span
class="s">"sleep</span><span class="nv"> </span><span class="s">15"</sp [...]
+<a id="__codelineno-45-33" name="__codelineno-45-33"
href="#__codelineno-45-33"></a>
+<a id="__codelineno-45-34" name="__codelineno-45-34"
href="#__codelineno-45-34"></a><span class="w"> </span><span
class="nt">celeryWorker</span><span class="p">:</span>
+<a id="__codelineno-45-35" name="__codelineno-45-35"
href="#__codelineno-45-35"></a><span class="w"> </span><span
class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">8</span>
+<a id="__codelineno-45-36" name="__codelineno-45-36"
href="#__codelineno-45-36"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
+<a id="__codelineno-45-37" name="__codelineno-45-37"
href="#__codelineno-45-37"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-45-38" name="__codelineno-45-38"
href="#__codelineno-45-38"></a><span class="w"> </span><span
class="nt">env</span><span class="p">:</span>
+<a id="__codelineno-45-39" name="__codelineno-45-39"
href="#__codelineno-45-39"></a><span class="w"> </span><span class="p
p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">CELERY_CONCURRENCY</span>
+<a id="__codelineno-45-40" name="__codelineno-45-40"
href="#__codelineno-45-40"></a><span class="w"> </span><span
class="nt">value</span><span class="p">:</span><span class="w"> </span><span
class="s">"8"</span><span class="w"> </span><span class="c1"># merged
with top-level LOG_LEVEL env var</span>
</code></pre></div>
<h3 id="merge-semantics">Merge semantics<a class="headerlink"
href="#merge-semantics" title="Permanent link">¶</a></h3>
<p>Per-component <code>deploymentTemplate</code> and <code>podTemplate</code>
are each <strong>field-level merged</strong> independently with the top-level —
you only specify what's different.</p>
@@ -3249,63 +3289,63 @@ for up-to-date guidance on deploying extensions.</p>
</table>
<p>Container ports are not configurable. Each component listens on a fixed
port set by the operator, and its Service, default probes, and NetworkPolicy
target that port. To change the port clients connect to, set
<code>service.port</code> (see <a
href="../networking-and-monitoring/#services">Services</a>).</p>
<p><strong>Pod-level resources</strong> (Kubernetes 1.34+): When
<code>podTemplate.resources</code> is set, it defines the total resource budget
for the entire pod, enabling resource sharing among containers (main +
sidecars). Container-level <code>podTemplate.container.resources</code> remains
available for per-container limits.</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-45-1"
name="__codelineno-45-1" href="#__codelineno-45-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-45-2" name="__codelineno-45-2"
href="#__codelineno-45-2"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
-<a id="__codelineno-45-3" name="__codelineno-45-3"
href="#__codelineno-45-3"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
-<a id="__codelineno-45-4" name="__codelineno-45-4"
href="#__codelineno-45-4"></a><span class="w"> </span><span
class="nt">requests</span><span class="p">:</span>
-<a id="__codelineno-45-5" name="__codelineno-45-5"
href="#__codelineno-45-5"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"4"</span>
-<a id="__codelineno-45-6" name="__codelineno-45-6"
href="#__codelineno-45-6"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"8Gi"</span>
-<a id="__codelineno-45-7" name="__codelineno-45-7"
href="#__codelineno-45-7"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
-<a id="__codelineno-45-8" name="__codelineno-45-8"
href="#__codelineno-45-8"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"8"</span>
-<a id="__codelineno-45-9" name="__codelineno-45-9"
href="#__codelineno-45-9"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"16Gi"</span>
-<a id="__codelineno-45-10" name="__codelineno-45-10"
href="#__codelineno-45-10"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
-<a id="__codelineno-45-11" name="__codelineno-45-11"
href="#__codelineno-45-11"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
-<a id="__codelineno-45-12" name="__codelineno-45-12"
href="#__codelineno-45-12"></a><span class="w"> </span><span
class="nt">requests</span><span class="p">:</span>
-<a id="__codelineno-45-13" name="__codelineno-45-13"
href="#__codelineno-45-13"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
-<a id="__codelineno-45-14" name="__codelineno-45-14"
href="#__codelineno-45-14"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-46-1"
name="__codelineno-46-1" href="#__codelineno-46-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-46-2" name="__codelineno-46-2"
href="#__codelineno-46-2"></a><span class="w"> </span><span
class="nt">podTemplate</span><span class="p">:</span>
+<a id="__codelineno-46-3" name="__codelineno-46-3"
href="#__codelineno-46-3"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
+<a id="__codelineno-46-4" name="__codelineno-46-4"
href="#__codelineno-46-4"></a><span class="w"> </span><span
class="nt">requests</span><span class="p">:</span>
+<a id="__codelineno-46-5" name="__codelineno-46-5"
href="#__codelineno-46-5"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"4"</span>
+<a id="__codelineno-46-6" name="__codelineno-46-6"
href="#__codelineno-46-6"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"8Gi"</span>
+<a id="__codelineno-46-7" name="__codelineno-46-7"
href="#__codelineno-46-7"></a><span class="w"> </span><span
class="nt">limits</span><span class="p">:</span>
+<a id="__codelineno-46-8" name="__codelineno-46-8"
href="#__codelineno-46-8"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"8"</span>
+<a id="__codelineno-46-9" name="__codelineno-46-9"
href="#__codelineno-46-9"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"16Gi"</span>
+<a id="__codelineno-46-10" name="__codelineno-46-10"
href="#__codelineno-46-10"></a><span class="w"> </span><span
class="nt">container</span><span class="p">:</span>
+<a id="__codelineno-46-11" name="__codelineno-46-11"
href="#__codelineno-46-11"></a><span class="w"> </span><span
class="nt">resources</span><span class="p">:</span>
+<a id="__codelineno-46-12" name="__codelineno-46-12"
href="#__codelineno-46-12"></a><span class="w"> </span><span
class="nt">requests</span><span class="p">:</span>
+<a id="__codelineno-46-13" name="__codelineno-46-13"
href="#__codelineno-46-13"></a><span class="w"> </span><span
class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span
class="s">"2"</span>
+<a id="__codelineno-46-14" name="__codelineno-46-14"
href="#__codelineno-46-14"></a><span class="w"> </span><span
class="nt">memory</span><span class="p">:</span><span class="w"> </span><span
class="s">"4Gi"</span>
</code></pre></div>
<h2 id="force-reload">Force Reload<a class="headerlink" href="#force-reload"
title="Permanent link">¶</a></h2>
<p>Trigger a rolling restart of all components:</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-46-1"
name="__codelineno-46-1" href="#__codelineno-46-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-46-2" name="__codelineno-46-2"
href="#__codelineno-46-2"></a><span class="w"> </span><span
class="nt">forceReload</span><span class="p">:</span><span class="w">
</span><span class="s">"2026-03-14T12:00:00Z"</span>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-47-1"
name="__codelineno-47-1" href="#__codelineno-47-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-47-2" name="__codelineno-47-2"
href="#__codelineno-47-2"></a><span class="w"> </span><span
class="nt">forceReload</span><span class="p">:</span><span class="w">
</span><span class="s">"2026-03-14T12:00:00Z"</span>
</code></pre></div>
<p>Change the value to any new string to trigger a restart. This is primarily
useful for <strong>secret rotation</strong>: when you update a Kubernetes
Secret's data, pods don't automatically restart because the operator references
secrets via <code>valueFrom.secretKeyRef</code> (resolved at pod creation
time). Changing <code>forceReload</code> forces new pods that pick up the
updated secret values.</p>
<p>Use the same mechanism when you know mounted extension contents have
changed.</p>
<h2 id="suspend-reconciliation">Suspend Reconciliation<a class="headerlink"
href="#suspend-reconciliation" title="Permanent link">¶</a></h2>
<p>Temporarily pause reconciliation without deleting resources:</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-47-1"
name="__codelineno-47-1" href="#__codelineno-47-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-47-2" name="__codelineno-47-2"
href="#__codelineno-47-2"></a><span class="w"> </span><span
class="nt">suspend</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">true</span>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-48-1"
name="__codelineno-48-1" href="#__codelineno-48-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-48-2" name="__codelineno-48-2"
href="#__codelineno-48-2"></a><span class="w"> </span><span
class="nt">suspend</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">true</span>
</code></pre></div>
<p>When suspended, the operator stops all reconciliation — no lifecycle task
Jobs run, no component resources are created or updated, and no resources are
deleted. Set <code>suspend: false</code> (or remove the field) to resume.</p>
<h2 id="connecting-postgresql-and-valkey">Connecting PostgreSQL and Valkey<a
class="headerlink" href="#connecting-postgresql-and-valkey" title="Permanent
link">¶</a></h2>
<p>The operator does not manage database or cache infrastructure. Use one of
these approaches:</p>
<h3 id="managed-services">Managed Services<a class="headerlink"
href="#managed-services" title="Permanent link">¶</a></h3>
<p>Set connection details via <code>secretKeyFrom</code>,
<code>metastore.uriFrom</code>, and <code>valkey</code>:</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-48-1"
name="__codelineno-48-1" href="#__codelineno-48-1"></a><span
class="nt">spec</span><span class="p">:</span>
-<a id="__codelineno-48-2" name="__codelineno-48-2"
href="#__codelineno-48-2"></a><span class="w"> </span><span
class="nt">secretKeyFrom</span><span class="p">:</span>
-<a id="__codelineno-48-3" name="__codelineno-48-3"
href="#__codelineno-48-3"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secrets</span>
-<a id="__codelineno-48-4" name="__codelineno-48-4"
href="#__codelineno-48-4"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
-<a id="__codelineno-48-5" name="__codelineno-48-5"
href="#__codelineno-48-5"></a><span class="w"> </span><span
class="nt">metastore</span><span class="p">:</span>
-<a id="__codelineno-48-6" name="__codelineno-48-6"
href="#__codelineno-48-6"></a><span class="w"> </span><span
class="nt">uriFrom</span><span class="p">:</span>
-<a id="__codelineno-48-7" name="__codelineno-48-7"
href="#__codelineno-48-7"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-db</span>
-<a id="__codelineno-48-8" name="__codelineno-48-8"
href="#__codelineno-48-8"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">uri</span>
-<a id="__codelineno-48-9" name="__codelineno-48-9"
href="#__codelineno-48-9"></a><span class="w"> </span><span
class="nt">valkey</span><span class="p">:</span>
-<a id="__codelineno-48-10" name="__codelineno-48-10"
href="#__codelineno-48-10"></a><span class="w"> </span><span
class="nt">host</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">valkey.default.svc</span>
-<a id="__codelineno-48-11" name="__codelineno-48-11"
href="#__codelineno-48-11"></a><span class="w"> </span><span
class="nt">passwordFrom</span><span class="p">:</span>
-<a id="__codelineno-48-12" name="__codelineno-48-12"
href="#__codelineno-48-12"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">valkey-credentials</span>
-<a id="__codelineno-48-13" name="__codelineno-48-13"
href="#__codelineno-48-13"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">password</span>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-49-1"
name="__codelineno-49-1" href="#__codelineno-49-1"></a><span
class="nt">spec</span><span class="p">:</span>
+<a id="__codelineno-49-2" name="__codelineno-49-2"
href="#__codelineno-49-2"></a><span class="w"> </span><span
class="nt">secretKeyFrom</span><span class="p">:</span>
+<a id="__codelineno-49-3" name="__codelineno-49-3"
href="#__codelineno-49-3"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secrets</span>
+<a id="__codelineno-49-4" name="__codelineno-49-4"
href="#__codelineno-49-4"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
+<a id="__codelineno-49-5" name="__codelineno-49-5"
href="#__codelineno-49-5"></a><span class="w"> </span><span
class="nt">metastore</span><span class="p">:</span>
+<a id="__codelineno-49-6" name="__codelineno-49-6"
href="#__codelineno-49-6"></a><span class="w"> </span><span
class="nt">uriFrom</span><span class="p">:</span>
+<a id="__codelineno-49-7" name="__codelineno-49-7"
href="#__codelineno-49-7"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-db</span>
+<a id="__codelineno-49-8" name="__codelineno-49-8"
href="#__codelineno-49-8"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">uri</span>
+<a id="__codelineno-49-9" name="__codelineno-49-9"
href="#__codelineno-49-9"></a><span class="w"> </span><span
class="nt">valkey</span><span class="p">:</span>
+<a id="__codelineno-49-10" name="__codelineno-49-10"
href="#__codelineno-49-10"></a><span class="w"> </span><span
class="nt">host</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">valkey.default.svc</span>
+<a id="__codelineno-49-11" name="__codelineno-49-11"
href="#__codelineno-49-11"></a><span class="w"> </span><span
class="nt">passwordFrom</span><span class="p">:</span>
+<a id="__codelineno-49-12" name="__codelineno-49-12"
href="#__codelineno-49-12"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">valkey-credentials</span>
+<a id="__codelineno-49-13" name="__codelineno-49-13"
href="#__codelineno-49-13"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">password</span>
</code></pre></div>
<h3 id="cloudnativepg">CloudNativePG<a class="headerlink"
href="#cloudnativepg" title="Permanent link">¶</a></h3>
<p>Use <a href="https://cloudnative-pg.io/">CloudNativePG</a> for
PostgreSQL:</p>
-<div class="highlight"><pre><span></span><code><a id="__codelineno-49-1"
name="__codelineno-49-1" href="#__codelineno-49-1"></a><span class="c1">#
CloudNativePG Cluster (separate CR)</span>
-<a id="__codelineno-49-2" name="__codelineno-49-2"
href="#__codelineno-49-2"></a><span class="nt">apiVersion</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">postgresql.cnpg.io/v1</span>
-<a id="__codelineno-49-3" name="__codelineno-49-3"
href="#__codelineno-49-3"></a><span class="nt">kind</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">Cluster</span>
-<a id="__codelineno-49-4" name="__codelineno-49-4"
href="#__codelineno-49-4"></a><span class="nt">metadata</span><span
class="p">:</span>
-<a id="__codelineno-49-5" name="__codelineno-49-5"
href="#__codelineno-49-5"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-pg</span>
-<a id="__codelineno-49-6" name="__codelineno-49-6"
href="#__codelineno-49-6"></a><span class="nt">spec</span><span
class="p">:</span>
-<a id="__codelineno-49-7" name="__codelineno-49-7"
href="#__codelineno-49-7"></a><span class="w"> </span><span
class="nt">instances</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">3</span>
-<a id="__codelineno-49-8" name="__codelineno-49-8"
href="#__codelineno-49-8"></a><span class="w"> </span><span
class="nt">storage</span><span class="p">:</span>
-<a id="__codelineno-49-9" name="__codelineno-49-9"
href="#__codelineno-49-9"></a><span class="w"> </span><span
class="nt">size</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">10Gi</span>
+<div class="highlight"><pre><span></span><code><a id="__codelineno-50-1"
name="__codelineno-50-1" href="#__codelineno-50-1"></a><span class="c1">#
CloudNativePG Cluster (separate CR)</span>
+<a id="__codelineno-50-2" name="__codelineno-50-2"
href="#__codelineno-50-2"></a><span class="nt">apiVersion</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">postgresql.cnpg.io/v1</span>
+<a id="__codelineno-50-3" name="__codelineno-50-3"
href="#__codelineno-50-3"></a><span class="nt">kind</span><span
class="p">:</span><span class="w"> </span><span class="l l-Scalar
l-Scalar-Plain">Cluster</span>
+<a id="__codelineno-50-4" name="__codelineno-50-4"
href="#__codelineno-50-4"></a><span class="nt">metadata</span><span
class="p">:</span>
+<a id="__codelineno-50-5" name="__codelineno-50-5"
href="#__codelineno-50-5"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-pg</span>
+<a id="__codelineno-50-6" name="__codelineno-50-6"
href="#__codelineno-50-6"></a><span class="nt">spec</span><span
class="p">:</span>
+<a id="__codelineno-50-7" name="__codelineno-50-7"
href="#__codelineno-50-7"></a><span class="w"> </span><span
class="nt">instances</span><span class="p">:</span><span class="w">
</span><span class="l l-Scalar l-Scalar-Plain">3</span>
+<a id="__codelineno-50-8" name="__codelineno-50-8"
href="#__codelineno-50-8"></a><span class="w"> </span><span
class="nt">storage</span><span class="p">:</span>
+<a id="__codelineno-50-9" name="__codelineno-50-9"
href="#__codelineno-50-9"></a><span class="w"> </span><span
class="nt">size</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">10Gi</span>
</code></pre></div>
<p>Then reference the connection secret via <code>metastore.uriFrom</code> on
your Superset CR.</p>
<h3 id="redis-operator">Redis Operator<a class="headerlink"
href="#redis-operator" title="Permanent link">¶</a></h3>
diff --git a/user-guide/installation/index.html
b/user-guide/installation/index.html
index 1e6eef6..df1f623 100644
--- a/user-guide/installation/index.html
+++ b/user-guide/installation/index.html
@@ -1485,6 +1485,7 @@ which are enabled by default as beta from 1.25 and
graduated to GA in 1.29. On c
<a id="__codelineno-6-24" name="__codelineno-6-24"
href="#__codelineno-6-24"></a><span class="s">EOF</span>
</code></pre></div>
<p>The operator will create parent-owned lifecycle task Jobs to perform
database migration and initialization, then create the web server Deployment,
Service, and ConfigMap. Check task status with <code>kubectl describe superset
my-superset</code>.</p>
+<p>The official lean Superset image (e.g. <code>6.1.0</code>) has no database
drivers. Set <code>image</code> to a build that includes the driver for your
connection URI, such as <code>psycopg2</code> for
<code>postgresql+psycopg2</code>. See <a
href="../configuration/#metastore">Metastore</a> for driver details.</p>
<h2 id="4-watch-it-come-up">4. Watch it come up<a class="headerlink"
href="#4-watch-it-come-up" title="Permanent link">¶</a></h2>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1"
name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="c1"># Watch
the parent CR status</span>
<a id="__codelineno-7-2" name="__codelineno-7-2"
href="#__codelineno-7-2"></a>kubectl<span class="w"> </span>get<span class="w">
</span>superset<span class="w"> </span>my-superset<span class="w"> </span>-w
diff --git a/user-guide/lifecycle/index.html b/user-guide/lifecycle/index.html
index ff9b4af..b1725af 100644
--- a/user-guide/lifecycle/index.html
+++ b/user-guide/lifecycle/index.html
@@ -2250,14 +2250,16 @@ flowchart TD
<a id="__codelineno-17-3" name="__codelineno-17-3"
href="#__codelineno-17-3"></a><span class="nt">metadata</span><span
class="p">:</span>
<a id="__codelineno-17-4" name="__codelineno-17-4"
href="#__codelineno-17-4"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">my-superset</span>
<a id="__codelineno-17-5" name="__codelineno-17-5"
href="#__codelineno-17-5"></a><span class="nt">spec</span><span
class="p">:</span>
-<a id="__codelineno-17-6" name="__codelineno-17-6"
href="#__codelineno-17-6"></a><span class="w"> </span><span
class="nt">secretKeyFrom</span><span class="p">:</span>
-<a id="__codelineno-17-7" name="__codelineno-17-7"
href="#__codelineno-17-7"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secret-v2</span>
-<a id="__codelineno-17-8" name="__codelineno-17-8"
href="#__codelineno-17-8"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
-<a id="__codelineno-17-9" name="__codelineno-17-9"
href="#__codelineno-17-9"></a><span class="w"> </span><span
class="nt">previousSecretKeyFrom</span><span class="p">:</span>
-<a id="__codelineno-17-10" name="__codelineno-17-10"
href="#__codelineno-17-10"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secret-v1</span>
-<a id="__codelineno-17-11" name="__codelineno-17-11"
href="#__codelineno-17-11"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
-<a id="__codelineno-17-12" name="__codelineno-17-12"
href="#__codelineno-17-12"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
-<a id="__codelineno-17-13" name="__codelineno-17-13"
href="#__codelineno-17-13"></a><span class="w"> </span><span
class="nt">rotate</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">{}</span>
+<a id="__codelineno-17-6" name="__codelineno-17-6"
href="#__codelineno-17-6"></a><span class="w"> </span><span
class="nt">image</span><span class="p">:</span>
+<a id="__codelineno-17-7" name="__codelineno-17-7"
href="#__codelineno-17-7"></a><span class="w"> </span><span
class="nt">tag</span><span class="p">:</span><span class="w"> </span><span
class="s">"6.1.0"</span>
+<a id="__codelineno-17-8" name="__codelineno-17-8"
href="#__codelineno-17-8"></a><span class="w"> </span><span
class="nt">secretKeyFrom</span><span class="p">:</span>
+<a id="__codelineno-17-9" name="__codelineno-17-9"
href="#__codelineno-17-9"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secret-v2</span>
+<a id="__codelineno-17-10" name="__codelineno-17-10"
href="#__codelineno-17-10"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
+<a id="__codelineno-17-11" name="__codelineno-17-11"
href="#__codelineno-17-11"></a><span class="w"> </span><span
class="nt">previousSecretKeyFrom</span><span class="p">:</span>
+<a id="__codelineno-17-12" name="__codelineno-17-12"
href="#__codelineno-17-12"></a><span class="w"> </span><span
class="nt">name</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">superset-secret-v1</span>
+<a id="__codelineno-17-13" name="__codelineno-17-13"
href="#__codelineno-17-13"></a><span class="w"> </span><span
class="nt">key</span><span class="p">:</span><span class="w"> </span><span
class="l l-Scalar l-Scalar-Plain">secret-key</span>
+<a id="__codelineno-17-14" name="__codelineno-17-14"
href="#__codelineno-17-14"></a><span class="w"> </span><span
class="nt">lifecycle</span><span class="p">:</span>
+<a id="__codelineno-17-15" name="__codelineno-17-15"
href="#__codelineno-17-15"></a><span class="w"> </span><span
class="nt">rotate</span><span class="p">:</span><span class="w"> </span><span
class="p p-Indicator">{}</span>
</code></pre></div>
<p>The operator injects both <code>SECRET_KEY</code> and
<code>PREVIOUS_SECRET_KEY</code> into all Python components. The rotate task
Job uses both to decrypt stored secrets with the old key and re-encrypt with
the new one. After rotation completes, components restart with the new key and
can use <code>PREVIOUS_SECRET_KEY</code> for fallback decryption during the
transition.</p>
<p>The command is idempotent: re-running it skips already-converted values. If
no <code>PREVIOUS_SECRET_KEY</code> is set, it exits cleanly. If decryption
fails for any entry, the entire transaction rolls back.</p>