NFS 环境搭建

发布时间: 更新时间: 总字数:879 阅读时间:2m 作者: IP上海 分享 网址

网络文件系统(NFS, Network File System) 是一种分布式文件系统,目的是让客户端主机访问服务器端文件,并且过程时与访问本地存储是一样。

说明

NFS 服务端和客户端服务均依赖于 rpcbindrpcbind 是一个将 RPC(Remote Procedure Call,远程过程调用) 程序编号转换为通用地址的服务,RPC 调用依赖 rpcbind 服务。

服务:

  • rpc.nfsd NFS 主进程,通过 systemctl start nfs-utils.service 启动,监听 TCP/UDP 2049 端口
  • rpc.mountd 监听在 TCP/UDP 20048 端口
  • rpc.lockd(可选,防止多个客户端同时写入一个文件)
  • rpc.statd(可选,负责数据的状态及一致性检查)
  • rpcbind 依赖进程,通过 systemctl start rpcbind.service 启动,监听在 TCP/UDP 20048 端口

配置文件:

  • /etc/nfs.conf
  • /etc/nfsmount.conf

部署

本次部署直接关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

服务端安装

# CentOS
yum install -y nfs-utils

# Ubuntu
apt install nfs-kernel-server

注意:安装 nfs-utils 时,会自动安装 rpcbind

  • 启动
systemctl enable rpcbind.service
systemctl enable nfs-server.service

systemctl start rpcbind.service
systemctl start nfs-server.service
  • 配置共享目录

/etc/exports 文件中一行表示一个共享目录。格式如下:

共享目录路径   IP或主机名1(选项1,选项2,...)  IP或主机名2(选项1,选项3,...)   ...

选项说明:

选项功能
ro以只读方式共享(默认)
rw以读写方式共享
sync客户端写入的数据立即写入到磁盘中(默认)
async客户端写入的数据先写入到内存中,再写入磁盘中
root_squash把 root 用户映射为匿名用户(默认)
no_root_squash允许使用 root 用户
all_squash把所有用户映射为匿名用户
anonuid=<UID>指定匿名用户的 UID
anongid=<GID>指定匿名用户的 GID
secure允许客户端使用小于 1024 的端口连接
insecure允许客户端使用大于 1024 的端口连接
subtree_check共享子目录时,强制检查父目录权限(默认)
no_subtree_check不检查父目录权限
wdelay多个用户要写入 NFS 目录,则归组写入(默认)
no_wdelay多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置

示例:

$ cat /etc/exports
/home *(rw,no_subtree_check,fsid=10,no_root_squash)
/opt 10.0.0.1(rw,all_squash) 10.0.0.2(ro,no_root_squash)

注意:

  • 配置后需要重启 systemctl restart nfs-server 或执行 exportfs -rv 或执行 exportfs -a
  • 查看 nfs 暴露的端口
$ showmount -e <nfs-server>

$ showmount -e 172.20.100
Export list for 172.20.100:
/home *
/opt  10.0.0.2,10.0.0.1

k8s 部署

使用

客户端

  • 依赖包按照
yum install nfs-utils
  • 临时 mount
mount.nfs 172.20.0.100:/home /mnt/
  • 通过 fstab 挂载
echo "172.20.0.100:/home /home nfs nfsvers=3,nodev,nosuid 0 0" >> /etc/fstab
mount -a

配置基于 RDMA 的 NFS 服务

# 加载rdma内核模块
# 服务端
modprobe xprtrdma

# 客户端
modprobe svcrdma

# 服务端监听 RDMA 传输端口
$ echo 'rdma 20049' | tee /proc/fs/nfsd/portlist
$ cat /proc/fs/nfsd/portlist
rdma 20049
rdma 20049
udp 2049
tcp 2049
udp 2049
tcp 2049

# 挂载
$ mount -t nfs <nfs-server-ip>:/ /mnt/ -o vers=4.1,_netdev,rdma,port=20049,hard,intr,noatime,nodiratime,async,nolock,noacl,sec=sys,noresvport

k8s 使用

  • nfs-subdir-external-provisioner 是 k8s 中,支持在一个远程 NFS 服务器上的动态子目录卷供应器
    • PV 以目录名为 ${namespace}-${pvcName}-${pvName} 的格式在 NFS 服务器上创建
    • 回收的格式为 archieved-${namespace}-${pvcName}-${pvName}

F&Q

Unable to mount network drive in Debian; error is “mount(2) system call failed: No route to host.”

sudo apt-get install keyutils cifs-utils
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数