最近在学习Kubernetes的时候需要将pod内的数据进行持久化,既然要持久化就需要从k8s集群外引入存储,所以很自然就想到了NFS。这一节记录下Centos7中搭建NFS文件服务器的过程。
我是T型人小付,一位坚持终身学习的互联网从业者。如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
- NFS
- NFS和RPC
- 安装
- 配置
- Linux客户端连接
- Windows10客户端连接
NFS
和Windows中的SMB协议很像,NFS(Network File System)是类Unix系统中的文件共享协议。目的就是将服务端的一个目录分享到指定网络,网络内的客户端可以将共享出来的目录锚定到本地的一个目录,像对待本地磁盘一样操作远程目录。
SMB和NFS这两种协议在Windows和Linux中都可以混合使用,只不过SMB通常用作Windows,而NFS通常用作Linux。
NFS和RPC
RPC(Remote Procedure Call)是一个端口转发小插件,是NFS的一个辅助工具。
因为NFS支持的功能相当多,而不同的功能会使用不同的端口来传输数据,因此NFS的功能对应的端口很多而且并不固定。客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的一种服务。RPC会收集NFS所使用的端口,同时对外统一开放111端口。客户端访问111端口就知道要去哪个端口访问NFS服务。
所以在启动NFS之前,首先要启动RPC,否则NFS就无法向RPC服务注册。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效。
安装
所以安装就非常简单,分别安装NFS和RPC两个服务即可
yum install -y nfs-utils rpcbind
配置
NFS的配置文件在/etc/exports
,这是一个空文件,需要手动输入内容。每一行代表一条NFS分享目录及其配置,格式如下
export host(options)
注意host和后面的括号之间没有任何空格,不然会出现权限配置问题
其中
- export - 被分享的目录
- host - 目标设备,通常是一个网段
- options - 共享权限参数
如果针对不同网段要设置不同的权限,可用如下方法
export host1(options1) host2(options2) host3(options3)
其中的共享权限参数可选如下的一个或多个
参数 | 说明 |
ro | (默认)客户端只读权限 |
rw | 客户端有读写权限 |
sync | (默认)如果有写动作未完成,NFS服务端不会进行读操作 |
async | 允许异步写操作 |
root_squash | (默认)将客户端的root用户变为服务端的nfsnobody用户进行操作 |
no_root_squash | 取消root_squash操作 |
all_squash | 将客户端的所有用户都变为服务端的nfsnobody用户进行操作 |
首先创建用于分享的文件夹
mkdir -p /share/nfs
然后添加如下的权限到文件中
/share/nfs 172.29.0.0/16(rw,sync,root_squash)
之后就可以启动服务了,记住先启动RPC再启动NFS
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
看到111端口起来表明可以被连接了,同时记得防火墙允许INPUT的111端口。
Linux客户端连接
在需要访问的客户端也安装nfs-utils
,但是并不需要启动。然后可以使用showmount
命令查看远程的分享信息
[root@k8s-node1 hostpath]# showmount -e 172.29.56.177
Export list for 172.29.56.177:
/share/nfs 172.29.0.0/16
其中几个常用参数含义如下
参数 | 含义 |
-e | 显示远程机器的分享信息 |
-a | 显示本机的NFS连接信息 |
-v | 显示版本信息 |
然后创建一个用于文件夹做为锚点
[root@k8s-node1 hostpath]# cd /mnt
[root@k8s-node1 mnt]# mkdir nfs
[root@k8s-node1 mnt]# mount -t nfs 172.29.56.177:/share/nfs /mnt/nfs
在服务端创建一个文件,如果发现客户端锚点也出现文件这说明锚定成功。并且会发现文件的权限和拥有者和组都是和服务端一样的,所以要注意权限的设置。
当然上面用mount
命令的方式只是临时的,可以编辑/etc/fstab
文件达到永久锚定的目的,添加如下一行
172.29.56.177:/share/nfs /mnt/nfs nfs defaults 0 0
Windows10客户端连接
网上有很多类似的文章,首先要打开NFS客户端服务,然后挂载网络硬盘。我试了很多方法,一直会报网络错误53。
Network Error - 53
不管我修改服务端insecure还是各种方式连接都会报错,后来放弃。告诉自己,Linux乖乖用NFS,Windows乖乖用SMB。