microk8s上给Pod挂载NFS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了microk8s上给Pod挂载NFS相关的知识,希望对你有一定的参考价值。

参考技术A 团队新开发的区域医疗平台包含一个课件上传与播放模块,其实际的业务包含如下的步骤:

1.  县级和乡镇卫生院的医生们通过在线视频参加培训、并录制视频。

2. 医生上传视频,并共享课件。

3.  平台上的其他医生可以在课件学习栏目学习录制的培训会议。

通常,课件的上传和保存我们都是通过对象存储做的,对象存储的好处显而易见:不担心文件丢失(三份备份), 不担心容量(云服务商集群),https/http访问, 数据安全(对象访问签名);  但是这个平台需要部署到区域医疗机构的机房里,多数情况下是没有对象存储的,外购对象存储也成本过高, 所以我们采用了折中的方案,存储系统换为NFS, 只需要一个大存储量的机器就可以了,大概服务如下:

我们开发了一个uploader服务,用于上传文件,同时使用nginx提供http/https服务,两个服务之间共享存储,使用NFS存储挂载给他们。

这里我们来看看怎么给microk8s上的pod挂载NFS存储。

首先,我们需要安装NFS server 用于测试

我们使用ubuntu来进行测试,先执行命令:sudo apt install nfs-kernel-server

这个命令将安装服务器端,以及所有相关的包:

在home目录下创建一个nfsshare的文件夹用作共享目录。然后我们来编辑nfs配置文件,配置该共享目录,默认允许所有IP段挂在:

启动nfs: sudo /etc/init.d/nfs-kernel-server start

可以使用服务命令查看服务状态: service nfs-kernel-server   status

使用ip addr命令查看以下当前主机的IP:

现在我们来使用nfsclient端测试一下:

sudo mount 10.0.2.15:/home/nfsshare   /mnt

查询 /mnt 目录,可以看到在 /home/nsshare下面创建的文件和子目录

测试完后umount 挂载点:  sudo umount -v /mnt

1. 先写一个PV, 用来表示可以挂载的NFS存储:

2. 接着写一个PVC,用于绑定PV:

3. 然后写包装了nginx的存储服务的deployment文件:

4. 最后写存储服务对应的service文件:

完成了所有配置文件,使用microk8s kubectl apply -f 命令,依次创建资源对象。

查询创建的pod:

使用exec 登陆docker,

查询/usr/share/storage目录,如下图,nfs已经挂载好了,可以看见我们在test目录下创建了几个文件:

最后,我们来验证一下http方式访问文件

现在storage的nfs目录下创建两个子目录,attachement、video , 对应docker的挂在路径为: /usr/share/storage/atttachment、/usr/share/storage/video。 

在两个文件夹下面,分别创建两个文件 helloA.txt  helloB.txt, 并随意写写内容。

完成后我们通过30080端口,从microk8s节点的浏览器访问两个文件:

至此,在k8s下,给pod挂在nfs的工作,并通过http访问的任务就完了。另外:

1.   后续需要考虑,通过Lua写一个脚本和nginx集成,实现访问资源签名验证,这个机制可以很容易的参考对象存储的验证。

2. 这里没有讨论,如何写upload和制作storage服务的镜像,upload服务也需要挂载nfs,原理是一样的,所以就不再讨论。 storage服务是基于Nginx镜像实现,下面的附录了带上了可参考的配置文件。

==============================================================

附录A: storageservice服务中,nginx的配置文件storage.conf

附录B:  storageservice服务中dockerfile文件

附录C: Storageservice的build.gradle文件

参考 一个Springboot项目的build.gradle和Dockerfile ,  这里的buiild.gradle文件不需要java build, 仅需要用来生成新docker镜像。

以上是关于microk8s上给Pod挂载NFS的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EKS (NFS) 到 Kubernetes pod。无法挂载卷

k8s之存储抽象nfs挂载

jenkins-使用 Pod 构建任务时挂载 NFS 持久卷到工作目录

KUBERNETES05_NFS坏境搭建PVPVC挂载目录ConfigMap挂载文件Secret挂载敏感信息

KUBERNETES05_NFS坏境搭建PVPVC挂载目录ConfigMap挂载文件Secret挂载敏感信息

CenterOS下使用NFS远程目录挂载