WSの小屋

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条评论