Kubernetes中部署Heketi和GlusterFS

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2018-08-17 08:26

Kubernetes中部署Heketi和GlusterFS

1. 前言

在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是:
创建brick–>创建volume–>创建PV–>创建PVC–>Pod挂载PVC
如果要创建多个PV,则需要手动重复执行这些繁锁步骤,Heketi可以解决这些重复问题。
Heketi是用来管理GlusterFS卷的生命周期的,并提供了一个RESTful API接口供Kubernetes调用,因为GlusterFS没有提供API调用的方式,所以我们借助heketi,通过Heketi,Kubernetes可以动态配置GlusterFS卷,Heketi会动态在集群内选择bricks创建所需的volumes,确保数据的副本会分散到集群不同的故障域内,同时Heketi还支持GlusterFS多集群管理,便于管理员对GlusterFS进行操作。
Heketi要求在每个glusterfs节点上配备裸磁盘,因为Heketi要用来创建PV和VG,如果有了Heketi,则可以通过StorageClass来创建PV,步骤仅有:
创建StorageClass–>创建PVC–>Pod挂载PVC
这种方式称为基于StorageClass的动态资源供应,虽然只有简单的两步,但是它所干活的活一点也不比上述中步骤少,只不过大部分工作都由Heketi在背后帮我们完成了。

2. 环境说明

3. gluster-kubernetes部署

给需要部署GlusterFS节点的Node打上标签

准备部署文件

修改配置topology.json

topology-sample.json文件,称为拓朴文件,它提供了运行gluster Pod的kubernetes节点IP,每个节点上相应的磁盘块设备,修改hostnames/manage,设置为与kubectl get nodes所显示的Name字段的值,通常为Node IP,修改hostnames/storage下的IP,为存储网络的IP地址,也即Node IP。

集群部署成功后修改配置,需要再次加载,使用如下命令:
/usr/bin/kubectl -n default exec -i $(kubectl get pod|grep heketi|awk '{print $1}') -- heketi-cli -s http://localhost:8080 --user admin --secret '' topology load --json=/etc/heketi/topology.json

执行了heketi-cli topology load之后,Heketi到底在服务器上做了什么呢?
进入任意glusterfs Pod内,执行gluster peer status发现都已把对端加入到了可信存储池(TSP)中。
在运行了gluster Pod的节点上,自动创建了一个VG,此VG正是由topology.json文件中的磁盘裸设备创建而来。
一块磁盘设备创建出一个VG,以后创建的PVC,即从此VG里划分的LV。
heketi-cli topology info 查看拓扑结构,显示出每个磁盘设备的ID,对应VG的ID,总空间、已用空间、空余空间等信息。
可以通过Heketi Pod 日志查看到。

执行部署

注意:
* 上文json中的磁盘是没有新建vg、pv的。
* 部署失败使用./gk-deploy -g --abort删除pod,再将节点的目录/var/lib/glusterd清空,删除磁盘的vg和pv
* 在gk-deploy我修改了create -fapply -f,避免secret不更新,适当在确认无误但又影响脚本运行的地方注释exit,比如Error: Volume heketidbstorage alreay exists

问题
https://github.com/gluster/gluster-kubernetes/issues/507

上面提示挂载失败,其实是需要在运行的deploy-heketi节点上安装yum -y install glusterfs-fuse

全部部署成功后:

返回如下则正常:

参考资料:
[1] http://blog.51cto.com/newfly/2134514
[2] http://blog.51cto.com/newfly/2139393
[3] https://github.com/gluster/gluster-kubernetes
[4] https://github.com/gluster/gluster-kubernetes/blob/master/docs/examples/hello_world/README.md

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.