TKE使用自建NFS持久化存储
使用TKE的过程中,我们需要把pod一些文件持久化存储到外部,这边我们会用到nfs存储,其实在腾讯云上有CFS服务,可以用CFS作为文件存储服务器,TKE也支持将文件挂载到CFS上存储。但是如果你想自己管理nfs服务器,这边也可以通过自建nfs服务器来作为tke集群中pod存储。下面我们来说一下如何将pod的文件挂载到自建的nfs服务器来进行存储。
创建nfs服务器
首先我们先在腾讯云上申请一台cvm服务器,这边建议将对应的磁盘空间配置大点,并且cvm服务器的网络需要和tke集群处于一个vpc内,这样TKE集群可以通过内网直接访问nfs服务器进行挂载
centos部署nfs服务端
# yum -y install nfs-utils rpcbind
# systemctl start rpcbind
# systemctl enable rpcbindubuntu部署nfs服务端
# sudo apt-get install nfs-kernel-server
# sudo service nfs-kernel-server restart
# sudo systemctl enable nfs-kernel-server.service配置nfs的挂载目录
下面我们以centos系统为例进行操作实例,我们在nfs服务器上创建好pod需要挂载的目录,并给对应的目录编辑共享配置文件设置好权限,然后重启nfs服务器。
# mkdir -p /data/volums
# vi /etc/exports
/data/volums *(async,insecure,no_root_squash,no_subtree_check,rw)
# systemctl restart rpcbind/etc/exports配置文件参数及作用说明
ro:只读
rw:读写
root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync:同时将数据写入到内存与硬盘中,保证不丢失数据
async:优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
insecure:允许客户端从大于1024的tcp/ip端口连接服务器
查看nfs服务器上的共享状态,出现上述的内容输出,这边说明/data/volums可以进行挂载了
节点安装nfs客户端工具
因为k8s的调度机制,这边如果不指定调度,会随机指定节点调度,所以这边建议所有节点都按照nfs的客户端,保证pod调度到节点上可以执行挂载操作。
centos部署nfs客户端工具
ubuntu部署nfs客户端工具
集群中部署nfs客户端nfs-client-provisioner
这边我们在TKE集群中通过部署nfs-client-provisioner客户端工具。
通过rbac给nfs-client-provisioner分配权限
创建nfs-client-provisioner
创建nfs对应的StorageClass
创建pod挂载到自建nfs服务器
直接挂载到nfs盘的目录下

下面我们在容器内创建几个文件,看下在nfs服务器下/data/volums/nginx的目录是否也有,我们在容器内创建test1和test2
去nfs的/data/volums/nginx目录验证下
对应的文件已成功挂载到nfs服务中
通过pvc挂载某个目录到nfs服务器
这边我们将上面创建的test-claim这个pvc挂载到容器内

下面我们做个简单的验证,在容器内创建文件,看下对应的pvc下会不会有文件生成

容器内的test文件成功挂载到pvc卷的目录。
动态创建pvc挂载到nfs上
k8s中只有StatefulSet需要动态创建pvc来挂载每一个pod内生成的文件,下面我们创建一个StatefulSet来动态创建pvc挂载到容器上。
执行上面的yaml创建2个pod,然后登录pod创建文件,这边我们验证下是否挂载成功
我们登录到nfs服务器上查看下pod对应的pvc所在目录是否有文件生成
从上面查看,对应的文件已在服务器上挂载成功。
最后更新于
这有帮助吗?