https://drive.google.com/file/d/1lCwC8hfi6bfx5-m4wwuS3NCtd31FjYct/view?usp=sharing

πŸ” YAML Breakdown

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?


πŸ“Œ Critical Concepts Explained

1. 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.

2. persistentVolumeReclaimPolicy

Policy Behavior
Retain Keep PV + data (manual cleanup)
Delete Delete PV + data (cloud disks)
Recycle Deprecated! Runs rm -rf (unsafe)

🚨 Critical Warning:

Recycle is deprecated since Kubernetes 1.11!

βœ… Use Retain (for NFS) or Delete (for cloud).

3. storageClassName


πŸ§ͺ k3s Lab: Test NFS PersistentVolume

πŸ’‘ Don’t have an NFS server?

We’ll use a k3s node as NFS server (for lab purposes).

πŸ”§ Step 1: Set Up NFS Server (On a k3s Node)