为了账号安全,请及时绑定邮箱和手机立即绑定

30-使用GlusterFS作为后端持久化存储

标签:
容器

1.概述

本文档使用一个端到端的案例介绍使用GlusterFS作为OKD集群的后端持久化存储方案。
注:以上所有关于oc的命名都是在master节点上执行的。
关于GlusterFS可参考《GlusterFS简介》、《GlusterFS安装》、《GlusterFS使用》和《GlusterFS限额》等。

2.预备条件

mount.glusterfs依赖于glusterfs-fuse包,如果没有就安装,如果存在则需要更新到最新版本。

$ yum install glusterfs-fuse -y
$ yum update glusterfs-fuse -y

默认情况下,SELinux不允许从pod写入远程GlusterFS服务器。要启用在SELinux下写入GlusterFS卷,请在运行GlusterFS的每个节点上运行以下操作:

$ sudo setsebool -P virt_sandbox_use_fusefs on
$ sudo setsebool -P virt_use_fusefs on

注:-P参数使重启后依然有效
其实也就是禁用SELinux。

3.静态配置

1)创建volume
要确保GlusterFS集群上创建了一个volume,比如gv0。
2)定义创建Service和Endpoints文件
创建glusterfs-endpoints.yaml文件。

---apiVersion: v1kind: Servicemetadata:  name: glusterfs-cluster spec:  ports:  - port: 1---apiVersion: v1kind: Endpointsmetadata:  name: glusterfs-cluster subsets:  - addresses:      - ip: 10.11.4.18 
    ports:      - port: 1 
  - addresses:      - ip: 10.11.4.20
    ports:      - port: 1

注:

  • Service和Endpoints名称必须相匹配

  • ip不能配置成主机名

3)创建Service和Endpoints

$ oc create -f gluster-endpoints.yaml 
service/glusterfs-cluster created
endpoints/glusterfs-cluster created

4)验证Service和Endpoints

$ oc get services
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                   AGE
glusterfs-cluster   ClusterIP   172.30.80.187    <none>        1/TCP                     4s

$ oc get endpoints
NAME                ENDPOINTS                                                   AGE
glusterfs-cluster   10.11.4.18:1,10.11.4.20:1                                   15s

每个Project的Endpoints都是唯一的。每个访问GlusterFS卷的项目都需要自己的Endpoints。

5)获取能访问volume的UID和GID
为了访问volume,容器必须使用能够访问volume上的文件系统的用户ID (UID)或组ID (GID)运行。可以通过以下方式发现这些信息:

$ mkdir -p /mnt/glusterfs/gv0$ mount -t glusterfs 10.11.4.18:/gv0 /mnt/glusterfs/gv0$ ls -lnZ /mnt/glusterfs/
drwxr-xr-x. 0 0 system_u:object_r:fusefs_t:s0    gv0

UID=0
GID=0

6)定义持久化卷

gluster-pv.yaml,内容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: gluster-default-volume 
 annotations:
   pv.beta.kubernetes.io/gid: "0" spec:
 capacity:
   storage: 20Gi 
 accessModes: 
   - ReadWriteMany
 glusterfs:
   endpoints: glusterfs-cluster 
   path: gv0 
   readOnly: false
 persistentVolumeReclaimPolicy: Retain

7)创建PV

<wiz_code_mirror><pre class=" CodeMirror-line " role="presentation">$ oc create -f gluster-pv.yaml </pre>

<pre class=" CodeMirror-line " role="presentation">persistentvolume/gluster-default-volume created</pre></wiz_code_mirror>

8)验证PV

$ oc create -f gluster-pv.yaml 
persistentvolume/gluster-default-volume created

至此完成,后续即可通过pvc使用该pv了。

4.存在问题

上述步骤只是实现了从GlusterFS到PV的过程,梳理下会发现其流程如下:
1)在GlusterFS集群上创建Volume
2)在每个需要使用持久存储的Project上创建Service和Endpoint
3)创建PV
如果每创建一个Project(有持久化存储需求的)都需要执行上述过程,岂不繁琐。
是否有什么方式将上述过程自动化起来?
最理想的结果是,当Pod需要持久化存储时,只需要提出PVC需求,程序会自动从后端存储分配满足需求的Volume,以供使用。
幸运的是,当然可以。
请参考《31-动态配置后端存储》



作者:四冶
链接:https://www.jianshu.com/p/66a309c3c6e7


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消