centos7安装搭建NFS服务端、在linux上挂载nfs文件目录(常见问题总结),以及在k8s中配置挂载网络数据卷nfs

最近在微服务上遇到生成文件、下载文件的需求,最后需要在k8s上的docker容器里面挂载nfs的共享文件,学习了一下nfs的文件共享服务,做做笔记

安装NFS服务端

  1. nfs客户端和服务端都安装nfs-utils包,同时也会包含安装rpcbind
    yum -y install nfs-utils
  2. 编辑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)

  1. 启动nfs服务(启动rpcbind和nfs-server两个服务)
    1)设置开机启动
         systemctl enable rpcbind
         systemctl enable nfs-server
    2)启动服务
         systemctl start rpcbind
         systemctl start nfs-server
  2. 验证是否启动成功
    1)showmount -e   或者   showmount -e 127.0.0.1
    2)netstat -antlp|grep rpcbind
    3)rpcinfo -p 127.0.0.1
  3. 防火墙开放相关端口(否则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上挂载共享文件目录

  1. 挂载:mount -t nfs -o nolock 121.42.162.203:/home/nfs /nfs
  2. 卸载:umount /nfs/tmp (注:这里的/nfs/tmp为nfs客户端挂载的目录)


k8s挂载nfs共享目录

  1. 修改配置/templates/deployment.yaml
  2. 指定挂载在docker容器的/tmp目录下
    在这里插入图片描述
  3. 指定nfs的服务端ip以及nfs的共享文件目录
    在这里插入图片描述
    centos7安装搭建NFS服务端、在linux上挂载nfs文件目录(常见问题总结),以及在k8s中配置挂载网络数据卷nfs_第1张图片
    重新发布应用,没有报错正常启动的话说明挂载成功,如果挂载失败pod不会正常启动
    验证一下挂载成功的目录是否能同步文件,进入k8s的docker容器里面
kubectl -n 命名空间 get pods
kubectl -n 命名空间 exec -it podId bin/bash

在这里插入图片描述
在挂载的/tmp目录下新建一个文件nfs-test.txt在这里插入图片描述
可以在nfs服务端的共享目录也能看到在docker容器新建的nfs-test.txt文件,可以知道挂载没有问题



nfs挂载出现的问题

  1. mount.nfs:connect time out 卡住很久然后提示连接超时,可能原因:网络不通,可以ping试一下,或者nfs服务没有开启

  2. 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查看日志
    centos7安装搭建NFS服务端、在linux上挂载nfs文件目录(常见问题总结),以及在k8s中配置挂载网络数据卷nfs_第2张图片

  3. mount.nfs: No route to host,原因:防火墙的nfs的相关端口没有开启,简单的可以关闭防火墙测试,或者在防火墙开放相关端口
    在这里插入图片描述

  4. nfs客户端挂载后的如果新建文件提示无权限的话,表示nfs服务端的这个共享文件权限不够,在nfs服务端的给共享目录授权 例:chmod 766 共享目录

参考 :
风与叶子的《Centos7安装配置NFS服务和挂载》
行走的日志的《CentOS7下NFS服务安装及配置》

你可能感兴趣的:(linux)