博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GlusterFS-动态卷快速应用
阅读量:6936 次
发布时间:2019-06-27

本文共 6336 字,大约阅读时间需要 21 分钟。

hot3.png

 

GlusterFS-动态卷快速应用

  • 本文编译来自 
  • 本文地址 ,by openthings, 2018.06.09.
  • 参考:
    • Gluster官网,
    • Gluster源码,
    • Gluster文档,
    • Gluster 4.0 & Kubernetes, 
    • GlusterFS分布式文件系统的安装配置教程,
    • Kubernetes部署GlusterFS
    • Adding new glusterfs StorageClass to Kubernetes?

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

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

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

验证 Heketi REST URL 和 Server IP Address:

$ echo $HEKETI_CLI_SERVERhttp://10.42.0.0:8080

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

kubectl get endpointsNAME                       ENDPOINTS                                            AGEheketi                     10.42.0.0:8080                                       22hheketi-storage-endpoints   192.168.10.100:1,192.168.10.101:1,192.168.10.102:1   22hkubernetes                 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。请参阅  获得更多的参数设置的信息。

创建 StorageClass,支持 GlusterFS Dynamic Provisioner

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

对 Kubernetes 1.5和以后版本:

apiVersion: storage.k8s.io/v1beta1kind: StorageClassmetadata:  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.yamlstorageclass "gluster-heketi" created

查看StorageClass:

kubectl get storageclassNAME              TYPEgluster-heketi    kubernetes.io/glusterfs

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

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

apiVersion: v1kind: PersistentVolumeClaimmetadata: 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.yamlpersistentvolumeclaim "gluster1" created

查看 PVC:

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

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

kubectl get pvNAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM              REASON    AGEpvc-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: v1kind: Podmetadata:  name: nginx-pod1  labels:    name: nginx-pod1spec:  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.yamlpod "nginx-pod1" created

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

kubectl get pods -o wideNAME                               READY     STATUS    RESTARTS   AGE       IP               NODEnginx-pod1                         1/1       Running   0          9m        10.38.0.0        node1glusterfs-node0-2509304327-vpce1   1/1       Running   0          1d        192.168.10.100   node0glusterfs-node1-3290690057-hhq92   1/1       Running   0          1d        192.168.10.101   node1glusterfs-node2-4072075787-okzjv   1/1       Running   0          1d        192.168.10.102   node2heketi-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$ lsindex.html$ exit

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

curl http://10.38.0.0Hello 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$ lsindex.html$ cat index.html Hello World from GlusterFS!!!

服务的外部访问,参考:

  • 基于Kubernetes的服务网格系统,
  • Nodeport、Loadbalancer和Ingress,
  • Ingress
    • 部署Ingress访问代理与负载均衡器,
    • Nginx ingress安装,
    • nginx-ingress chart,  
    • traefik ingress安装,

转载于:https://my.oschina.net/u/2306127/blog/1827417

你可能感兴趣的文章
谈谈Spanner和F1
查看>>
Python图片爬取方法总结
查看>>
leetcode63. Unique Paths II
查看>>
优质的 Vue 开源项目 - 收藏集 - 掘金
查看>>
【翻译】关于回调地狱
查看>>
使用Gradle第一次构建Web应用
查看>>
html的嵌套规则
查看>>
神经病啊!——微信同层播放器接(踩)入(坑)总结
查看>>
详解Session
查看>>
CI类实现session基本用法
查看>>
Kubelet源码分析(一):启动流程分析
查看>>
Ktor 1.0发布:JetBrains推出的Kotlin Web框架
查看>>
杠上Spark、Flink?Kafka为何转型流数据平台
查看>>
Ruby 2.2.0发布,支持增量式垃圾收集和符号的垃圾收集
查看>>
使用Rekit开发可扩展的前端应用
查看>>
android源码分析-深入MessageQueue
查看>>
苹果裁撤自动驾驶项目员工200余人
查看>>
红帽OpenShift总经理谈容器技术需要关注的方向
查看>>
组合使用Laravel和vfsStream测试文件上传
查看>>
微软发布Azure Application Insights for Node.js 1.0版本
查看>>