OpenShift Origink8s-openshift-okdGlusterFS

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

2019-01-24  本文已影响3人  四冶读史

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: v1
kind: Service
metadata:
  name: glusterfs-cluster 
spec:
  ports:
  - port: 1
---
apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-cluster 
subsets:
  - addresses:
      - ip: 10.11.4.18 
    ports:
      - port: 1 
  - addresses:
      - ip: 10.11.4.20
    ports:
      - port: 1 

注:

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://docs.okd.io/latest/install_config/storage_examples/gluster_example.html
https://docs.okd.io/latest/install_config/persistent_storage/persistent_storage_glusterfs.html#install-config-persistent-storage-persistent-storage-glusterfs

上一篇下一篇

猜你喜欢

热点阅读