GlusterFS(gfs)由此名字也可看出是文件系统存储相关的软件,它是一个开源的分布式文件系统,具有强大的横向扩展能力。Heketi是一个GlusterFs管理软件,可以管理glusterFS集群的卷创建、删除等操作。Glusterfs作为kubernetes支持的多种卷类型之一,可以为上层应用提供多种挂载形式。
heketi + glusterfs提供两种部署形式:
- 容器化
- 传统服务
以下我会先介绍以传统服务的部署形态对接kubernetes。
- 本文的原稿是我在19年初编写的,以下版本可能过于老旧,同学们进行搭建测试时建议下载较新的版本。
- 阅读本文前希望您能对glusterfs,kubernetes,storageclass,pv有所了解。
环境描述
主机名 | ip地址 | 系统环境 | 角色 |
---|---|---|---|
k8s-1 | IP:192.168.186.10 | cpu:x2 mem:2GB disk:/dev/sdb 10GB | K8s_master,Gluster_master,Heketi_master |
K8s-2 | IP:192.168.186.11 | cpu:x2 mem:2GB disk:/dev/sdb 10GB | K8s_node,Gluster_node |
K8s-3 | IP:192.168.186.12 | cpu:x2 mem:2GB disk:/dev/sdb 10GB | K8s_master,Gluster_node |
如果存在iptable限制,需执行以下命令开通以下port
1 | iptables -N heketi |
安装配置gfs
三台机器都要安装gfs软件并启动服务
1 | [root@k8s-1 ~]# yum -y install centos-release-gluster |
配置/etc/hosts,IP和主机名都一一对应
安装glusterfs client客户端命令
为存储池添加节点Node:(k8s-1操作,不用添加自己)
1 | [root@k8s-1 ~]# gluster peer probe k8s-2 |
安装配置heketi
Heketi使用SSH来配置GlusterFS的所有节点。创建SSH密钥对:
1 | [root@k8s-1 ~]# mkdir /etc/heketi |
ssh公钥传递,这里只以一个节点为例:
1 | [root@k8s-1 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@192.168.186.11 |
制作完成后会在当前目录下生成heketi_key、heketi_key.pub,将公钥heketi_key.pub拷贝到所有glusterfs节点上/etc/heketi/keketi_key.pub(包括你登陆的第一个节点)
安装heketi(在k8s-1操作):
1 | [root@k8s-1 ~]# yum install -y https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/gluster-5/heketi-8.0.0-1.el7.x86_64.rpm |
创建存储db的文件夹:
1 | [root@k8s-1 ~]# mkdir /dcos/heketi |
配置 heketi.json:
1 | { |
注:这里需要注意只是测试的话用mock 授权,standalone模式就 ssh 授权,k8s下就 kubernetes授权。
重启heketi:
1 | [root@k8s-1 ~]# systemctl enable heketi |
测试heketi是否好用:
1 | [root@k8s-1 ~]# curl http://localhost:8088/hello |
通过topology文件对接glusterfs集群:
1 | { |
将该文件发送给heketi创建:
1 | [root@k8s-1 ~]# heketi-cli --server http://192.168.186.10:8088 --user admin --secret 123456 topology load --json=/etc/heketi/topology.json |
创建成功后,heketi会在每个gluster节点上创建一个逻辑卷组,通过vgscan或vgdisplay可以看到:
创建卷测试:
1 | [root@k8s-1 ~]# heketi-cli --server http://192.168.186.10:8088 --user admin --secret 123456 volume create --size=1 |
配置kubernetes使用glusterfs
以密文的方式创建heketi userkey的secret
1 | [root@k8s-1 k8s_gfs]# echo 123456|base64 |
创建Storageclass
1 | [root@k8s-1 k8s_gfs]# cat storageclass_glusterfs.yaml |
创建PVC
1 | [root@k8s-1 k8s_gfs]# cat pvc_glusterfs.yaml |
创建pods测试
1 | [root@k8s-1 k8s_gfs]# cat nginx-pod.yaml |