首页 > 服务配置 > glusterfs在kubernetes中的使用详解
2018
08-24

glusterfs在kubernetes中的使用详解

kubernetes集群的存储用什么,glusterfs、ceph、nfs、fastdfs?选择多了就会有困扰,各个集群都有自己的特点,gfs便于创建、维护,ceph支持比较广泛,nfs是许多存储自带的功能。我这里选择glusterfs,集群方式和RAID模式的原理一样,便于维护
下面为glusterfs集群创建完毕,可参考 glusterfs集群故障恢复 ,先用静态模式做示例,再用动态模式storageclass示例,满足线上使用情况。

glusterfs静态配置

先创建一个namespace,kubernetes默认的namespace为default,下面为bbotte

service和endpoint的name必须一致,endpoint中ip必须是ip,不能为hostname,端口port可以自己定义,不冲突即可
kubectl create -f 创建上面2个配置文件,查看创建的service和endpoint

glusterfs pv、pvc配置示例

pv的配置中,endpoint即上面和service保持一致的endpoint名称
path是glusterfs的Volume Name(gluster volume info 查看,或者 gluster volume list查看)
pv定义的name和pvc的volumeName保持一致

这时候,pvc就可以提供给kubernetes使用了,比如创建一个deployment的配置片段:

glusterfs动态配置

首先需要说一下heketi,RESTful based volume management framework for GlusterFS,是给glusterfs存储提供RESTful API接口,这样kubernetes才可以调用存储
Heketi提供RESTful管理界面,可用于管理GlusterFS卷的生命周期。 借助Heketi,OpenStack Manila,Kubernetes和OpenShift等云服务可以使用任何支持的持久性类型动态配置GlusterFS卷。 Heketi将自动确定整个群集中bricks的位置,确保将bricks及其副本放置在不同的故障域中。 Heketi还支持任意数量的GlusterFS集群,允许云服务提供网络文件存储,而不限于单个GlusterFS集群。

前提是需要单独的磁盘,直接添加一块新的磁盘,不用格式化,下面例子为/dev/sdb, Heketi is currently limited to managing raw devices only, if a device is already a Gluster volume it will be skipped and ignored.
heketi后端默认的gfs集群为3个,所以下面创建3个gfs主机测试:

messages提示:

编辑/usr/lib/systemd/system/heketi.service
-config 改为 –config即可

检查一下:

heketi-cli命令使用帮助

接着我们需要创建heketi的配置文件,配置文件中包含gfs主机的hostname/ip/drivers,其中/dev/sdb 磁盘空间为16G

或者

如此,heketi的拓扑结构就建立完成,下面创建虚拟的磁盘,大小为8G,副本集为3个

编写kubernetes需要的配置文件

创建storageclass后,需要创建一个pvc:

疑问

神奇的事情就这样发生了,/dev/sdb磁盘空间为16G,heketi-cli创建的volume为8G,pvc这里storage为6G,并且heketi查看volume,并且增加了一个volume,即 34a02ada5a99948f60a36e894a3dc2a8,如果这里pvc的storage大于6G,会创建失败,提示空间不足

The magical thing happened. The disk space of /dev/sdb in the heketi topology is 16G, the volume created by heketi-cli is 8G, the storage of pvc here is 6G, the volume is viewed using heketi-cli, and a volume is added, ie 34a02ada5a99948f60a36e894a3dc2a8 .If the storage of pvc is greater than 6G, it will fail to create, and the prompt space is insufficient.

heketi日志的提示

我们查看创建的pvc和storageclass

可以看到pv默认的RECLAIM POLICY回收策略是删除,对于重要的数据,比如zookeeper、kafka不能被删除的,需要更改策略为retain保留

建一个pod测试一下

over,如此,就可以愉快的创建zookeeper了

遇到的问题

创建heketi拓扑的时候提示:

黑人问号脸,为什么heketi创建volume空间和storageclass中pvc storage空间相加必须小于heketi drivers的磁盘空间?

参考 https://github.com/gluster/gluster-kubernetes/blob/master/docs/examples/dynamic_provisioning_external_gluster/README.md

最后编辑:
作者:bbotte

glusterfs在kubernetes中的使用详解》有 1 条评论

  1. What’s up, Steve with Вridges.
    Awesome “glusterfs在kubernetes中的使用详解 ” iss truly an intriguing subject
    І just wanted to share that I liked your blog.

留下一个回复

你的email不会被公开。