文档章节

GlusterFS-动态卷快速应用

openthings
 openthings
发布于 2018/06/09 17:58
字数 1247
阅读 112
收藏 0

 

GlusterFS-动态卷快速应用

有了一个 Kubernetes cluster 集群,以及一个工作的 Heketi Server。下一步我们将创建一个 NGINX HelloWorld application,使用Kubernetes动态存储提供机制和Heketi。

本例子假定你已经熟悉 Kubernetes 和 Kubernetes Persistent Storage 架构模型。

确认环境变量并收集信息用于后面的步骤

验证 Heketi REST URL 和 Server IP Address:

$ echo $HEKETI_CLI_SERVER
http://10.42.0.0:8080

缺省情况下,user_authorization被关闭。如果被打开,你将需要找到 rest user 和 rest user secret key (本例程不适用,任何值都可以工作)。也可以配置一个 secret 然后传递到Gluster dynamic provisioner的credentials,通过StorageClass 参数来进行。

kubectl get endpoints
NAME                       ENDPOINTS                                            AGE
heketi                     10.42.0.0:8080                                       22h
heketi-storage-endpoints   192.168.10.100:1,192.168.10.101:1,192.168.10.102:1   22h
kubernetes                 192.168.10.90:6443                                   23h

Dynamic provisioner in Kubernetes >= 1.5

从 Kubernetes 1.5 开始,手动的Endpoint对于 GlusterFS dynamic provisioner不再需要了。在Kubernetes 1.6 和后续版本,手动指定endpoint将引起失败。当 dynamic provisioner 创建volume时将自动创建 Endpoint。

Kubernetes中这里有另外的 StorageClass 参数 (e.g. cluster, GID) 被添加到 Gluster dynamic provisioner。请参阅 GlusterFS Dynamic Provisioning 获得更多的参数设置的信息。

创建 StorageClass,支持 GlusterFS Dynamic Provisioner

Kuberentes Storage Classes 用于管理和支持Persistent Storage。下面是 Storage Class的例子, 将请求创建一个 5GB 的即时存储,用于这里的 HelloWorld 应用。

对 Kubernetes 1.5和以后版本:

apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: gluster-heketi  <1>
provisioner: kubernetes.io/glusterfs  <2>
parameters:
  resturl: "http://10.42.0.0:8080"  <4>
  restuser: "joe"  <5>
  restuserkey: "My Secret Life"  <6>
  • Name,StorageClass的名称。
  • Provisioner,存储服务提供者。
    • GlusterFS defined EndPoint taken from Step 1 above (kubectl get endpoints).
    • For Kubernetes >= 1.6, this parameter should be removed as Kubernetes will reject this YAML definition.
  • 参数
    • Heketi REST Url, taken from Step 1 above (echo $HEKETI_CLI_SERVER), may also be set to the Kubernetes service DNS name for the Heketi service.
    • Restuser, can be anything since authorization is turned off
    • Restuserkey, like Restuser, can be anything

创建StorageClass YAML 文件,保存,然后提交到Kubernetes:

kubectl create -f gluster-storage-class.yaml
storageclass "gluster-heketi" created

查看StorageClass:

kubectl get storageclass
NAME              TYPE
gluster-heketi    kubernetes.io/glusterfs

创建PersistentVolumeClaim (PVC) 请求为HelloWorld创建存储

下一步,我们创建PVC,将请求 5GB存储空间,Kubernetes Dynamic Provisioning Framework 和 Heketi 将自动提供新的 GlusterFS volume 然后创建 Kubernetes PersistentVolume (PV) 对象。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: gluster1
 annotations:
   volume.beta.kubernetes.io/storage-class: gluster-heketi  <1>
spec:
 accessModes:
  - ReadWriteOnce
 resources:
   requests:
     storage: 5Gi <2>
  • The Kubernetes Storage Class annotation and the name of the Storage Class
  • The amount of storage requested

创建PVC的YAML文件,保存,然后提交到Kubernetes集群:

kubectl create -f gluster-pvc.yaml
persistentvolumeclaim "gluster1" created

查看 PVC:

kubectl get pvc
NAME       STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE
gluster1   Bound     pvc-7d37c7bd-bb5b-11e6-b81e-525400d87180   5Gi        RWO           14h

注意,PVC 绑定到动态创建的volume. 我们可以看见这个Volume (PV):

kubectl get pv
NAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM              REASON    AGE
pvc-7d37c7bd-bb5b-11e6-b81e-525400d87180   5Gi        RWO           Delete          Bound     default/gluster1             14h

创建NGINX pod使用上面的PVC

At this point we have a dynamically created GlusterFS volume, bound to a PersistentVolumeClaim, we can now utilize this claim in a pod. We will create a simple NGINX pod.

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod1
  labels:
    name: nginx-pod1
spec:
  containers:
  - name: nginx-pod1
    image: gcr.io/google_containers/nginx-slim:0.8
    ports:
    - name: web
      containerPort: 80
    volumeMounts:
    - name: gluster-vol1
      mountPath: /usr/share/nginx/html
  volumes:
  - name: gluster-vol1
    persistentVolumeClaim:
      claimName: gluster1
  • volumes里面为PVC,在上面的步骤中创建的。

创建 Pod YAML 文件,保存,然后提交到 Kubernetes集群:

kubectl create -f nginx-pod.yaml
pod "nginx-pod1" created

查看Pod (可能需要几分钟,因为需要下载 image):

kubectl get pods -o wide
NAME                               READY     STATUS    RESTARTS   AGE       IP               NODE
nginx-pod1                         1/1       Running   0          9m        10.38.0.0        node1
glusterfs-node0-2509304327-vpce1   1/1       Running   0          1d        192.168.10.100   node0
glusterfs-node1-3290690057-hhq92   1/1       Running   0          1d        192.168.10.101   node1
glusterfs-node2-4072075787-okzjv   1/1       Running   0          1d        192.168.10.102   node2
heketi-3017632314-yyngh            1/1       Running   0          1d        10.42.0.0        node0

现在进到容器中运行 exec,创建一个 index.html 文件。

kubectl exec -ti nginx-pod1 /bin/sh
$ cd /usr/share/nginx/html
$ echo 'Hello World from GlusterFS!!!' > index.html
$ ls
index.html
$ exit

现在,可以通过 curl访问 pod的URL地址(内部地址,只能内部访问,外面要用service+ingerss等方法访问):

curl http://10.38.0.0
Hello World from GlusterFS!!!

最后,检查gluster pod, 查看我们写入的 index.html 文件,选择任何一个 gluster pods:

kubectl exec -ti glusterfs-node1-3290690057-hhq92 /bin/sh
$ mount | grep heketi
/dev/mapper/VolGroup00-LogVol00 on /var/lib/heketi type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/vg_f92e09091f6b20ab12b02a2513e4ed90-brick_1e730a5462c352835055018e1874e578 on /var/lib/heketi/mounts/vg_f92e09091f6b20ab12b02a2513e4ed90/brick_1e730a5462c352835055018e1874e578 type xfs (rw,noatime,seclabel,nouuid,attr2,inode64,logbsize=256k,sunit=512,swidth=512,noquota)
/dev/mapper/vg_f92e09091f6b20ab12b02a2513e4ed90-brick_d8c06e606ff4cc29ccb9d018c73ee292 on /var/lib/heketi/mounts/vg_f92e09091f6b20ab12b02a2513e4ed90/brick_d8c06e606ff4cc29ccb9d018c73ee292 type xfs (rw,noatime,seclabel,nouuid,attr2,inode64,logbsize=256k,sunit=512,swidth=512,noquota)

$ cd /var/lib/heketi/mounts/vg_f92e09091f6b20ab12b02a2513e4ed90/brick_d8c06e606ff4cc29ccb9d018c73ee292/brick
$ ls
index.html
$ cat index.html 
Hello World from GlusterFS!!!

服务的外部访问,参考:

© 著作权归作者所有

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
Kubernetes中挂载GlusterFS的volume

Kubernetes可以直接挂载多种文件系统,其中包括GlusterFS(https://kubernetes.io/docs/concepts/storage/volumes/#glusterfs)。 这里采用最简单的方法,挂载宿主系统的GlusterFS卷给Kuber...

openthings
2018/11/26
500
0
线上部署GlusterFS情况调研结果

还是有不少群友在选择GlusterFS版本时缺乏信心,所以在“GlusterFS技术交流”QQ群(234901333)里调研了一下线上部署GlusterFS情况。 先说明一下GlusterFS的应用场景: 纯基于GlusterFS创业也...

党志强
2018/07/04
0
0
kubernetes中部署Heketi和GlusterFS

前言 在kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC-->Pod挂载PVC 如果要创建多个PV,则需要手动重复执行这些繁锁步骤,Heketi可以解...

Flywithmeto
2018/07/01
0
0
GlusterFS 集群文件系统研究

1. GlusterFS 概述 GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助...

红薯
2011/08/10
3.3K
7
glusterfs的一些基本知识

基本概念 (1) brick:The brick is the storage filesystem that has been assigned to a volume. (2) subvolume:A brick after being processed by at least one translator. (3) volume:......

hncscwc
2014/03/20
4.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
10分钟前
0
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
12分钟前
2
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
15分钟前
1
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
20分钟前
3
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
44分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部