MinIO and NFS on Unraid¶
BIND and Step-CA have their own pages. These two are the other NAS jobs the cluster may call. The starter does not install Unraid plugins. It expects an IP, a path, and credentials you seal.
Skip this whole page if you are Longhorn-only and do not want backups yet. Delete applications/nfs-provisioner.yaml and applications/csi-s3.yaml.
NFS export (RWX)¶
Used by nfs-subdir-external-provisioner. One directory on Unraid, many pods.
- Shares → Add share (example name
k8s). Prefer a pool (NVMe/SSD) if anything write-heavy will live here./mnt/user/k8sworks and is slower (shfs). - NFS: export the share. Security: private. Rule that allows the worker node IPs (and CPs if you must), e.g.
10.0.0.21(rw,sec=sys,insecure)and.22/.23as you add them.insecureis the usual Unraid need (source ports > 1024). - Map root: Unraid “NFS” UI Maproot to
nobody/users(or a dedicated uid) so a pod running as root does not become root on the array. Pick one and stay consistent; uid-0 in the container vs uid-99 on disk is the classic “permission denied” after a remount. - From a Linux box on the LAN (not required on Talos):
values/nfs-provisioner/values.yaml:nfs.server: 10.0.0.2,nfs.path: /mnt/user/k8s.
Validation
Do not sync nfs-provisioner until showmount -e 10.0.0.2 lists the export and a Linux client (or a debug pod) can mount it read-write from a worker IP. “Share exists in the Unraid UI” is not the same as NFS allowing .21.
Each PVC becomes a subdirectory of that export (nfs-subdir). Deleting a PVC with archiveOnDelete: true renames the dir instead of rm. Clean those up by hand.
Unraid down = those PVCs unreadable. Do not put CNPG here.
MinIO (S3 API)¶
Used as an object store: Longhorn backup target, CNPG Barman, aws s3 cp of etcd snapshots. Not a disk. See storage.
- Official image
minio/minioor the Unraid app. Persist the data dir on a share (/mnt/user/minioor a pool). - Console and API ports are yours. This guide’s examples use API
9000onhttp://10.0.0.2:9000. If you terminate TLS on Unraid, usehttps://in every cluster Secret and trust that cert from the cluster (or stay on HTTP on the LAN). - First boot: set
MINIO_ROOT_USER/MINIO_ROOT_PASSWORD. Those are not what you paste into Git. Create a dedicated IAM user (or access key) per job:longhorn-backup,cnpg-barman,csi-s3if you insist. - Buckets (example):
| Bucket | Who writes |
|---|---|
longhorn-backups |
Longhorn |
cnpg-backups |
Barman (s3://cnpg-backups/<app>) |
etcd-snapshots |
You, from the workstation |
- From the workstation:
mc alias set nas http://10.0.0.2:9000 ACCESSKEY SECRET
mc mb nas/longhorn-backups nas/cnpg-backups nas/etcd-snapshots
mc anonymous set none nas/longhorn-backups
Do not make the buckets public. The cluster reaches MinIO from worker node IPs (masquerade), same as NFS and BIND. Unraid firewall: allow .21–.29 to 9000.
Validation
Do not add wave 9 targets until:
Both must work with the dedicated key you will seal, not only the root user in the MinIO console.
Seal keys per secrets. Wire Longhorn / CNPG per backups.
MinIO on the same Unraid as the VMs is not off-site. A second disk, another NAS, or Backblaze/Wasabi is a different failure domain. This page only gets you an S3 endpoint.