<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FKubernetes%2FDay-2_operations</id>
	<title>Deployment/Kubernetes/Day-2 operations - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FKubernetes%2FDay-2_operations"/>
	<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Day-2_operations&amp;action=history"/>
	<updated>2026-07-06T05:20:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Day-2_operations&amp;diff=413&amp;oldid=prev</id>
		<title>Admin: Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Day-2_operations&amp;diff=413&amp;oldid=prev"/>
		<updated>2026-07-06T04:04:18Z</updated>

		<summary type="html">&lt;p&gt;Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:34, 6 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 113:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 113:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Warning|1=Restore is a design goal, not a finished, tested procedure. End-to-end restore is not yet fully automated or documented in this deployment, and several supporting pieces (such as extending and repopulating Longhorn volumes) are still being worked out. Do not treat restore as production-proven until it has been validated against your own backups. Practice and verify a full restore on a throwaway cluster before depending on it.}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Warning|1=Restore is a design goal, not a finished, tested procedure. End-to-end restore is not yet fully automated or documented in this deployment, and several supporting pieces (such as extending and repopulating Longhorn volumes) are still being worked out. Do not treat restore as production-proven until it has been validated against your own backups. Practice and verify a full restore on a throwaway cluster before depending on it.}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-added&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Maturity: available today vs evolving ==&lt;/div&gt;&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-added&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Use this split to set expectations. The &amp;amp;quot;evolving / planned&amp;amp;quot; column is drawn from the deployment&#039;s roadmap.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Use this split to set expectations. The &amp;amp;quot;evolving / planned&amp;amp;quot; column is drawn from the deployment&#039;s roadmap.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 143:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 141:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Tip|1=Manual Grafana setup, manual secret retrieval, and unautomated restore are the rough edges to plan around. As the roadmap items land (operator-managed Postgres, Terraform-generated secrets, version-locked charts), these workflows will tighten up.}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Tip|1=Manual Grafana setup, manual secret retrieval, and unautomated restore are the rough edges to plan around. As the roadmap items land (operator-managed Postgres, Terraform-generated secrets, version-locked charts), these workflows will tighten up.}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Navbox deployment}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Day-2_operations&amp;diff=205&amp;oldid=prev</id>
		<title>Admin: OHC identity seed</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Day-2_operations&amp;diff=205&amp;oldid=prev"/>
		<updated>2026-07-04T23:07:59Z</updated>

		<summary type="html">&lt;p&gt;OHC identity seed&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Doc header&lt;br /&gt;
|type=guide&lt;br /&gt;
|domain=deployment&lt;br /&gt;
|title=Day-2 operations&lt;br /&gt;
|order=6&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Once Care is running on the cluster (see [[Deployment/Kubernetes/Deploying Care onto the cluster|Deploying Care onto the cluster]]), day-2 operations cover keeping it observable and recoverable: monitoring, log aggregation, and backups for every stateful component.&lt;br /&gt;
&lt;br /&gt;
This deployment is a work in progress. Some capabilities are running today; others are design goals that are partially built or not yet automated. This page is honest about which is which — treat anything marked &amp;amp;quot;evolving&amp;amp;quot; or &amp;amp;quot;planned&amp;amp;quot; as not-yet-tested, and verify against the cluster before relying on it.&lt;br /&gt;
&lt;br /&gt;
== Monitoring and logs ==&lt;br /&gt;
&lt;br /&gt;
Observability is provided by a Prometheus + Grafana + Loki stack, deployed through the monitoring module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;python deployer.py apply-tofu monitoring&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The pieces fit together like this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| Prometheus&lt;br /&gt;
| Scrapes and stores metrics from cluster components.&lt;br /&gt;
|-&lt;br /&gt;
| Grafana&lt;br /&gt;
| Dashboards and visualization over metrics and logs.&lt;br /&gt;
|-&lt;br /&gt;
| Loki&lt;br /&gt;
| Log aggregation and storage, queried from Grafana.&lt;br /&gt;
|-&lt;br /&gt;
| Alloy&lt;br /&gt;
| Collects logs from pods/nodes and ships them into Loki.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the stack is stable, finish the setup in Grafana:&lt;br /&gt;
&lt;br /&gt;
# Log in to Grafana using the Kubernetes-autogenerated admin password (read it from the Grafana admin secret in the monitoring namespace — do not hardcode or commit it).&lt;br /&gt;
# Add &amp;#039;&amp;#039;&amp;#039;Loki&amp;#039;&amp;#039;&amp;#039; as a data source so logs become queryable alongside metrics.&lt;br /&gt;
# Import the dashboards you need.&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Initial Grafana setup (data source + dashboards) is a manual step today. The admin password is generated by Kubernetes — retrieve it from the cluster secret rather than setting a known value.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=Alloy is known to emit a noisy &amp;lt;code&amp;gt;fsnotifier&amp;lt;/code&amp;gt;-related warning in this environment. It is a known cosmetic issue and does not affect log shipping.}}&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
&lt;br /&gt;
Each stateful component is backed up on a daily/configurable schedule to S3-compatible external storage. The mechanism differs by component.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL (Care, Odoo, Metabase databases) ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is backed up using the [&amp;lt;nowiki/&amp;gt;https://cloudnative-pg.io/ CloudNativePG] operator together with the &amp;#039;&amp;#039;&amp;#039;barman-cloud&amp;#039;&amp;#039;&amp;#039; plugin, which performs continuous &amp;#039;&amp;#039;&amp;#039;WAL archiving&amp;#039;&amp;#039;&amp;#039; and base backups to S3-compatible storage. Install the plugin manifest from the CloudNativePG release:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;kubectl apply -f \&lt;br /&gt;
  https://github.com/cloudnative-pg/plugin-barman-cloud/releases/download/v0.10.0/manifest.yaml&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The plugin needs credentials and a target bucket. Provide an S3 credentials secret and point the archive at your bucket — keep all values in cluster secrets, never in committed YAML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;kubectl create secret generic s3-secret \&lt;br /&gt;
  --from-literal=access_key=&amp;lt;s3-access-key&amp;gt; \&lt;br /&gt;
  --from-literal=secret_key=&amp;lt;s3-secret-key&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Info|1=The same Postgres + barman-cloud backup pattern applies to every Postgres instance in the deployment: Care&amp;#039;s database, Odoo&amp;#039;s database, and Metabase&amp;#039;s database. Configure each with its own bucket/prefix.}}&lt;br /&gt;
&lt;br /&gt;
=== Volumes (Longhorn snapshots and backups) ===&lt;br /&gt;
&lt;br /&gt;
Persistent volumes are managed by [&amp;lt;nowiki/&amp;gt;https://longhorn.io/ Longhorn]. Longhorn takes volume snapshots and ships volume backups to an S3 target. The backup target is configured with an S3 credentials secret in the &amp;lt;code&amp;gt;longhorn-system&amp;lt;/code&amp;gt; namespace — generalize the endpoint and keys to your own provider:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;kubectl create secret generic &amp;lt;backup-secret-name&amp;gt; -n longhorn-system \&lt;br /&gt;
  --from-literal=AWS_ACCESS_KEY_ID=&amp;lt;s3-access-key&amp;gt; \&lt;br /&gt;
  --from-literal=AWS_SECRET_ACCESS_KEY=&amp;lt;s3-secret-key&amp;gt; \&lt;br /&gt;
  --from-literal=AWS_ENDPOINTS=&amp;lt;s3-endpoint&amp;gt; \&lt;br /&gt;
  --from-literal=AWS_REGION=&amp;lt;s3-region&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What gets backed up ===&lt;br /&gt;
&lt;br /&gt;
Daily/configurable backups are intended for each stateful component:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component&lt;br /&gt;
! What is protected&lt;br /&gt;
! Mechanism&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Care)&lt;br /&gt;
| Application database&lt;br /&gt;
| CloudNativePG + barman-cloud → S3&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Odoo)&lt;br /&gt;
| Odoo database&lt;br /&gt;
| CloudNativePG + barman-cloud → S3&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Metabase)&lt;br /&gt;
| Metabase database&lt;br /&gt;
| CloudNativePG + barman-cloud → S3&lt;br /&gt;
|-&lt;br /&gt;
| OpenSearch / Elasticsearch&lt;br /&gt;
| Search index data&lt;br /&gt;
| Volume backup to external media&lt;br /&gt;
|-&lt;br /&gt;
| Object store (RustFS)&lt;br /&gt;
| Uploads, audit logs, public data&lt;br /&gt;
| Incremental sync to external store&lt;br /&gt;
|-&lt;br /&gt;
| Persistent volumes (Longhorn)&lt;br /&gt;
| All attached volumes&lt;br /&gt;
| Longhorn snapshots/backups → S3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Redis/Valkey runs in non-persistent mode by design — it holds no durable state and is not backed up.}}&lt;br /&gt;
&lt;br /&gt;
== Restore ==&lt;br /&gt;
&lt;br /&gt;
A core design goal of this deployment is that &amp;#039;&amp;#039;&amp;#039;a fresh cluster can be restored from backups&amp;#039;&amp;#039;&amp;#039; — rebuild the Kubernetes cluster, then replay Postgres WAL archives, Longhorn volume backups, and the object-store sync to bring Care back up.&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=Restore is a design goal, not a finished, tested procedure. End-to-end restore is not yet fully automated or documented in this deployment, and several supporting pieces (such as extending and repopulating Longhorn volumes) are still being worked out. Do not treat restore as production-proven until it has been validated against your own backups. Practice and verify a full restore on a throwaway cluster before depending on it.}}&lt;br /&gt;
&lt;br /&gt;
== Maturity: available today vs evolving ==&lt;br /&gt;
&lt;br /&gt;
Use this split to set expectations. The &amp;amp;quot;evolving / planned&amp;amp;quot; column is drawn from the deployment&amp;#039;s roadmap.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Available today&lt;br /&gt;
! Evolving / planned&lt;br /&gt;
|-&lt;br /&gt;
| Prometheus + Grafana + Loki monitoring&lt;br /&gt;
| Move Postgres to a cluster operator–managed Helm chart&lt;br /&gt;
|-&lt;br /&gt;
| Alloy log shipping into Loki&lt;br /&gt;
| Generate secrets/passwords via Terraform and auto-configure&lt;br /&gt;
|-&lt;br /&gt;
| Postgres backups via CloudNativePG + barman-cloud → S3&lt;br /&gt;
| Version-lock all Helm charts&lt;br /&gt;
|-&lt;br /&gt;
| Longhorn volume snapshots/backups → S3&lt;br /&gt;
| TLS for database and other inter-pod communication&lt;br /&gt;
|-&lt;br /&gt;
| Per-component daily/configurable backups&lt;br /&gt;
| Documented, automated restore-from-backup procedure&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Caching layer for the nginx-based frontend&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=Manual Grafana setup, manual secret retrieval, and unautomated restore are the rough edges to plan around. As the roadmap items land (operator-managed Postgres, Terraform-generated secrets, version-locked charts), these workflows will tighten up.}}&lt;br /&gt;
&lt;br /&gt;
{{Related}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>