使用Ubuntu创建NFS网路文件服务
创建背景,最近想学习K8s的PV和PVC.本来打算学习Ceph但是,这个东西部署确实有点难搞.所以选了相对简单的NFS作为文件存储服务.
本次还是使用我们的老朋友ESXi开一个虚拟机.安装好Ubuntu Server 22.04 LTS后.就开始一系列操作了.
- 首先说一下我的网络环境,内网地址段是192.168.2.0/24 本NFS服务器的IP设置为192.168.2.13
- 首先安装NFS所需的软件.
sudo apt install nfs-kernel-server
- 安装完成后,NFS 服务将自动启动.
- 在 Ubuntu 20.04+上,NFS V2被禁用.V3和V4已启用.可以通过运行以下命令来验证:
sudo cat /proc/fs/nfsd/versions
- 会输出大概是如下内容
-2 +3 +4 +4.1 +4.2
- NFSv2现在已经很老了,没有理由启用它.NFS 服务器配置在/etc/default/nfs-kernel-server和/etc/default/nfs-common文件中定义.对于大多数情况,默认设置就足够了.
- 安装好后,我们就需要创建一个文件夹用于保存数据存放的地方.这里我选择/data/nfs目录.可以根据自己的情况和喜好设置.
# 创建文件夹
sudo mkdir -p /opt/nfsv4/data
sudo mkdir -p /opt/nfsv4/back
sudo mkdir -p /data/nfs
- NFSv4是将文件存储到/opt/nfsv4/data中的,而我们希望将这个文件挂载到/data/nfs中,所以我们需要创建挂载.打开/etc/fstab添加如下内容
sudo nano /etc/fstab
# NFS Server
/data/nfs /opt/nfsv4/data none bind 0 0
- 这样我们就不需要每次重启系统后再手动挂载了.
- 然后我们添加一个导出
sudo nano /etc/exports
# 添加如下内容,需要根据自己的实际情况调整文件夹目录和IP以及读写权限
/data/nfs 192.168.2.0/24(rw,sync,no_root_squash,no_subtree_check,crossmnt,fsid=0)
- 在这里,除了 no_root_squash 之外,对两个目录使用相同的配置选项.看看每个选项的含义:
代码 | 说明 |
---|---|
rw | 此选项为客户端计算机提供对卷的读写访问权限. |
sync | 此选项强制 NFS 在回复之前将更改写入磁盘.这会产生更稳定和一致的环境,因为回复反映了远程卷的实际状态.但是,它也降低了文件操作的速度. |
no_subtree_check | 此选项防止子树检查,这是一个过程,其中 主机 必须检查文件是否在每个请求的导出树中实际上仍然可用.如果在 客户端 打开文件时重命名文件,这可能会导致很多问题.在几乎所有情况下,最好禁用子树检查. |
no_root_squash | 默认情况下,NFS 将来自 root 用户的请求远程转换为服务器上的非特权用户.这是为了防止 client 上的 root 帐户将 host 的文件系统用作 root 的安全功能. no_root_squash 对某些共享禁用此行为. |
- 完成更改后,保存并关闭文件. 然后,要使您配置的客户端可以使用共享,请使用以下命令重新启动 NFS 服务器:
sudo systemctl restart nfs-kernel-server
- 由于NFS会将 客户端 上的任何 root 操作转换为 nobody:nogroup 凭据作为安全措施.因此,需要更改目录所有权以匹配这些凭据.
sudo chown nobody:nogroup /data/nfs
sudo chown nobody:nogroup /data
- 同时为了保险起见,我们直接给/data目录及其子目录搞一个读写权限(偷懒直接开个777)
sudo chmod 777 -R /data
- 最后我们再开启防火墙的放行.若是没开启防火墙就无需关注了
sudo ufw allow from '192.168.2.0/24' to any port nfs
- 最后为了保险我们再重启一下服务.
sudo systemctl restart nfs-kernel-server
- 这样我们NFS服务端就安装完成了.接下来我们配置客户端
- 首先客户端也需要安装一个组件.
sudo apt install nfs-common
- 接下来使用命令就可以挂载了,若是使用k8s等服务,就可以不用挂载到宿主机.使用PV,PVC就行了.具体方法可参考Ubuntu MicroK8s挂载教程该教程同样介绍了如何安装NFS服务
sudo mkdir -p /mnt/nfs
sudo mount -t nfs 192.168.2.13:/data/nfs /mnt/nfs
- 最后还是开启自启.
sudo systemctl enable nfs-kernel-server