103 lines
3.3 KiB
Markdown
103 lines
3.3 KiB
Markdown
# NFS Storage
|
|
|
|
Connects the cluster to an external NFS server by creating a StorageClass and PersistentVolume. This is an infrastructure app — it has no pods or namespace, just cluster-scoped resources.
|
|
|
|
## Prerequisites
|
|
|
|
You need an NFS server already running and exporting a path. Most home NAS devices (Synology, TrueNAS, QNAP, Unraid) support NFS exports out of the box. If you're using a Linux server, see [Setting Up an NFS Server](#setting-up-an-nfs-server) below.
|
|
|
|
## Configuration
|
|
|
|
When added to an instance, the default config is merged into `config.yaml`:
|
|
|
|
```yaml
|
|
apps:
|
|
nfs:
|
|
host: "192.168.1.100"
|
|
mediaPath: "/mnt/storage/media"
|
|
storageCapacity: "1Ti"
|
|
```
|
|
|
|
Update `host` and `mediaPath` to match your NFS server before deploying.
|
|
|
|
## What Gets Deployed
|
|
|
|
- **StorageClass** (`nfs`) — allows PVCs to request NFS-backed storage
|
|
- **PersistentVolume** (`nfs-media-pv`) — a cluster-wide volume pointing to the NFS export
|
|
|
|
No namespace, pods, or services are created.
|
|
|
|
## Scripts
|
|
|
|
- **check-nfs** — Verifies the NFS server is reachable, the export path exists, and checks whether the StorageClass and PersistentVolume are present in the cluster. Run from the app detail panel in the web UI.
|
|
|
|
## Usage
|
|
|
|
Applications can use NFS storage by setting `storageClassName: nfs` in their PVCs:
|
|
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
name: media-pvc
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteMany
|
|
storageClassName: nfs
|
|
resources:
|
|
requests:
|
|
storage: 100Gi
|
|
```
|
|
|
|
## Features
|
|
|
|
- Cluster-wide access — any pod can mount the NFS share regardless of node placement
|
|
- ReadWriteMany — multiple pods can simultaneously read and write
|
|
- Configurable capacity — set PersistentVolume size via `storageCapacity`
|
|
- Retain policy — data is preserved when volumes are released
|
|
|
|
## Setting Up an NFS Server
|
|
|
|
Wild Cloud does not manage the NFS server itself — it only connects to one. Below are quick-start instructions for common setups.
|
|
|
|
### NAS Devices
|
|
|
|
Most NAS devices have NFS support built in:
|
|
|
|
- **Synology**: Control Panel > Shared Folder > Edit > NFS Permissions > Create rule allowing your cluster's subnet (e.g., `192.168.1.0/24`)
|
|
- **TrueNAS**: Shares > Unix Shares (NFS) > Add > select dataset, configure network access
|
|
- **QNAP**: Control Panel > Shared Folders > Edit Shared Folder Permission > NFS host access
|
|
- **Unraid**: Shares > select share > NFS Security Settings > set to Public or add allowed hosts
|
|
|
|
Note the IP/hostname and export path — those are what you'll enter as `host` and `mediaPath` in the NFS app config.
|
|
|
|
### Linux Server
|
|
|
|
Install the NFS server package, create the export directory, and add it to `/etc/exports`:
|
|
|
|
```bash
|
|
# Install (Debian/Ubuntu)
|
|
sudo apt-get install -y nfs-kernel-server
|
|
|
|
# Create the export directory
|
|
sudo mkdir -p /srv/nfs/media
|
|
sudo chmod 755 /srv/nfs/media
|
|
|
|
# Add to exports (allow all hosts on local network)
|
|
echo '/srv/nfs/media *(rw,sync,no_subtree_check,no_root_squash)' | sudo tee -a /etc/exports
|
|
|
|
# Apply and start
|
|
sudo exportfs -rav
|
|
sudo systemctl enable --now nfs-server
|
|
```
|
|
|
|
### Verifying the Export
|
|
|
|
From any machine on the network, confirm the export is visible:
|
|
|
|
```bash
|
|
showmount -e <nfs-server-ip>
|
|
```
|
|
|
|
You should see your export path listed. Once verified, add the NFS app, set `host` and `mediaPath` to match, and deploy.
|