1)背景:k8s测试环境,需要用到pv,所以决定自己搭建一个nfs,用于支持。
2)NFS简介:
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
3)搭建
系统:centos7
软件:nfs-utils和rpcbind
3.1)服务器端操作
yum install nfs-utils rpcbind
启动
systemctl statrt nfs
systemctl statrt rpcbind
开机启动
systemctl enable nfs
systemctl enable rpcbind
启动后状态
systemctl status nfs
systemctl status rpcbind
创建共享目录
mkdir -p /hone/data/nfs/server
编辑/etc/exports文件添加如下内容
vim /etc/exports
/home/data/nfs/server *(rw,no_root_squash,no_all_squash,sync)
① /home/data/nfs/server —要共享的目录
② * 处代表限制访问的ip段
可以填192.168.0.* —允许访问的网段,也可以是ip地址、主机名(能够被服务器解析)
可以填192.168.0.123/24
*(所有人都能访问)
③ 括号内的常见参数有:
参数值 内容说明
rw ro 该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。
sync async sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
no_root_squash root_squash 客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
all_squash 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!
no_subtree_check 关闭子树检查
anonuid anongid anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。
其他选项可以通过man exports查阅man文档
刷新配置立即生效
exportfs -r
重启nfs
systemctl restart nfs
查看 RPC 服务的注册状况
[root@localhost server]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 50159 status
100024 1 tcp 36075 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 45469 nlockmgr
100021 3 udp 45469 nlockmgr
100021 4 udp 45469 nlockmgr
100021 1 tcp 41903 nlockmgr
100021 3 tcp 41903 nlockmgr
100021 4 tcp 41903 nlockm
选项与参数:
-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;
本机查询nfs服务器
showmount -e localhost
选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据。
客户端配置:
创建挂载点
mkdir -p /home/data/nfs/client
查看服务器抛出的共享目录信息
yum install showmount -y
[root@k8s-lb-backup ~]# showmount -e 10.1.9.180
Export list for 10.1.9.180:
/home/data/nfs/server *
挂载目录
为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议
mount -t nfs -o vers=3 10.1.9.180:/home/data/nfs/server /home/data/nfs/client -o proto=tcp -o nolock
查看挂载的目录
[root@k8s-lb-backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 486M 0 486M 0% /dev/shm
tmpfs 486M 7.7M 479M 2% /run
tmpfs 486M 0 486M 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 1.4G 26G 6% /
/dev/sda2 1014M 142M 873M 14% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 98M 0 98M 0% /run/user/0
10.1.9.180:/home/data/nfs/server 47G 33M 47G 1% /home/data/nfs/client
测试:
服务端
[root@localhost server]# echo “test” > test.txt
[root@localhost server]# pwd
/home/data/nfs/server
客户端
[root@k8s-lb-backup client]# pwd
/home/data/nfs/client
[root@k8s-lb-backup client]# cat test.txt
“test”
取消挂载:
[root@k8s-lb-backup ~]# umount /home//data/nfs/client/
[root@k8s-lb-backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 486M 0 486M 0% /dev/shm
tmpfs 486M 7.7M 479M 2% /run
tmpfs 486M 0 486M 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 1.4G 26G 6% /
/dev/sda2 1014M 142M 873M 14% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 98M 0 98M 0% /run/user/0
如果显示:device is busy,可以使用-lf参数强行删除
umount –lf /home//data/nfs/client/
固定nfs服务端口
为了方便配置防火墙,需要固定nfs服务端口
NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。
[root@localhost server]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 50159 status
100024 1 tcp 36075 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 45469 nlockmgr
100021 3 udp 45469 nlockmgr
100021 4 udp 45469 nlockmgr
100021 1 tcp 41903 nlockmgr
100021 3 tcp 41903 nlockmgr
100021 4 tcp 41903 nlockmgr
分配端口,编辑配置文件:
vim /etc/sysconfig/nfs
末尾添加:
RQUOTAD_PORT=39001
LOCKD_TCPPORT=39002
LOCKD_UDPPORT=39002
MOUNTD_PORT=39003
STATD_PORT=39004
重启nfs
systemctl restart nfs
查看结果
[root@localhost server]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 50159 status
100024 1 tcp 36075 status
100005 1 udp 39003 mountd
100005 1 tcp 39003 mountd
100005 2 udp 39003 mountd
100005 2 tcp 39003 mountd
100005 3 udp 39003 mountd
100005 3 tcp 39003 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 39002 nlockmgr
100021 3 udp 39002 nlockmgr
100021 4 udp 39002 nlockmgr
100021 1 tcp 39002 nlockmgr
100021 3 tcp 39002 nlockmgr
100021 4 tcp 39002 nlockmgr
可以看到,随机端口以固定
接下来,iptables就可以固定开放端口
客户端设置开机启动
vim /etc/fstab
10.1.9.180:/nfs_data /home/nfs/client nfs defaults 0 0
完成