S5: How to configure NFS storage on Ubuntu and use in Kubernetes cluster

Опубликовано: 05 Июнь 2026
на канале: TechVerse Learning
19
2

How to configure NFS storage on Ubuntu and use in Kubernetes cluster
emptydir
hostpath
PV - Persistent volume
PVC - Persistent volume claim
Storageclass
ReadWriteMany-RWX
NFS server
volume
Cloud
Ubuntu 25.10
Linux
Kubernetes
Cloud
Ubuntu
=============================

=======Steps to Create master as NFS server for RWX storage class====

Install nfs pkg on master node:
sudo apt update
sudo apt install -y nfs-kernel-server

Create directory for nfs server, give permissions and make entry in export file:
sudo mkdir -p /nfs/k8s
sudo chown -R nobody:nogroup /nfs/k8s
sudo chmod 777 /nfs/k8s

sudo vi /etc/exports
---------Add below line, where 192.168.1.0/24 is your cluster range---
/nfs/k8s 192.168.1.0/24 (rw,sync,no_subtree_check,no_root_squash,insecure)


Apply export config:
sudo exportfs -rav
sudo systemctl restart nfs-kernel-server

install nfs client on all nodes where you want to mount nfs:
sudo exportfs -rav
sudo systemctl restart nfs-kernel-server

verify nfs working from worker:

showmount -e 192.168.1.3
sudo mount 192.168.1.3:/nfs/k8s /mnt

Configure a dynamic NFS provisioner for kubernetes cluster:
kubectl apply -f https://raw.githubusercontent.com/kub...

-- Make sure to change IP and path in above yml file.-----

Configure a service account :
kubectl create serviceaccount nfs-client-provisioner

--if pod fails due to RBAC issue then tun below command to fix --
kubectl create clusterrolebinding nfs-provisioner --clusterrole=cluster-admin --serviceaccount=default:nfs-client-provisioner
kubectl rollout restart deployment nfs-client-provisioner

Configure storage class yml :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-rwx
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "false"
reclaimPolicy: Delete
volumeBindingMode: Immediate

Create PVC via yml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
ReadWriteMany
storageClassName: nfs-rwx
resources:
requests:
storage: 1Gi

Create POD and verify storage:

apiVersion: v1
kind: Pod
metadata:
name: nfs-test
spec:
containers:
name: app
image: nginx
volumeMounts:
mountPath: "/usr/share/nginx/html"
name: nfs-vol
volumes:
name: nfs-vol
persistentVolumeClaim:
claimName: nfs-pvc

=============================