跳转至

24. nfs搭建

一、安装NFS服务端

运行下面命令安装NFS服务端:

sudo apt install nfs-kernel-server

使用下面命令检查nfs-server是否已经启动:

sudo systemctl status nfs-server
sudo systemctl start nfs-server

二、创建NFS共享目录

下一步将创建一个NFS共享目录。我们将在/nfs目录中创建,在这里,我们的NFS共享目录称为ShareFolder:

sudo mkdir -p /nfs/sharefolder

我们希望所有客户端都可以访问该共享文件夹里面的内容,因此分配最高权限:

sudo chown nobody:nogroup /nfs/sharefolder
sudo chmod -R 777 /nfs/sharefolder/

三、编辑exports配置文件

通过编辑/etc/exports配置文件,来允许哪些客户端可以访问该共享。

下面命令打开该配置文件:

sudo vim /etc/exports

下面的条目表示允许单个客户端访问、多个客户端访问、允许一个网段的客户端访问:

# 如果只允许一个客户端访问,可以只写一个客户端的IP地址
/nfs/sharefolder 192.168.43.131(rw,sync,no_subtree_check)

# 如果只允许多个客户端访问,可以向如下一样写
/nfs/sharefolder 192.168.43.131(rw,sync,no_subtree_check)
/nfs/sharefolder 192.168.43.171(rw,sync,no_subtree_check)
/nfs/sharefolder 192.168.43.137(rw,sync,no_subtree_check)

# 如果运行一个网段的客户端访问,可以这样写:
/nfs/sharefolder 192.168.43.*(rw,sync,no_subtree_check)
或者
/nfs/sharefolder 192.168.43.0/24(rw,sync,no_subtree_check)


#配置文件中的权限解释:
    - rw 允许读写
    - sync 文件同时写入硬盘和内存
    - no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
root@k8s-master:~# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
# 如果只允许一个客户端访问,可以只写一个客户端的IP地址
/nfs/sharefolder 120.27.220.47(rw,sync,no_subtree_check)
/nfs/sharefolder 81.70.4.171(rw,sync,no_subtree_check)  #必须得把自己也放进去,因为pod相当于一个新的客户端!

四、export共享目录

使用下面命令将共享文件夹启用并生效:

sudo exportfs -arv
root@k8s-master:~# sudo exportfs -arv
exporting 120.27.220.47:/nfs/sharefolder
exporting 81.70.4.171:/nfs/sharefolder
exporting 81.70.42.71:/nfs/sharefolder
exporting 52.53.223.25:/nfs/sharefolder
exporting 42.192.132.182:/nfs/sharefolder

使用showmount -e查看是否可以看到共享目录:

# master节点,加上master节点的IP
showmount -e 81.70.4.171
root@k8s-master:~# showmount -e 81.70.4.171
Export list for 81.70.4.171:
/nfs/sharefolder 120.27.220.47

# 使用公网IP显示不出来,使用内网IP可以!!!
ubuntu@k8s-master:~$ showmount -e 10.0.24.4
Export list for 10.0.24.4:
/nfs/sharefolder 42.192.132.182,52.53.223.25,81.70.42.71,81.70.4.171,120.27.220.47
ubuntu@k8s-master:~$ showmount -e 10.0.8.3
Export list for 10.0.8.3:
/nfs/sharefolder 42.192.132.182,52.53.223.25,81.70.42.71,81.70.4.171,120.27.220.47

五、配置客户端

安装NFS客户端:

# 在Ubuntu20.04中安装客户端:nfs-common
sudo apt install nfs-common

# 在Centos8中安装客户端:nfs-utils
yum -y install nfs-utils

然后在/nfs目录中创建一个ClientFolder目录,将从该目录中挂载服务器上的NFS共享目录。

mkdir -p /nfs/ClientFolder

最后,挂载NFS共享目录,如下所示:

mount 81.70.4.171:/nfs/sharefolder /nfs/ClientFolder/
#失败了,貌似master节点需要开启nfs相关的端口。
root@k8s-worker-node1:~# mount 81.70.4.171:/nfs/sharefolder /nfs/ClientFolder/
mount.nfs: Connection timed out

1. 查看nfs服务端口

#查看端口
rpcinfo -p |grep nfs
root@k8s-master:~# rpcinfo -p |grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs

2. 防火墙开启2049端口

#防火墙开启2049端口再次测试!成功!
root@k8s-worker-node1:~# mount 81.70.4.171:/nfs/sharefolder /nfs/ClientFolder/
root@k8s-worker-node1:~#

六、测试NFS共享目录

为了测试配置是否正常,我们将在客户端/nfs/ClientFolder文件夹中创建文件测试一下,如下所示:

cd /nfs/ClientFolder

dd if=/dev/zero of=./test.dd bs=1M count=10

ll
root@k8s-worker-node1:~# cd /nfs/ClientFolder
root@k8s-worker-node1:/nfs/ClientFolder#
root@k8s-worker-node1:/nfs/ClientFolder# dd if=/dev/zero of=./test.dd bs=1M count=10

10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 14.1073 s, 743 kB/s
root@k8s-worker-node1:/nfs/ClientFolder#
root@k8s-worker-node1:/nfs/ClientFolder# ll
total 10248
drwxrwxrwx 2 nobody nogroup     4096 Nov 23 16:29 ./
drwxr-xr-x 3 root   root        4096 Nov 23 16:02 ../
-rw-r--r-- 1 nobody nogroup 10485760 Nov 23 16:29 test.dd

返回服务端,看一下/nfs/sharefolder目录中是否可以看到该文件:

ll /nfs/sharefolder/
root@k8s-master:~# ll /nfs/sharefolder/
total 10248
drwxrwxrwx 2 nobody nogroup     4096 Nov 23 16:29 ./
drwxr-xr-x 3 root   root        4096 Nov 23 15:56 ../
-rw-r--r-- 1 nobody nogroup 10485760 Nov 23 16:29 test.dd

总结

NFS是Network File System的首字母缩写。它是一种分布式协议,使客户端可以访问远程服务器上的共享文件。

本文原创地址:https://www.linuxprobe.com/ubuntu-configure-nfs.html


最后更新: 2022-02-22 04:55:01