Kubernetes NFS Mount Setup for Persistent Storage
Documentation on how to setup an NFS mount for persistent storage in any kubernetes deployment.
Requirements
- Install nfs-common on all kubernetes nodes
1
sudo apt install -y nfs-common
-
Install NFS CSI driver
- An NFS share setup from something like TrueNAS, Synology, etc.
Setup persistent volume
- Create a yaml file called
nfs-pv.yaml
with the following:1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion: v1 kind: PersistentVolume metadata: name: nfs spec: capacity: storage: 20Gi accessModes: - ReadWriteMany storageClassName: nfs nfs: server: 192.168.1.24 # IP of NFS Server path: "/mnt/TREPOOL/TRESHARE" # NFS mount path
- Apply file
1
kubectl apply -f nfs-pv.yaml
Setup persistent volume claim
- Create a yaml file called
nfs-pvc.yaml
with the following:1 2 3 4 5 6 7 8 9 10 11
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs spec: accessModes: - ReadWriteMany storageClassName: nfs resources: requests: storage: 20Gi
- Apply file
1
kubectl apply -f nfs-pvc.yaml
Test with NGINX web server
- Create a yaml file called
nfs-web.yaml
with the following:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
apiVersion: apps/v1 kind: Deployment metadata: name: nfs-web spec: replicas: 1 selector: matchLabels: app: nfs-web template: metadata: labels: app: nfs-web spec: containers: - name: nfs-web image: nginx ports: - name: web containerPort: 80 volumeMounts: - name: nfs mountPath: /usr/share/nginx/html # NFS path in pod volumes: - name: nfs persistentVolumeClaim: claimName: nfs
- Apply file
1
kubectl apply -f nfs-web.yaml
- Get the name of the pod. eg:
nfs-web-7bc97bcf48-5brq6
1
kubectl get pods
- Exec into the pod to verify nfs is mounted and files are available.
1
kubectl exec -it nfs-web-7bc97bcf48-5brq6 -- /bin/bash
- cd into NFS path from the deployment and list the directory to verify files.
1
cd /usr/share/nginx/html
This post is licensed under
CC BY 4.0
by the author.