Page:
Storage and State
No results
3
Storage and State
Finn Dührkop edited this page 2026-10-27 03:43:50 +00:00
Storage and state
Block storage
- Longhorn is the cluster block-storage system. The default replica count is
2, withbest-effortreplica auto-balancing. - The node configuration marks worker nodes as eligible for Longhorn disks. The descheduler runs separately from replica balancing.
- Prometheus, application configuration, and other persistent claims use Longhorn where their modules specify it.
- Single-replica workloads using ReadWriteOnce claims specify
Recreatewhere configured.
Sources: modules/longhorn/, nodes.tf, modules/descheduler/, and each application's module.
NAS media
- Terraform defaults the NAS server to
192.168.1.60and the exported media root to/volume1/Media. - RomM's library is a read/write NFS volume under
romm/; Jellyfin's media volume is read-only underjellyfin/. - The configured RomM library claim is 50 GiB and the Jellyfin media claim is 2.94 TiB. NFS does not enforce these claim sizes as quotas; free space is shared on the NAS.
- NFS export permissions and the NAS's root mapping are managed outside this Terraform repository. The documented NAS export uses root-to-guest mapping; RomM's library write access depends on that mapped identity.
Sources: variables.tf, modules/romm/, and modules/jellyfin/.
RustFS and Terraform state
- RustFS is an S3-compatible service backed by Longhorn. It uses path-style requests and enforces conditional
If-None-Matchwrites. - The Terraform backend uses the
terraform-statebucket and keyhomelab/terraform.tfstate, with S3-native lock files. - Backend requests use an in-cluster port-forward to RustFS; the repository configuration describes why the Cloudflare proxy path is not used by the AWS SDK.
- Terraform state includes sensitive values.
scripts/tfreads backend credentials from a Kubernetes Secret; credentials and state data are not represented in this Wiki. - The in-cluster S3 endpoint is
http://rustfs.rustfs.svc.cluster.local:9000. The public proxy's request-body limit is documented as 100 MB on the configured Cloudflare plan.
Sources: modules/rustfs/, backend.tf, backend.hcl.example, and scripts/tf.
OpenBao
- OpenBao runs a single Raft replica on Longhorn; it is not an HA cluster.
- The static seal-key Secret is created outside Terraform. Terraform references it but does not manage its key material.
- The seal key and encrypted Raft data reside in the same cluster. The key is not an independent external KMS.
- The configured user-role policy is read-only under
kv/shared/; the administrator policy is separate.
Sources: modules/openbao/ and modules/authentik/.
Data protection boundary
The repository contains state-backup tooling, but not a copy of the NAS media data. Terraform state, backups, seal-key material, and application credentials are not Wiki content.