https://drive.google.com/file/d/1lCwC8hfi6bfx5-m4wwuS3NCtd31FjYct/view?usp=sharing
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvone-nfs
spec:
capacity:
storage: 5Gi # β Total storage size
volumeMode: Filesystem # β Standard filesystem (not block)
accessModes:
- ReadWriteOnce # β RWO: one node at a time
persistentVolumeReclaimPolicy: Recycle # β What to do when PVC is deleted
storageClassName: slow # β Links to StorageClass (optional)
nfs:
path: /foldername # β Exported directory on NFS server
server: ip-address-nfs-server # β NFS server IP/DNS
π Key Insight:
This PV represents 5Gi of shared storage on an NFS server, accessible to any Pod in the cluster (as long as itβs on a node that can reach the NFS server).
π‘ Why NFS?
- Shared storage: Multiple Pods can access the same data (with proper
accessModes)- Multi-node safe: Data isnβt tied to a specific k3s node
- Cheap & simple: Runs on any Linux server
accessModes| Mode | Meaning | NFS Support |
|---|---|---|
ReadWriteOnce (RWO) |
Read-write by one node | β Yes |
ReadOnlyMany (ROX) |
Read-only by many nodes | β Yes |
ReadWriteMany (RWX) |
Read-write by many nodes | β Yes! (NFSβs superpower) |
β οΈ Your PV uses ReadWriteOnce β but NFS supports ReadWriteMany!
β For shared storage (e.g., web servers), use
ReadWriteMany.
persistentVolumeReclaimPolicy| Policy | Behavior |
|---|---|
Retain |
Keep PV + data (manual cleanup) |
Delete |
Delete PV + data (cloud disks) |
Recycle |
Deprecated! Runs rm -rf (unsafe) |
π¨ Critical Warning:
Recycleis deprecated since Kubernetes 1.11!β Use
Retain(for NFS) orDelete(for cloud).
storageClassNameπ‘ Donβt have an NFS server?
Weβll use a k3s node as NFS server (for lab purposes).