Ubuntu 安装 NFS 及使用指南
NFS(Network File System,网络文件系统)允许网络中的计算机之间通过 TCP/IP 协议共享文件资源。在 NFS 应用中,客户端可以透明地读写远端 NFS 服务器上的文件,就像访问本地文件一样。
为什么需要 NFS
- 数据共享:多台服务器共享同一份数据(如 K8s 集群的持久化存储)
- 集中管理:数据统一存储在 NFS 服务器,方便备份和维护
- 空间扩展:为磁盘空间不足的服务器提供远程存储
服务端配置
1. 安装 NFS 服务器
sudo apt update
sudo apt install nfs-kernel-server -y
2. 创建共享目录
sudo mkdir /nfsroot
sudo chmod 755 /nfsroot
3. 配置共享
编辑 /etc/exports:
sudo vim /etc/exports
基本配置:
/nfsroot *(rw,sync,no_subtree_check,no_root_squash)
配置项解析:
| 参数 | 说明 |
|---|---|
/nfsroot |
共享目录路径 |
* |
允许所有客户端访问(可指定 IP 或网段) |
rw |
读写权限(ro 为只读) |
sync |
数据同步写入内存和磁盘 |
no_subtree_check |
不检查父目录权限,提升性能 |
no_root_squash |
客户端 root 用户保持 root 权限(谨慎使用) |
生产环境推荐配置
/nfsroot 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)
root_squash会将客户端的 root 用户映射为匿名用户(nobody),提升安全性。
4. 重启 NFS 服务
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server # 设置开机自启
# 查看共享目录
showmount -e localhost
客户端配置
1. 安装 NFS 客户端
sudo apt install nfs-common -y
2. 挂载共享目录
# 创建挂载点
sudo mkdir /nfsroot
# 手动挂载
sudo mount -t nfs -o nolock 192.168.1.100:/nfsroot /nfsroot
选项说明:
| 选项 | 说明 |
|---|---|
-t nfs |
文件系统类型为 NFS |
-o nolock |
禁用文件锁(简单环境推荐) |
-o soft |
超时后返回错误而非一直重试 |
-o intr |
允许中断挂载 |
3. 验证挂载
# 查看挂载情况
df -h
mount | grep nfs
# 测试读写
echo "hello nfs" | sudo tee /nfsroot/test.txt
cat /nfsroot/test.txt
4. 卸载共享目录
sudo umount /nfsroot
自动挂载配置
编辑 /etc/fstab 实现开机自动挂载:
sudo vim /etc/fstab
添加:
192.168.1.100:/nfsroot /nfsroot nfs defaults,timeo=30,retrans=3,_netdev 0 0
# 测试 fstab 配置
sudo mount -a
性能优化
# 服务端优化
sudo vim /etc/default/nfs-kernel-server
# 增加线程数(根据 CPU 核数调整)
RPCNFSDCOUNT=16
# 客户端优化(挂载参数)
mount -t nfs -o rsize=1048576,wsize=1048576,hard,intr 192.168.1.100:/nfsroot /nfsroot
安全设置
# 在 UFW 中放行 NFS(端口 2049)
sudo ufw allow from 192.168.1.0/24 to any port nfs
# 或限制特定 IP
sudo ufw allow from 192.168.1.50 to any port nfs
# 查看防火墙规则
sudo ufw status
K8s 中使用 NFS 作为持久化存储
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.1.100
path: /nfsroot
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
mount.nfs: Connection refused |
NFS 服务未启动 | sudo systemctl restart nfs-kernel-server |
access denied by server |
exports 权限配置错误 | 检查 exports 文件语法和权限 |
| 挂载后没有写权限 | 目录权限或 no_root_squash 未设置 | 检查 /nfsroot 权限和 exports 配置 |
总结
NFS 是实现多台服务器文件共享的经典方案。配置的关键在于 exports 文件的正确设置和防火墙放行。结合 K8s 的 PV/PVC 机制,NFS 可以作为集群的共享存储后端,满足有状态应用的数据持久化需求。
Comments | 0条评论