bedrock
tenant layer

Storage classes

Classes

longhornlonghorn-local
Defined byLonghorn’s manifeststorage/longhorn-local.yaml
Default classYesNo
ReplicasLonghorn’s default, spread across nodes1
Data localityOffstrict-local, the replica stays on the pod’s node
EncryptedNoYes, LUKS with the key in longhorn-crypto
BindingImmediateWaitForFirstConsumer
ExpansionAllowedAllowed
Reclaim policyDeleteDelete

longhorn-local binds only when the pod is scheduled, so the volume is created on the node the pod lands on. Garage runs one pod per node, so each Garage node owns the disk beside it.

Who uses which

ClassUsed by
longhornDatabase clusters, Prometheus, Loki, Tempo, Grafana, NATS, Redis, Kafka
longhorn-localGarage

Garage replicates every object across its own nodes, so its volumes need no Longhorn replication. Everything else relies on Longhorn for its copies.

Encryption key

The encrypted class passes the longhorn-crypto Secret to the CSI driver at stage, publish and expand time:

FieldValue
CRYPTO_KEY_PROVIDERsecret
CRYPTO_KEY_CIPHERaes-xts-plain64
CRYPTO_KEY_HASHsha256
CRYPTO_KEY_SIZE256
CRYPTO_PBKDFargon2i
CRYPTO_KEY_VALUEThe passphrase. Set it before the first deploy.

The class has no provisioner secret parameters on purpose. Encryption happens on the node, so only the node stages need the key.

Longhorn settings

storage/longhorn-settings.yaml changes these Longhorn defaults:

SettingValueWhy
node-down-pod-deletion-policydelete-both-statefulset-and-deployment-podPods on a dead node are deleted so they can start elsewhere with their volume
storage-over-provisioning-percentage300Volumes can promise more than the disk holds, since most are not full
upgrade-checkerfalseNo calls out to check for new versions
allow-collecting-longhorn-usage-metricsfalseNo usage data sent out