概述
最近在微服务上遇到生成文件、下载文件的需求,最后需要在k8s上的docker容器里面挂载nfs的共享文件,学习了一下nfs的文件共享服务,做做笔记
安装NFS服务端
- nfs客户端和服务端都安装nfs-utils包,同时也会包含安装rpcbind
yum -y install nfs-utils - 编辑exports文件,添加共享目录
/home/nfs/ 192.168.33.0/24(insecure,rw,sync,fsid=0)
rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录
配置ip段如果用*则表示允许所有ip访问,例: /home/nfs/ *(insecure,rw,sync,fsid=0)
- 启动nfs服务(启动rpcbind和nfs-server两个服务)
1)设置开机启动
systemctl enable rpcbind
systemctl enable nfs-server
2)启动服务
systemctl start rpcbind
systemctl start nfs-server - 验证是否启动成功
1)showmount -e 或者 showmount -e 127.0.0.1
2)netstat -antlp|grep rpcbind
3)rpcinfo -p 127.0.0.1 - 防火墙开放相关端口(否则nfs客户端访问不进来,要是内网测试也可以直接关闭防火墙)
nfs除了主程序端口2049和rpcbind的端口111是固定以外,还会使用一些随机端口,修改/etc/sysconfig/nfs固定这些随机端口
vi /etc/sysconfig/nfs
#追加端口配置
MOUNTD_PORT=4001
STATD_PORT=4002
LOCKD_TCPPORT=4003
LOCKD_UDPPORT=4003
RQUOTAD_PORT=4004
注:修改了/etc/sysconfig/nfs文件后需要重启nfs-server服务才会生效,执行:systemctl restart nfs-server
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=4001/tcp --permanent
firewall-cmd --zone=public --add-port=4001/udp --permanent
firewall-cmd --zone=public --add-port=4002/tcp --permanent
firewall-cmd --zone=public --add-port=4002/udp --permanent
firewall-cmd --zone=public --add-port=4003/tcp --permanent
firewall-cmd --zone=public --add-port=4003/udp --permanent
firewall-cmd --zone=public --add-port=4004/tcp --permanent
firewall-cmd --zone=public --add-port=4004/udp --permanent
最后重新加载防火墙:firewall-cmd --reload
linux上挂载共享文件目录
- 挂载:mount -t nfs -o nolock 121.42.162.203:/home/nfs /nfs
- 卸载:umount /nfs/tmp (注:这里的/nfs/tmp为nfs客户端挂载的目录)
k8s挂载nfs共享目录
- 修改配置/templates/deployment.yaml
- 指定挂载在docker容器的/tmp目录下
- 指定nfs的服务端ip以及nfs的共享文件目录
重新发布应用,没有报错正常启动的话说明挂载成功,如果挂载失败pod不会正常启动
验证一下挂载成功的目录是否能同步文件,进入k8s的docker容器里面
kubectl -n 命名空间 get pods
kubectl -n 命名空间 exec -it podId bin/bash
在挂载的/tmp目录下新建一个文件nfs-test.txt
可以在nfs服务端的共享目录也能看到在docker容器新建的nfs-test.txt文件,可以知道挂载没有问题
nfs挂载出现的问题
-
mount.nfs:connect time out 卡住很久然后提示连接超时,可能原因:网络不通,可以ping试一下,或者nfs服务没有开启
-
mount.nfs:access denied by server while mounting,原因:使用了非法端口,也就是使用了大于1024的端口,默认要求mount客户端请求源端口小于1024(然而在使用 NAT 网络地址转换时端口一般总是大于1024的),默认情况下是开启这个选项的,如果要禁止这个选项,则使用 insecure 标识,修改配置文件/etc/exports,加入 insecure 选项,例:/home/nfs/ *(insecure,rw,sync,fsid=0)
可以在nfs服务端用cat /var/log/messages | grep mount查看日志
-
mount.nfs: No route to host,原因:防火墙的nfs的相关端口没有开启,简单的可以关闭防火墙测试,或者在防火墙开放相关端口
-
nfs客户端挂载后的如果新建文件提示无权限的话,表示nfs服务端的这个共享文件权限不够,在nfs服务端的给共享目录授权 例:chmod 766 共享目录
参考 :
风与叶子的《Centos7安装配置NFS服务和挂载》
行走的日志的《CentOS7下NFS服务安装及配置》
最后
以上就是着急音响为你收集整理的centos7安装搭建NFS服务端、在linux上挂载nfs文件目录(常见问题总结),以及在k8s中配置挂载网络数据卷nfs的全部内容,希望文章能够帮你解决centos7安装搭建NFS服务端、在linux上挂载nfs文件目录(常见问题总结),以及在k8s中配置挂载网络数据卷nfs所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复