美文网首页OpenShift Origink8s-openshift-okdGlusterFS
30-使用GlusterFS作为后端持久化存储

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

作者: 四冶读史 | 来源:发表于2019-01-24 16:05 被阅读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 
    

    注:

    • 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://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

    相关文章

      网友评论

        本文标题:30-使用GlusterFS作为后端持久化存储

        本文链接:https://www.haomeiwen.com/subject/gsfujqtx.html