簡介
在上一篇《獨立部署GlusterFS+Heketi實現Kubernetes共享存儲》中,我們說明了如何手動部署GlusterFS+Heketi來提供Kubernetes的共享存儲。
然而,因為Heketi無法集群部署,所以這種部署方式中,Heketi是一個單點。要盡可能的消除這個單點,一種方式是直接將Heketi部署到Kubernetes集群,復用Deployment的特性來確保heketi容器可用。
Gluster-Kubernetes
其實如果想直接將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 | ubuntu16.04 | 192.168.75.176 | k8s-node,glusterfs |
ops-k8s-177 | ubuntu16.04 | 192.168.75.177 | k8s-node,glusterfs |
ops-k8s-178 | ubuntu16.04 | 192.168.175.178 | k8s-node,glusterfs |
下載相關文件
其實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
在上面下載的文件中,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 server端
部署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 client
需要說明的是,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共享存儲》