1. 程式人生 > >Kubernetes中掛載GlusterFS的volume

Kubernetes中掛載GlusterFS的volume

這裡採用最簡單的方法,掛載宿主系統的GlusterFS卷給Kubernetes中的pod使用。

1、安裝GlusterFS

Kubernetes可以直接掛載多種檔案系統,其中包括GlusterFS(https://kubernetes.io/docs/concepts/storage/volumes/#glusterfs)。

關於GlusterFS更多資訊,參見:

2、建立終結點

建立(endpoint.yaml),可以聚合多個節點的GlusterFS服務。

apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-cluster
  namespace: default
subsets:
- addresses:
  - ip: 10.1.1.184
  ports:
  - port: 1000
    protocol: TCP

3、建立服務點

建立(service.yaml),將GlusterFS通過Kubernetes服務提供訪問。

apiVersion: v1
kind: Service
metadata:
  name: glusterfs-cluster
  namespace: default
spec:
  ports:
  - port: 1000
    protocol: TCP
    targetPort: 1000
  sessionAffinity: None
  type: ClusterIP

4、建立使用者

建立(pod.json),將GlusterFS的Volume掛載到pod中。

{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "glusterfs"
    },
    "spec": {
        "containers": [
            {
                "name": "glusterfs",
                "image": "nginx",
                "volumeMounts": [
                    {
                        "mountPath": "/mnt/glusterfs",
                        "name": "glusterfsvol"
                    }
                ]
            }
        ],
        "volumes": [
            {
                "name": "glusterfsvol",
                "glusterfs": {
                    "endpoints": "glusterfs-cluster",
                    "path": "gvx",
                    "readOnly": true
                }
            }
        ]
    }
}

5、建立PV

將GlusterFS的卷對映為Kbernetes的持久卷(pv),從而提供統一的訪問方法。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster-dev-volume
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "gvx"
    readOnly: false

6、建立PVC

通過pvc(持久卷申請),Kubernetes可以自動在可用資源分配持久卷。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: glusterfs-nginx
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi

7、測試持久卷

建立 pod-nginx.yaml,使用pvc來定義儲存。跟上面2中的用法有點不同,2中使用直接掛載volume卷的方法,可移植性不如使用pvc這個統一的CSI(容器儲存藉口)標準規範介面。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
           - containerPort: 80
        volumeMounts:
            - name: gluster-dev-volume
              mountPath: "/usr/share/nginx/html"
         volumes:
        - name: gluster-dev-volume
          persistentVolumeClaim:
            claimName: glusterfs-nginx

8、執行和獲取狀態資訊

按下面的方法執行命令,獲取狀態資訊。

$ kubectl apply -f glusterfs-endpoints.json
$ kubectl get ep

$ kubectl apply -f glusterfs-service.json
$ kubectl get svc# 檢視測試 Pod$ kubectl apply -f glusterfs-pod.json
$ kubectl get pods 
$ kubectl describe pods/glusterfs
$ kubectl exec glusterfs -- mount | grep gluster

除了上面的方法之外,還有其它的在Kubernetes中使用Gluster的方法,如使用heketi(Heketi使用hostnet和Volume對映到宿主機的Gluster服務,採用Daemonset方式進行節點管理)。

此外,最新的Gluster提供原生支援Kubernetes的方法,不過目前還處於早期階段,暫時還不具備可用性。

更多: