GlusterFS()是一个分布式存储系统,支持多种类型。GlusterFS支持裸机集群部署和Kubernetes容器部署,客户端可以使用专用客户端驱动mount到主机文件系统,也支持NFS/samba等协议,可以通过网络访问,或者通过进行访问。
- 说明:这里用到的一些脚本工具在 。
1、Gluster volume服务设置
首先,检查一下节点的状态,如下:
supermap@podc01:~/openthings/kubernetes-tools/gluster/tools$ sudo gluster pool listUUID Hostname State6dd32f80-4191-4b96-8021-53c241cefa66 10.1.1.204 Connected 85112a7f-2c6b-4c57-8f6f-636c84232418 10.1.1.234 Connected dae26553-62f7-4b32-81c3-c35e527872a9 10.1.1.205 Connected 7738c78a-ca52-413e-b609-7de9d3208314 10.1.1.202 Connected ee69bb6d-ca75-4c05-b423-525523f117f6 10.1.1.193 Connected fd4a83ea-0886-4d42-ab86-1aa9be6e154c 10.1.1.112 Connected bf976527-e48e-4c97-bfb6-7a4e47aaad31 10.1.1.203 Connected f629a751-ec21-4a24-976e-8ae9840628fe localhost Connected
然后,创建volume:
# Create simple volume: gvz00gluster volume create gvz00 \10.1.1.193:/zpool/gvz00 \10.1.1.234:/zpool/gvz00 \10.1.1.205:/zpool/gvz00 \10.1.1.112:/zpool/gvz00 \force
开启卷gvz00的nfs服务,如下:
gluster volume set gvz00 nfs.disable off
注意:
- 每个卷的NFS服务需要单独设置。
- 默认设置为nfs.disable为on,需要设为off。逻辑有点不走寻常路,呵呵。
查看存储卷的状态:
sudo gluster volume status
返回信息如下:
Status of volume: gvz00Gluster process TCP Port RDMA Port Online Pid------------------------------------------------------------------------------Brick 10.1.1.193:/zpool/gvz00 N/A N/A N N/A Brick 10.1.1.234:/zpool/gvz00 49153 0 Y 31752Brick 10.1.1.205:/zpool/gvz00 49153 0 Y 1121 Brick 10.1.1.112:/zpool/gvz00 49153 0 Y 19786NFS Server on localhost 2049 0 Y 24770NFS Server on 10.1.1.203 2049 0 Y 89228NFS Server on 10.1.1.205 N/A N/A N N/A NFS Server on 10.1.1.202 2049 0 Y 7498 NFS Server on 10.1.1.234 2049 0 Y 27221NFS Server on 10.1.1.204 N/A N/A N N/A NFS Server on 10.1.1.193 2049 0 Y 24080NFS Server on 10.1.1.112 2049 0 Y 25981 Task Status of Volume gvz00------------------------------------------------------------------------------There are no active volume tasks
如果需要关闭NFS服务,执行如下命令:
gluster volume reset disp_vol nfs.disable
2、存储服务的访问
2.1 gluster-client直接访问
需要将Gluster Volume服务挂载为Linux系统存储卷,挂载方式包括:
- 手动挂载,如下:
mkdir /home/supermap/gvz00sudo mount -t glusterfs 10.1.1.201:/gvz00 /home/supermap/gvz00
-
自動掛載,编辑
/etc/fstab文件,加入:
10.1.1.201:/gvz00 /home/supermap/gvz00 glusterfs _netdev,rw,acl 0 0
請特別注意要加上 _netdev 選項。
使用
acl
選項可以在掛載目錄中啟用 POSIX ACL 的支援。
- 挂载测试:
sudo mount -a
- 查看卷:
df -h
2.2 挂载NFS Volume
使用 NFS 挂载之前,先确定rpcbind
已启动:
sudo systemctl start rpcbindsudo systemctl enable rpcbind
- 手动挂载,如下:
mkdir /home/supermap/nfs-gvz00sudo mount -t nfs 10.1.1.201:/gvz00 /home/supermap/nfs-gvz00
-
自动挂载,编辑
/etc/fstab,添加:
10.1.1.201:/gvz00 /home/supermap/nfs-gvz00 nfs _netdev,rw 0 0
- 挂载测试:
sudo mount -a
- 查看卷:
df -h
3、数据处理流程
数据写入
Client 使用 NFS 写入数据时,会先将数据传送到挂载的节点,再由该节点写入各个分布式节点的Brick。
数据读取
Client 使用 NFS 读数据时,会先由挂载节点取得数据再传送到Client。
节点漂移和性能
- 综上所述,对于Kubernetes的Pod使用该存储卷,如果是客户端直接挂载方式不具有迁移性(每个节点都需要设置挂载目录),NFS方式会存在单点故障和网络瓶颈问题。
- 使用《》的方法挂载,可以通过Kubernetes的Service机制将网络数据路由到多个节点,具有可迁移性、消除单点故障。不过,在使用Kubeflow和JupyterHub时,出现了写入故障,提示权限不允许访问(使用Nginx服务,root访问没有问题),需要进一步解决该问题。
- 使用Heketi可以安装Gluster到kubernetes中托管和自动调度卷(参见《》),不过目前版本发现有一些缺陷,而Gluster.org正在开发一个官方版的Kubernetes支持,在Gluster2中提供,目前还不成熟,需要进行较多的升级操作。
更多参考: