content_image/984660.jpg
## 2.3.1 Network File System (NFS) 

NFS is an open-standard persistent file storage solution that is built into Linux (with RFCs for each different version of NFS). NFS allows client computers to access files from a remote server over a network. For more information, see https://developer.ibm.com/tutorials/l-network-filesystems/ 

NFS uses a server that has the nfs  server package that is installed with a volume that client computers can access over the network that uses an nfs  client package. This approach allows remote clients to mount remote volumes as local volumes, enabling easy access of files across multiple computers. In a clustered system like Kubernetes, this allows all nodes to keep up to date with the same storage. Thus, a pod can start on any node in the cluster and read its data. The NFS server must allow mount  access from that node in its  /etc/exports file. Figure 2-4 shows the NFS architecture. 

<img src='content_image/984660.jpg'>

Using a central server, NFS can be easy to manage and requires less resources than clustered file system alternatives. Additionally, NFS can grant users access to specific data with the granularity of splitting out different data at different mount points with different access policies for each mount point. 

There are multiple versions of NFS with versions 3 and 4 being the predominant versions in use today. NFS, Version 4, includes a number of enhancements over version 3 including these options: 

GLYPH<SM590000> Use Kerberos. 

GLYPH<SM590000> Use only one IP port (2049). 

The biggest limitation with NFS in Kubernetes is that it can stand as a single point of failure (SPOF). If the NFS server goes down, your Kubernetes cluster might stop. This scenario even negates some of the benefit of the replication that is done in the Kubernetes cluster to prevent a SPOF. 

Note:  You can avoid this limitation, for example, by deploying a clustered NFS solution. 

