k8s使用nfs作为动态storageClass存储
概述
相信使用过pv和pvc的肯定会想到很多问题,比如每次申请 pvc 都需要手动添加pv,这岂不是太不方便了。那我们如何实现类似于公有云或者私有云的共享存储模式呢?kubernetes 提供了 storageclass 的概念,接下来我们来一探究竟。
先上一张图大家就比较清楚了:
环境
k8s集群环境
Node(宿主机上)都要安装nfs
1 | [root@node-1 ~]# yum -y install nfs-utils |
nfs 环境
- 搭建nfs服务端
1
2
3
4
5
6
7
8
9
10
11yum -y install rpcbind nfs-utils
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
mkdir /home/nfsfile
chmod -R 777 /home/nfsfile
cd /home/nfsfile
echo "This is a test file" > /nfsfile/test.txtvi /etc/exports
这行代码的意思是把共享目录1
/home/nfsfile *(rw,sync,root_squash,insecure)
/home/nfsfile
共享给*
这个客户端ip,后面括号里的内容是权限参数,其中:- rw 表示设置目录可读写。
- sync 表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。
- no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。
- no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。
showmount -e localhost
1
2Export list for localhost:
/home/nfsfile *
- 客户端验证nfs
我们在客户端执行以下命令:showmount -e 10.8.111.153
客户端开始挂载共享目录:1
2Exports list on 10.8.111.153:
/home/nfsfile *客户端验证是否挂载成功:1
2mkdir nfsfile # 客户端新建挂载点
mount -t nfs 10.8.111.153:/home/nfsfile /root/nfsfile # 挂载服务端共享目录到新创建的挂载点最后,如果需要永久挂载该共享目录(即实现开机自动挂载),则可以通过如下方式实现:1
2cd /root/nfsfile # 进入该目录后,将会看到之前在服务端创建的 test.txt 文件
cat test.txt # 打开后,发现文件内容与服务端文件内容的一致。说明本次 nfs 共享文件系统搭建成功!1
echo "mount -t nfs 10.8.111.153:/home/nfsfile /root/nfsfile" >> /etc/rc.d/rc.local # 将挂载命令写入 rc.local
直接pod挂载nfs
1 | apiVersion: apps/v1 |
使用storageClass、pv、pvc
rbac.yaml
1 | apiVersion: v1 |
nfs-subdir-external-provisioner.yaml
1 | kind: Deployment |
nfs-storage-class.yaml
1 | apiVersion: storage.k8s.io/v1 |
nfs-test-pvc.yaml
1 | kind: PersistentVolumeClaim |
nfs-test-nginx-pod.yaml
1 | apiVersion: v1 |
其他
https://blog.51cto.com/u_16175526/6718397
https://blog.51cto.com/u_16213459/7344688
https://blog.csdn.net/qq_30051761/article/details/131055705