搭建 NFS 为 k8s 提供网络文件服务

DOCKER K8S NFS FILE SYSTEM

Posted by gomyck on April 6, 2023

为了在 k8s 集群内, 统一的对 jar, 或者一些一次性加载的文件进行集中管理, 搭建了 NFS 服务进行托管, 该服务并不具备高可用, 低延迟的特性, 仅为临时性加载提供必要的支撑

使用 cifs 挂载

1
$ sudo mount -t cifs //192.168.104.xxx/D/XXX /home/xxx -o username=xxxx,password=xxxx

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ yum install -y rpcbind nfs-utils

# 编辑nfs 配置文件 把需要 nfs 管理的文件夹写入
$ vim /etc/exports

# /var/nfsdir *(insecure,rw,sync,no_root_squash)
#或者 加入 IP 是为了限制访问用
# /var/nfsdir 192.168.x.x(insecure,rw,sync,no_root_squash) 192.168.3.52(insecure,rw,sync,no_root_squash)

$ mkdir /var/nfsdir

# 开启服务, 并加入开机自启
$ systemctl enable rpcbind
$ systemctl enable nfs-server
$ systemctl start rpcbind
$ systemctl start nfs-server
$ exportfs -r

验证服务

1
2
3
4
5
6
7
8
9
10
11
12
#在另外一台机器上安装
$ yum install -y nfs-utils

# 在一台与 nfs 服务网络互通的服务器上运行以下脚本, 如果输出 hello nfs, 则服务成功启动
$ mkdir /tmp/testnfs \
  && mount -t nfs 192.168.3.42:/var/nfsdir /tmp/testnfs \
  && echo "hello nfs" >> /tmp/testnfs/test.txt \
  && cat /tmp/testnfs/test.txt

# 在客户机上加入开机自动挂载
$ vim /etc/fstab
# 192.168.3.20:/var/nfsdir /var/nfsdir nfs defaults 0 0

umount

1
2
3
# 该命令会 kill 所有使用 nfsdir 相关的进程
$ fuser -ck /var/nfsdir
$ umount /var/nfsdir

一些其他的命令

1
2
3
4
5
# 查看 nfs 管理的目录
$ showmount -e 192.168.x.x

# 挂载目录到 nfs
$ mount -t nfs 192.168.x.x:/var/nfsdir /tmp/testnfs
  • rpcinfo:查询rpc服务注册信息
    • 参数:-p(指定ip,看那台机器的;什么都不加,就查看当前服务器的rpc信息)
  • showmount:查看nfs服务器共享信息
    • 参数:-e(指定ip,看那台机器的;什么都不加,就查看当前服务器的nfs信息)
  • mount:挂载
    • 补充参数:
      • -t:指定文件系统类型
      • -o:指定挂载参数
  • umount:卸载
    • 参数:
      • -lf:强制卸载(慎用)——–适用于无法卸载时
  • exportfs:nfs服务的管理命令

exports 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
no_subtree_check:不检查父目录的权限

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)

insecure:允许客户端从大于1024的tcp/ip端口连接服务器

rw:read-write,可读写的权限;

ro:read-only,只读的权限;

sync: 直接写(裸 IO)

async: 写入缓冲区 定时刷, 可能会带来数据丢失

root_squash: root 权限会变为 nobody(nfsnobody)  UID GID

no_root_squash: root 用户连接时, 将对目录具有完全管理访问权限

all_squash: 所有登录者为 nobody

no_all_squash:与all_squash取反(默认设置);

anonuid: nobody 的 uid, uid 必须在/etc/passwd 中

anongid: 同 anonuid ,是 group ID