How to Use NFS Volume in Kubernetes: Simple Guide
To use an
nfs volume in Kubernetes, define a PersistentVolume that points to your NFS server and export path, then create a PersistentVolumeClaim to request storage. Finally, mount the claim inside your pod's volumes and volumeMounts sections.Syntax
Using an NFS volume in Kubernetes involves three main parts:
- PersistentVolume (PV): Defines the NFS server address and export path.
- PersistentVolumeClaim (PVC): Requests storage from the PV.
- Pod volume and volumeMount: Mounts the PVC inside the container.
yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: <NFS_SERVER_IP_OR_HOSTNAME>
path: <NFS_EXPORT_PATH>
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nfs-test-pod
spec:
containers:
- name: app
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- name: nfs-volume
mountPath: /mnt/nfs
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvcExample
This example shows a complete setup to use an NFS volume in Kubernetes. Replace <NFS_SERVER_IP_OR_HOSTNAME> and <NFS_EXPORT_PATH> with your actual NFS server details. The pod mounts the NFS share at /mnt/nfs and runs a simple sleep command to keep running.
yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.1.100
path: /exported/path
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nfs-test-pod
spec:
containers:
- name: app
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- name: nfs-volume
mountPath: /mnt/nfs
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvcOutput
pod/nfs-test-pod created
persistentvolumeclaim/nfs-pvc created
persistentvolume/nfs-pv created
Common Pitfalls
Common mistakes when using NFS volumes in Kubernetes include:
- Using incorrect NFS server IP or export path, causing mount failures.
- Not setting
accessModestoReadWriteManywhich is required for NFS. - Forgetting to create the PersistentVolume before the PersistentVolumeClaim.
- Network issues blocking access to the NFS server from Kubernetes nodes.
- Permissions on the NFS export not allowing the Kubernetes nodes to read/write.
Always verify NFS server accessibility and export permissions before deploying.
yaml
Wrong accessModes example:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce # Incorrect for NFS
nfs:
server: 192.168.1.100
path: /exported/path
Correct accessModes example:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany # Correct for NFS
nfs:
server: 192.168.1.100
path: /exported/pathQuick Reference
Remember these key points when using NFS volumes in Kubernetes:
- PersistentVolume: Defines NFS server and path.
- PersistentVolumeClaim: Requests storage with matching access mode.
- Pod: Mounts the PVC as a volume.
- Access Mode: Use
ReadWriteManyfor NFS. - Permissions: Ensure NFS export permissions allow Kubernetes nodes.
Key Takeaways
Define a PersistentVolume with NFS server and export path using accessMode ReadWriteMany.
Create a PersistentVolumeClaim that matches the PersistentVolume's storage and access mode.
Mount the PersistentVolumeClaim inside your pod under volumes and volumeMounts.
Verify NFS server accessibility and export permissions before deploying.
Use correct access modes and ensure network connectivity to avoid mount errors.