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
共同学习,写下你的评论
评论加载中...
作者其他优质文章