docker中nfs server的多目录挂载点搭建

1.背景

在使用docker云平台(这个可以包含公有的云平台,也可以是自己内部搭建的云平台)过程中,同一个应用系统一般都涉及多个镜像,比如一般都会涉及到Web逻辑的镜像、Nginx等代理镜像及数据库镜像,而且它们都会使用到存储,将内部的可变数据持久化到存储上,这样保证容器重启或删除后,数据依然存在。
而如果同一个系统启动的镜像太多了,如果每个镜像申请一个存储目录,那么需要申请的存储目录就可能会很多,管理起来可能会不太方便。
本文针对如下情况,描述尝试的方案:

  • 多个镜像均需挂载的目录,进行存储数据;
  • 想只申请一份挂载的存储空间,想建立其子目录以适应不同的镜像挂载;
  • 在k8s云平台中,又限制只能直接挂载PVC存储,不能对PVC下的子目录进行挂载
  • 当前无可用的公共NAS或NFS的挂载点

因此,需要启动一个docker容器,用来运行NFS服务器,将同一个PVC的存储分别映射出不同的子目录供不同镜像挂载,以实现:对于镜像来说,可直接挂载自己的目录,不会对其它目录造成影响,其容器内部目录结构也不需要做任何改变。

2.单挂载点

2.1.下载镜像并启动服务容器

本文使用的镜像为itsthenetwork/nfs-server-alpine:latest,可直接pull到本地,启动容器方法:

docker run -d --name nfs_server --privileged -p 2050:2049 \
-v /本地需共享的主机目录:/nfsroot \
-h nfsserver \
-e SHARED_DIRECTORY=/nfsroot \
itsthenetwork/nfs-server-alpine:latest

其中-p的端口2050为容器映射出来主机的端口;
-h表示为本容器设定一个主机名,这样在其他容器中可使用主机名的方式访问(有可能容器在重启后其IP会变化);
-e为设置本容器的环境变更,表示本容器对外提供的根为【/】的挂载点。

2.2.客户端容器连接

假设已经存在另外一些客户端的镜像,本文以alpine linux为例:

docker run -it --name nfs_client --privileged  \
--link nfs_server:nfsserver \
alpine:latest /bin/sh

上述命令只是启动临时的容器,作为验证使用,若需长期启动容器并挂载,需要将-it换成-d,更多具体的容器操作,可查阅相关资料。
其中--link表示本容器会访问到容器名为nfs_server且其主机名为nfsserver的容器,添加此参数后会在本容器的/etc/hosts文件中添加一行

172.xxx.xxx.xx      nfsserver nfsserver nfs_server

还需注意,此容器需添加--privileged参数表示容器的用户有SYS_ADMIN权限,此时才可顺利的执行mount命令。

然后就是在容器中进行mount了:

mount -t nfs4 nfsserver:/ /home/vol01/

将nfs的根目录挂载到本地的/home/vol01目录中。

注意:
此时只能挂载mfsserver:/这个根,不能再往后写其子目录,即使子目录已经建立好,因为当前服务器中/etc/exports中只指明了这个根是对外提供挂载的,而没有指明其子目录。
/etc/exports文件声明对外挂载的目录,文件内容示例如下:

/nfsroot *(rw,fsid=0,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)

若单节点的搭建还存在问题,可再参考官方github说明

2.3.小结

上述安装过程展现了各目录之间的前后关系(假设S表示服务容器,C表示客户容器):

  • S中启动时已经挂载PVC存储到【/nfsroot】目录
  • S启动时会使用/etc/exports文件,表示本地目录是【/nfsroot】,对外挂载时是默认的【/】
  • C端mount将S的【/】映射到本地【/home/vol01】
  • 最终实现【存储目录】->【/nfsroot】->【/】->【/home/vol01】的转换

3.多挂载点

3.1.原理

参考文章NFS (Network File System) 服务器共享多个目录,结合github在线提问,即我们可有2种方法来实现多目录共享:

  • 重新编译镜像方式:
    下载nfs-server-alpine的github源码,按在线提问方法修改confd/tmpl/exports.tmpl文件,注意其中的fsid=0参数只能有1个,表示对外提供的根服务目录,然后重新编译镜像并启动容器。
  • 直接修改容器内容:
    可在启动nfs-server-alpine容器后,进入容器中手动修改/etc/exports文件,然后再将容器反向保存为镜像,这样以后启动新容器时就还是能提供多目录的挂载点了。示例:
/nfsroot *(rw,fsid=0,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)
/nfsroot/vol1 *(rw,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)
/nfsroot/vol2 *(rw,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)
/nfsroot/vol3 *(rw,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash)

但无论使用哪种方案,最终目标都是生成合适的/etc/exports文件。

3.2.客户端的挂载

客户端挂载时,可使用如下方式:

mount -t nfs4 nasserver:/vol1 /home/vol_1/

即目录关系为:
【存储】->【/nfsroot】->此目录下新手工建了vol1到vol3子目录->【exports文件中/nfsroot/vol1到vol3】->【客户端/vol1到vol3】->【客户端/home/vol_1/或其他本地目录】

3.3.总结

至此,所有的工作就已经完成了。
经验就是只要弄明白单文件挂载,多文件挂载也就很轻松了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容