Skip to main content

nfs

1.安装 NFS

yum -y install rpcbind nfs-utils

2.创建用于储存 NFS 的文件夹

mkdir -p /nfs

3.配置 NFS

# -bash: vim: command not found
# yum -y install vim
vim /etc/exports
/nfs *(rw,sync,all_squash,anonuid=0,anongid=0)

# rw:
# sync:
# all_squash:
# anonuid:
# anongid:

4.启动 rpcbind

# 查看状态
systemctl status rpcbind.service

# 查看开机自启状态
systemctl list-unit-files | grep rpcbind.service

# 启动
systemctl start rpcbind.service

# 设置开机自启
systemctl enable rpcbind.service
# 停止
systemctl stop rpcbind.service

# 关闭开机自启
systemctl disable rpcbind.service

5.启动 nfs 或者是 nfs-server

# 查看状态
systemctl status nfs.service

# 查看开机自启状态
systemctl list-unit-files | grep nfs.service

# 启动
systemctl start nfs.service

# 设置开机自启
systemctl enable nfs.service
# 停止
systemctl stop nfs.service

# 关闭开机自启
systemctl disable nfs.service

6.检查端口与进程

rpcinfo -p 127.0.0.1
[root@localhost ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 52921 status
100024 1 tcp 53664 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 40687 nlockmgr
100021 3 udp 40687 nlockmgr
100021 4 udp 40687 nlockmgr
100021 1 tcp 37193 nlockmgr
100021 3 tcp 37193 nlockmgr
100021 4 tcp 37193 nlockmgr
[root@localhost ~]#

7.查看NFS

showmount -e 127.0.0.1
[root@localhost ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfs *
[root@localhost ~]#

8.将NFS客户IP添加到信任区

# 将NFS客户端IP添加到信任区
firewall-cmd --zone=trusted --add-source=192.168.0.8 --permanent
# 重载防火墙
firewall-cmd --reload
# 查看信任区的配置
firewall-cmd --list-all --zone=trusted

9.测试

挂载(本机挂载,仅用于测试,其他Linux客户端挂载同理,客户端与服务端安装相同的软件)

mkdir -p /test/nfs
mount -t nfs 127.0.0.1:/nfs /test/nfs

# 永久挂载
# vim /etc/fstab
# 127.0.0.1:/nfs /test/nfs nfs defaults,_netdev 0 0
[root@localhost ~]# mkdir /test/nfs
[root@localhost ~]# mount -t nfs 127.0.0.1:/nfs /test/nfs
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 897M 0 897M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/ao-root 197G 1.6G 196G 1% /
/dev/sda1 1014M 155M 860M 16% /boot
127.0.0.1:/nfs 197G 1.6G 196G 1% /test/nfs
tmpfs 182M 0 182M 0% /run/user/0
[root@localhost ~]#

K8S中NFS安装和配置

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.17 \
--set nfs.server=192.168.1.43 \
--set nfs.path=/data/volumes/nfs \
--set image.repository=putianhui/nfs-subdir-external-provisioner \
--set image.tag=v4.0.2 \
--set storageClass.create=true \
--set storageClass.name=nfs-sc \
--set storageClass.reclaimPolicy=Retain

nfs.server:你的nfs服务器ip地址
nfs.path:nfs服务器共享的目录
image.repository:由于默认的仓库地址是k8s官方的谷歌仓库需要科学上网,我这里把镜像pull下来上传到了我自己的仓库下。
image.tag:镜像的版本
storageClass.create:自动创建一个存储类
storageClass.name:自动创建的存储类名称
storageClass.reclaimPolicy:自动创建存储类的回收规则,默认是delete

另一个方案

nfs-subdir-external-provisioner 使用方法

​#下载
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.16/nfs-subdir-external-provisioner-4.0.16.tgz

#解压
tar -xvf nfs-subdir-external-provisioner-4.0.16.tgz

#安装
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/ --set nfs.server=192.168.x.x --set nfs.path=/home/nfsxxxdir

#拉取镜像k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 失败,使用上面方式加载离线镜像,每个k8s的worker节点都要加载,或者push到私有镜像仓库