1.为什么使用 NFS
- 稳定性和可移植性:NFS是一个稳定且可移植的网络文件系统,基于RPC远程过程调用实现,使得在不同的机器之间共享文件系统资源变得简单可靠。
- 扩展性和高性能:NFS具备可扩展和高性能等特性,能够满足企业级应用的质量标准。随着网络速度的增加和延迟的降低,NFS系统一直是通过网络提供文件系统服务的有竞争力的选择。
- 易用性:NFS的使用相对简单,只需进行相应的配置即可。在Kubernetes中,可以使用NFS作为后端存储,以提供持久化存储和共享存储卷。
- 动态存储供应:Kubernetes集群管理员可以通过提供不同的存储类,满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。通过动态存储卷供应,Kubernetes能够按照用户的需要自动创建其需要的存储。
- 最小化影响程序读写速度:NFS挂载建议最小范围,防止影响程序读写速度。
说明:我这里是演示,一般生产使用的是 minio和 Ceph 支持并发数量高。
2.一般在 master 节点安装NFS服务端其他安装 客户端,这是我的集群信息
[root@master01 /]# kubectl get node -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master01 Ready master 28d v1.18.0 192.168.1.19 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://18.6.3 node01 Ready <none> 28d v1.18.0 192.168.1.20 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://18.6.3
3.在master安装服务端
sudo yum install nfs-utils
4.设置开机启动并启动服务端以及运行状态
# 开机启动 sudo systemctl enable nfs-server.service # 启动服务 sudo yum install nfs-utils # 查看运行状态 systemctl status nfs-server
5.创建一个要共享的目录,并确保该目录存在于NFS服务器上,记得给读写权限
# 创建一个共享目录 sudo mkdir /mnt/nfs sudo chmod -R 777 /mnt/nfs
6.编辑NFS的导出配置文件 /etc/exports
# 编辑这个文件 sudo vi /etc/exports # 以下就是文件内容 /mnt/nfs *(rw,sync,no_root_squash) # 或者 sudo vi /etc/exports # 限制为一个网段中 /mnt/nfs 192.168.1.0/24(rw,sync,all_squash)
/mnt/nfs : 这是共享的目录的路径。任何连接到此NFS服务器的客户端都将能够访问此目录。
* : 这是一个通配符,表示允许任何IP地址访问。
rw : 这表示读写权限。这意味着客户端可以读取和写入此目录。
sync : 这表示在数据完全写入磁盘后才返回写入操作的响应。
no_root_squash : 这表示允许root用户在远程机器上访问NFS时具有root权限。默认情况下,NFS会对root用户的请求进行“squash”,使其权限降低。通过设置 no_root_squash,可以允许root用户具有与NFS服务器上的root用户相同的权限。
7.修改完成重启或者重载配置
sudo systemctl restart nfs-server sudo exportfs -r
8.其他机器安装客户端进行挂载
sudo yum install nfs-utils
9.查看或者验证是否可以挂载
[root@node01 ~]# sudo showmount -e 192.168.1.19 Export list for 192.168.1.19: /mnt/nfs *
10.在客户端创建 /mnt/nfs_client 文件夹用于本地挂载到远程服务器
[root@node01 ~]# mkdir -p /mnt/nfs_client [root@node01 ~]# sudo mount -t nfs 192.168.1.19:/mnt/nfs /mnt/nfs_client 或者 [root@node01 ~]# sudo mount -t nfs -o nolock 192.168.1.19:/mnt/nfs /mnt/nfs_client 使用Server服务器上的/mnt/nfs目录挂载到本地的/mnt/nfs_client目录。 mount:挂载文件系统或网络共享。 -t nfs:指定使用NFS(网络文件系统)协议。 -o nolock:指定挂载选项,其中nolock表示不启用文件锁定。 server:/mnt/nfs:指定远程服务器的挂载源,即服务器上的/mnt/nfs目录。 /mnt/nfs_client:指定本地挂载点,即在本地的/mnt/nfs_client目录下挂载。
11.使用 df -h 查看是否挂载成功
[root@node01 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 13M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda3 196G 6.3G 190G 4% / /dev/sda1 297M 163M 134M 55% /boot tmpfs 378M 12K 378M 1% /run/user/42 tmpfs 1.9G 12K 1.9G 1% /var/lib/kubelet/pods/ea15f950-54aa-4580-a955-14e31b831e3f/volumes/kubernetes.io~secret/flannel-token-zj27l tmpfs 1.9G 12K 1.9G 1% /var/lib/kubelet/pods/918ef5c8-331c-4d15-916a-81dcc39560a6/volumes/kubernetes.io~secret/kube-proxy-token-297ql overlay 196G 6.3G 190G 4% /var/lib/docker/overlay2/a0b2deadf006e745a337289e152155722894977dfac65e42b7d2674cf3d6deb4/merged overlay 196G 6.3G 190G 4% /var/lib/docker/overlay2/ceebcdd2cea6dbe9c875619b235fdd0e24e59f0cc8ba0d1dc4e2a8af8f137aa7/merged shm 64M 0 64M 0% /var/lib/docker/containers/475581e61b8a5b95ed62c8b06348e3428f6616ed4731378a8c6edd89bc435a70/mounts/shm shm 64M 0 64M 0% /var/lib/docker/containers/557451820ade91ad6e00059ec28b11651e87cb1a5b5f670f0e8194940bcb909c/mounts/shm overlay 196G 6.3G 190G 4% /var/lib/docker/overlay2/74b8d5bd35277205e5749be7694e22d38726428d1b80956a8fd069a85f781a30/merged overlay 196G 6.3G 190G 4% /var/lib/docker/overlay2/d4a2f50524158db4dd8092c586527bc66339a7dbaeb98adbce98d800af82b27a/merged tmpfs 378M 0 378M 0% /run/user/0 192.168.1.19:/mnt/nfs 196G 7.0G 189G 4% /mnt/nfs_client
12.测试在Client创建一个文件,在Server查看是否存在
13.遇到的异常
1.卸载失败(每一个解决方式都可以) umount.nfs4: /mnt/nfs_client: device is busy。这个意识要卸载但是被占用无法卸载 #解决-1 查看哪个进程正在使用这个挂载点,直接kill 掉就可以 [root@localhost nfs_client]# sudo lsof /mnt/nfs_client COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2170 root cwd DIR 0,43 21 51418476 /mnt/nfs_client (192.168.1.19:/mnt/nfs) sudo 2632 root cwd DIR 0,43 21 51418476 /mnt/nfs_client (192.168.1.19:/mnt/nfs) lsof 2634 root cwd DIR 0,43 21 51418476 /mnt/nfs_client (192.168.1.19:/mnt/nfs) lsof 2635 root cwd DIR 0,43 21 51418476 /mnt/nfs_client (192.168.1.19:/mnt/nfs) #解决-2 重启Server sudo systemctl restart rpcbind sudo systemctl restart nfs-server #解决-3强制卸载 [root@localhost nfs_client]# umount -f /mnt/nfs_client/ [root@localhost nfs_client]# fuser -cu /mnt/nfs_client/ /mnt/nfs_client: 2170c(root) # root占用 fuser 是用于查看哪些用户和进程正在使用文件、目录或套接字的命令。 -c 选项表示同时显示进程和用户。 -u 选项表示显示用户名。 /mnt/nfs_client/ 是需要查看的挂载点的路径。 执行该命令后,会列出所有正在访问该挂载点的进程和对应的用户。 [root@localhost ~]# fuser -ck /mnt/nfs_client/ fuser 是用于查看哪些用户和进程正在使用文件、目录或套接字的命令。 -c 选项表示强制终止进程。 -k 选项表示同时终止用户和进程。 /mnt/nfs_client/ 是需要终止访问的挂载点的路径。 执行该命令后,会强制终止所有正在访问该挂载点的用户和进程,包括与NFS共享相关的进程。 2.NOTE this deabult has changed since nfs-utils version 1.0.x # 解决 在/etc/exports文件中添加"no_subtree_check"参数,这将覆盖默认的subtree check规则
总结:到这里NFS就安装完了下一节我们解决 MYSQL 查看错误信息:提示PersistentVolumeClaims PVC没有绑定,不能启动的问题