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 rpcbind

ubuntu部署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盘的目录下

upload-image

下面我们在容器内创建几个文件,看下在nfs服务器下/data/volums/nginx的目录是否也有,我们在容器内创建test1和test2

去nfs的/data/volums/nginx目录验证下

对应的文件已成功挂载到nfs服务中

通过pvc挂载某个目录到nfs服务器

这边我们将上面创建的test-claim这个pvc挂载到容器内

upload-image

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

upload-image

容器内的test文件成功挂载到pvc卷的目录。

动态创建pvc挂载到nfs上

k8s中只有StatefulSet需要动态创建pvc来挂载每一个pod内生成的文件,下面我们创建一个StatefulSet来动态创建pvc挂载到容器上。

执行上面的yaml创建2个pod,然后登录pod创建文件,这边我们验证下是否挂载成功

我们登录到nfs服务器上查看下pod对应的pvc所在目录是否有文件生成

从上面查看,对应的文件已在服务器上挂载成功。

最后更新于

这有帮助吗?