GlusterFS-動態卷快速應用

 

GlusterFS-動態卷快速應用

有了一個 Kubernetes cluster 集羣,以及一個工做的 Heketi Server。下一步咱們將建立一個 NGINX HelloWorld application,使用Kubernetes動態存儲提供機制和Heketi。html

本例子假定你已經熟悉 Kubernetes 和 Kubernetes Persistent Storage 架構模型。node

確認環境變量並收集信息用於後面的步驟

驗證 Heketi REST URL 和 Server IP Address:nginx

$ echo $HEKETI_CLI_SERVER
http://10.42.0.0:8080

缺省狀況下,user_authorization被關閉。若是被打開,你將須要找到 rest user 和 rest user secret key (本例程不適用,任何值均可以工做)。也能夠配置一個 secret 而後傳遞到Gluster dynamic provisioner的credentials,經過StorageClass 參數來進行。git

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。github

Kubernetes中這裏有另外的 StorageClass 參數 (e.g. cluster, GID) 被添加到 Gluster dynamic provisioner。請參閱 GlusterFS Dynamic Provisioning 得到更多的參數設置的信息。web

建立 StorageClass,支持 GlusterFS Dynamic Provisioner

Kuberentes Storage Classes 用於管理和支持Persistent Storage。下面是 Storage Class的例子, 將請求建立一個 5GB 的即時存儲,用於這裏的 HelloWorld 應用。api

對 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:app

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!!!

服務的外部訪問,參考:

相關文章
相關標籤/搜索