天天看點

在Kubernetes中部署GlusterFS+Heketi

目錄

  • 簡介
  • Gluster-Kubernetes
  • 部署
    • 環境準備
    • 下載下傳相關檔案
    • 部署glusterfs
    • 部署heketi server端
    • 配置heketi client

在上一篇《獨立部署GlusterFS+Heketi實作Kubernetes共享存儲》中,我們說明了如何手動部署GlusterFS+Heketi來提供Kubernetes的共享存儲。

然而,因為Heketi無法叢集部署,是以這種部署方式中,Heketi是一個單點。要盡可能的消除這個單點,一種方式是直接将Heketi部署到Kubernetes叢集,複用Deployment的特性來確定heketi容器可用。

其實如果想直接将heketi和glusterfs直接部署到kubernetes中,已經有開源軟體幫我們做了這些事情。這就是gluster-kuberntes項目。

但是我們這篇文檔并不打算展開來說Gluster-Kubernetes項目,如果對該項目有興趣,可以自行查閱相關文檔。本篇文檔将通過手動在kubernetes叢集中部署一個Glusterfs+Heketi來展示其是如何在kubernetes中運作的。

主機名 系統 ip位址 角色
ops-k8s-175 ubuntu16.04 192.168.75.175 k8s-node,glusterfs
ops-k8s-176 192.168.75.176
ops-k8s-177 192.168.75.177
ops-k8s-178 192.168.175.178

其實heketi官方在其源碼包及其heketi-client的二進制包中都包含了将glusterfs及heketi部署到kubernetes的相關示例檔案。github上位址如下:https://github.com/heketi/heketi/tree/master/extras/kubernetes

我們可以直接将其全部下載下傳到本地:

wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/glusterfs-daemonset.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-bootstrap.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-deployment.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-service-account.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-start.sh
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/topology-sample.json
           

在上面下載下傳的檔案中,glusterfs-daemonset.json就是用于部署glusterfs的配置檔案,将glusterfs作為daemonset的方式運作。可以通過将指定

stoargenode=glusterfs

标簽來選擇用于部署glusterfs的節點:

kubectl label node 192.168.75.175 storagenode=glusterfs
kubectl label node 192.168.75.176 storagenode=glusterfs
kubectl label node 192.168.75.177 storagenode=glusterfs
kubectl label node 192.168.75.178 storagenode=glusterfs
           

修改glusterfs-daemonset.json使用的image為

gluster/gluster-centos:gluster4u0_centos7

,然後執行該json檔案:

kubectl create -f glusterfs-daemonset.json
           

即可完成glusterfs部署

部署heketi之前,需要先為heketi建立serviceaccount:

kubectl create -f heketi-service-account.json
           

然後為該serviceaccount授權,為其綁定相應的權限來控制gluster的pod,執行如下操作:

kubectl create clusterrolebinding heketi-gluster-admin --clusterrole=edit --serviceaccount=default:heketi-service-account

           

接着,建立一個Kubernetes secret來儲存我們Heketi執行個體的配置。必須将配置檔案的執行程式設定為 kubernetes才能讓Heketi server控制gluster pod。

heketi.json的配置修改如下:

......
#打開認證
  "use_auth": true,
......
#修改admin使用者的key
      "key": "adminkey"
......
#修改執行插件為kubernetes
    "executor": "kubernetes",
......
#備份heketi資料庫
    "backup_db_to_kube_secret": true
           

執行如下操作,将heketi.json建立為kubernetes的secret:

kubectl create secret generic heketi-config-secret --from-file=./heketi.json
           

接着部署heketi的運作容器,配置檔案為heketi-bootstrap.json,需要修改image為

heketi/heketi:7

kubectl create -f heketi-bootstrap.json
           

通過建立ingress的方式将heketi暴露出來:

# cat heketi.ingress.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
  name: heketi
spec:
  rules:
  - host: heketi.breezey.io
    http:
      paths:
      - path: /
        backend:
          serviceName: deploy-heketi
          servicePort: 8080
          
          
# kubectl create -f hekti.ingress.yaml
           

至此,完成heketi server端部署

需要說明的是,heketi的用戶端版本需要與server端對應,server端我們使用的是7.0,是以用戶端也需要下載下傳7.0版本:

wget https://github.com/heketi/heketi/releases/download/v7.0.0/heketi-client-v7.0.0.linux.amd64.tar.gz
           

修改topology-sample.json檔案,如下:

{
    "clusters": [
        {
            "nodes": [
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "192.168.75.175"
                            ],
                            "storage": [
                                "192.168.75.175"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vda2"
                    ]
                },
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "192.168.75.176"
                            ],
                            "storage": [
                                "192.168.75.176"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vda2"
                    ]
                },
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "192.168.75.177"
                            ],
                            "storage": [
                                "192.168.75.177"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vda2"
                    ]
                },
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "192.168.75.178"
                            ],
                            "storage": [
                                "192.168.75.178"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vda2"
                    ]
                }               
            ]
        }
    ]
}
           

建立叢集:

heketi-cli  topology load --json topology-sample.json

           

至此,完成了glusterfs和heketi在kubernetes中的部署,具體的使用可參考《獨立部署GlusterFS+Heketi實作Kubernetes共享存儲》

繼續閱讀