k8s glusterfs heketi

Posted fengjian2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s glusterfs heketi相关的知识,希望对你有一定的参考价值。

  kubernetes集群上node节点安装glusterfs的服务端集群(DaemonSet方式),并将heketi以deployment的方式部署到kubernetes集群,主要是实现 storageclass

Heketi是一个具有resetful接口的glusterfs管理程序, Heketi提供了一个RESTful管理界面,可用于管理GlusterFS卷的生命周期。借助Heketi,Kubernetes 可以动态地配置GlusterFS卷和任何支持的持久性类型。Heketi将自动确定整个集群的brick位置,确保将brick及其副本放置在不同的故障域中。Heketi还支持任意数量的GlusterFS集群,允许云服务提供网络文件存储,而不受限于单个GlusterFS集群。”

标注:

1.每个node 节点安装 glusterfs 客户端  yum -y  install glusterfs-client

2. 加载内核模块 : modprobe dm_thin_pool

3. 至少要3个节点, 每个节点上必须要一个裸硬盘。

 

glusterfs 和 heketi 在kubernetes 部署

1. 下载heketi 和 heketi-cli

git clone https://github.com/heketi/heketi.git

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

 

2. 进入到 heketi kubernetes 的安装目录

cd /root/heketi/heketi/extras/kubernetes

 

3. 部署 glusterfs daemonset 方式

kubectl create -f glusterfs-daemonset.json

技术分享图片

 



 4. node 节点设置标签

查看标签
kubectl get nodes --show-labels

设置标签
kubectl label node node1 storagenode-glusterfs
kubectl label node node2 storagenode-glusterfs
kubectl label node node3 storagenode-glusterfs
kubectl label node node4 storagenode-glusterfs
kubectl label node node5 storagenode-glusterfs

###删除标签命令####
kubectl label node node5 storagenode-
#######

 

5.创建heketi 服务器账号(serviceaccount)

kubectl create -f heketi-service-account.json

 

6. heketi服务帐户的授权绑定相应的权限来控制gluster的pod

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

 

7.创建一个Kubernetes secret来保存Heketi实例的配置

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

 

8.需要部署一个初始(bootstrap)Pod和一个服务来访问该Pod

技术分享图片

技术分享图片
 

 

使用 bootstrap heketi 服务 是为了  把 heketi  db 放置在 glusterfs卷上。

 

deploy-heketi服务端程序运行后, 我们可以使用heketi-cli 与服务进行通信。测试heketi 服务运行是否正常

[[email protected] kubernetes]# curl  192.168.20.178:31791/hello
Hello from Heketi
[[email protected] kubernetes]#

技术分享图片

 

 

通过拓扑文件,向Heketi提供有关要管理的GlusterFS集群的信息

[[email protected] kubernetes]# cat topology.json 
{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostnames": {
              "manage": [
                "node1"
              ],
              "storage": [
                "192.168.20.174"
              ]
            },
            "zone": 1
          },
          "devices": [
            {
              "name": "/dev/sdb",
              "destroydata": false
            }
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "node2"
              ],
              "storage": [
                "192.168.20.175"
              ]
            },
            "zone": 1
          },
          "devices": [
            {
              "name": "/dev/sdb",
              "destroydata": false
            }
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "node3"
              ],
              "storage": [
                "192.168.20.176"
              ]
            },
            "zone": 1
          },
          "devices": [
            {
              "name": "/dev/sdb",
              "destroydata": false
            }
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "node4"
              ],
              "storage": [
                "192.168.20.177"
              ]
            },
            "zone": 1
          },
          "devices": [
            {
              "name": "/dev/sdb",
              "destroydata": false
            }
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "node5"
              ],
              "storage": [
                "192.168.20.178"
              ]
            },
            "zone": 1
          },
          "devices": [
            {
              "name": "/dev/sdb",
              "destroydata": false
            }
          ]
        }
      ]
    }
  ]
}

 


其实就是glusterfs  添加对端 gluster  peer  status

[[email protected] kubernetes]# /root/heketi/heketi-client/bin/heketi-cli -s  http://192.168.20.178:31791  topology  load --json=topology.json
Creating cluster ... ID: 6a73c32f28af53fc4eda6d5b4c9769bf
    Allowing file volumes on cluster.
    Allowing block volumes on cluster.
    Creating node node1 ... ID: 46bd3a9e2ac7fe3bd80bf5d418cdcf08
        Adding device /dev/sdb ... OK
    Creating node node2 ... ID: e50ab42920c804afd010b8f739f81d1a
        Adding device /dev/sdb ... OK
    Creating node node3 ... ID: 3b5dd4c09c8216be7c5a2d919581891b
        Adding device /dev/sdb ... OK
    Creating node node4 ... ID: b42de16ea1863e7133493876dd93d00e
        Adding device /dev/sdb ... OK
    Creating node node5 ... ID: 47d1de245a14091473cda2626e605f16
        Adding device /dev/sdb ... OK
You have new mail in /var/spool/mail/root

 

使用heketi为其存储其数据库提供一个卷

/root/heketi/heketi-client/bin/heketi-cli -s  http://192.168.20.178:31791  setup-openshift-heketi-storage --image 192.168.200.10/source/heketi/heketi:dev

生成文件 heketi-storage.json

[[email protected] ~]# kubectl create -f heketi-storage.json 
secret/heketi-storage-secret created
endpoints/heketi-storage-endpoints created
service/heketi-storage-endpoints created
job.batch/heketi-storage-copy-job created

技术分享图片

 

heketi-storage-copy-job-c57vd   status 状态是有问题的, 没有关系,继续进行。

 

技术分享图片

 

endpoints 中的 heketi-storage-endpoints 一定要存在,否则 创建 heketi-deployment.json 时会报错

 

 删除bootstrap Heketi实例相关的组件

[[email protected] ~]# kubectl delete all,service,jobs,deployment,secret --selector="deploy-heketi"
pod "deploy-heketi-7bbb8bc596-nkppj" deleted
service "deploy-heketi" deleted
deployment.apps "deploy-heketi" deleted
replicaset.apps "deploy-heketi-7bbb8bc596" deleted
job.batch "heketi-storage-copy-job" deleted
secret "heketi-storage-secret" deleted

 

创建长期使用的Heketi实例(存储持久化的)

[[email protected] kubernetes]# kubectl create -f heketi-deployment.json 
secret/heketi-db-backup created
service/heketi created
deployment.extensions/heketi created

技术分享图片

 

 

 

[[email protected] gluster-storage]# cat  storage-class-slow.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: slow                                   #-------------SC的名字
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://192.168.20.177:31791"       #-------------heketi service的cluster ip 和端口
  restuser: "admin"                            #-------------随便填,因为没有启用鉴权模式
  gidMin: "40000"
  gidMax: "50000"
  volumetype: "replicate:3"                    #-------------申请的默认为3副本模式

 

 

 

 

 

 

 

清理集群

清理有状态服务,清理daemonset部署的 glusterfs集群

技术分享图片

kubectl delete  secret  heketi-config-secret

kubectl delete  clusterrolebinding heketi-gluster-admin

 

 2. 清理node节点gluster文件

1)删除不运行的docker, 其中包括glusterfs
docker ps -a | grep Exited | awk {print $1} | xargs docker rm

(2) 删除/var/lib/glusterd 目录
pkill -9 gluster; rm /var/lib/glusterd/  -rf

(3) 清除vg,pv
[[email protected] ~]# vgremove  vg_ebaa3e7189cabac78a48426a90a14bd9
[[email protected] ~]# pvremove  /dev/sdb

(4) 删除node vg
rm -rf  /dev/vg_*

 

























以上是关于k8s glusterfs heketi的主要内容,如果未能解决你的问题,请参考以下文章

GlusterFS/Heketi 中的最小卷大小

独立部署 GlusterFS+Heketi 实现 Kubernetes / OpenShift 共享存储

GlusteFS 二

GlusterFs卷类型分析及创建使用(结合kubernetes集群分析)

k8s使用glusterfs存储报错type ‘features/utime‘

k8s 对接glusterfs存储