102

一篇讲透Kubernetes与GlusterFS之间的爱恨情仇(二) - 恒生技术之眼 - 恒生研究院

 6 years ago
source link: http://rdc.hundsun.com/portal/article/827.html?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一篇讲透Kubernetes与GlusterFS之间的爱恨情仇(二)

上文我们主要介绍了Kubernetes与GlusterFS的部署方式和如何使用手动的方式使用存储时自己创建GlusterFS的卷(GlusterFS的数据存储在卷Volume上)请戳链接回顾:一篇讲透Kubernetes与GlusterFS之间的爱恨情仇(一)

本文我们将继续介绍如何自动利用Kubernetes的 Dynamic Provisioning 特性。自动方式需要先部署Heketi软件,Heketi用来管理GlusterFS,并提供RESTful API接口供Kubernetes调用。Heketi需要使用裸磁盘,假设三个GlusterFS节点上都挂了一块裸磁盘 /dev/xvde。接下来我们进入实战模式

【部署Heketi】

部署在

f_8c541a4c7e88f5731525d3ffc3967ed6.png

安装:(以下安装过程--到安装结束的地方--可以使用 http://192.168.58.228:9007/glusterfs/heketi/ 上的一键安装包安装)
改为公司yum源

f_9fbe68dbb273a7a8ca18a35c5368a239.png

f_9c895184eea89bbedc261e5322cdafac.png

(安装结束)
修改/etc/heketi/heketi.json(省略了没有修改的部分):

f_7e69b0682de53d2b936f5cf6d975ca09.png

这里主要把端口改为8083了(防止冲突),executor 改为 ssh, sshexec 的各项配置也做了相应修改。
其中的keyfile制作方法:
f_5843375d534071616dd0858e00ee8414.png

输入key(随便起的名字)一直回车。制作完成后会在当前目录下生成key、key.pub,把 key.pub 上传到GlusterFS三台服务器的 /root/.ssh/ 下面,并重命名为 authorized_keys,/etc/heketi/heketi.json 中 的 keyfile 指向 生成的 key(包含路径)。
启动:

f_6d3451a58f13b78c500ce490193c7b9c.png

f_10d82fa9afb8d8043696b38d917b5613.png

(Heketi数据目录: /var/lib/heketi)
验证:
f_d1288e42d64767b8ff486319ab0350f8.png

f_48d9912306cbb127da2859b597625f27.png

配置节点
新建 topology.json:

f_8a19e7c34d0e0b17fffc752eaa3195ac.png
f_dc4ced1e87648bb758482a92bbaf44db.png
f_25ea9ff21673b329037383fd8797ed96.png

载入配置:

f_46e397f793f9fcb6955adb42c7b5fd73.png

查看拓扑:

f_07e20e15884834fbdc4a491d338934f5.png

建个大小为2G的volume试试:

f_97dac398462060c35a62051387931e77.png

f_0511ef87223f6696fa6c1cb8da72f817.png

f_fef7566536bf0b641f0aa3fae4d942fb.png

【Kubernetes创建StorageClass】

Kubernetes通过创建StorageClass来使用 Dynamic Provisioning 特性,StorageClass连接Heketi,可以根据需要自动创建GluserFS的Volume,StorageClass还是要系统管理员创建,不过StorageClass不需要每次创建,因为这个不需要很多,不同的PVC可以用同一个StorageClass。
新建文件:glusterfs-storageclass.yaml:

f_844f221bfa46bcfd7abbcee2485b2c05.png

replicate:3代表会创建三个副本复制模式的GluserFS Volume。
执行命令创建:
f_337e0a348e6a3320d26e0addefee18b6.png

f_7928694bfd1aaa626633dbc2056bb2e5.png

【Kubernetes创建应用】

应用部署人员创建pvc及应用(本文还是以mysql为例)
创建两个文件:
▪ glusterfs-pvc.yaml:

f_6ffefb72dc32ec6f7f912a9389588279.png

▪ mysql-deployment.yaml:

f_2072e88ee1eb18ab5d7e2f7657a05aea.png
f_e5bbb1a67ca316e84cb534bc457628ef.png

执行命令创建:

f_a7b70d261d4de4ded90d0a87165dfbf1.png

查看endpoint、service、pv,可以发现这些都自动建好了:

f_efb61cca7fccd5216c074759868e3a17.png

f_de75546157e73aec151c1270460773b4.png

f_0558b4c6a53fb4d5d5c6607f0b8d9dd3.png

查看PVC:

f_6c8c656c9baad9706a12371cd7f41ee8.png

c可以看到PV和PVC已经绑定好。
还是可以用刚才的命令连接到mysql:
f_5ce2f4bdad4101979f7df42ffe1fe131.png

按刚才的方式测试mysql pod重新调度后数据还在不在,可以发现数据还在。

从上一篇文章可以看到手动方式需要系统管理员每次手动建GlusterFS的Volume和Kubernetes的PV,或者系统管理员事先建好一批Volume和PV。而本文所介绍的自动方式则是不需要,Kubernetes可以根据应用部署人员的需要动态创建Volume和PV,节省了很多工作量,所以,得出的结论就是推荐使用自动方式。有更好建议的同学可以留言分享你的观点,我们一起探讨吧!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK