{{- if .Values.longhorn.enabled }} # Tenant data StorageClass. Tower's instance overlays bind here in # Phase 6 (Tower stamps storageClassName=longhorn-tenants on new # instance PVCs). Existing instances on local-path stay where they # are — Longhorn additive, doesn't replace. # # `replicaCount` comes from values; Standalone tier ships replicas=1 # (durability is hourly S3 backup, not local mirrors). apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: longhorn-tenants annotations: # Not the cluster default — explicit opt-in only via Tower's # PVC-stamp logic. (Two default storage classes is a k8s # misconfig; k3s already provides local-path as default.) storageclass.kubernetes.io/is-default-class: "false" provisioner: driver.longhorn.io allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: Immediate parameters: numberOfReplicas: "{{ .Values.longhorn.replicas }}" staleReplicaTimeout: "30" fromBackup: "" # fsType: ext4 is the default; explicit so the contract is in Git. fsType: "ext4" {{- end }} # NOTE: The CSI VolumeSnapshotClass (snapshot.storage.k8s.io/v1) lives # in Phase 3 of ADR 0003, alongside the Tower code that consumes it # AND the external-snapshotter CRDs (which Longhorn does not ship — # they're a separate install). Adding VolumeSnapshotClass here would # fail the initial sync. Phase 3 lands all three together: snapshotter # CRDs + controller + VolumeSnapshotClass + Tower VolumeClone path.