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_*

原文地址:https://www.cnblogs.com/fengjian2016/p/9456659.html

时间: 2024-08-02 01:27:09

k8s glusterfs heketi的相关文章

glusterfs + heketi实现kubernetes的共享存储

[toc] 环境 主机名 系统 ip地址 角色 ops-k8s-175 ubuntu16.04 192.168.75.175 k8s-master,glusterfs,heketi 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

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

1,准备工作 1.1 硬件信息 主机名 IP地址 gfs1 192.168.160.131 gfs2 192.168.160.132 gfs3/heketi 192.168.160.133 20G 的裸盘 /dev/sdb Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 byt

[k8s]ubuntu18 + Heketi + Glsuterfs的独立部署

关于ubuntu server 18 上部署glusterfs和heketi的文章网上有很多了,看起来都很顺利,但是我在部署的时候偏偏遇到了很多的问题, 记录一下. 环境:Ubuntu Server 18.04    glusterfs-3.13 heketi-v9 heketi-client-v9 1.使用sudo apt-get install glusterfs-server 安装成功但是启动失败 关于这个问题我也是醉了,使用了ubuntu server 18自带源的3.13版本和官方的3

kubernetes存储之GlusterFS

目录 1.glusterfs概述 1.1.glusterfs简介 1.2.glusterfs特点 1.3.glusterfs卷的模式 2.heketi概述 3.部署heketi+glusterfs 3.1.准备工作 3.2.创建glusterfs集群 3.3.创建heketi服务 3.4.创建gfs集群 4.创建storageclass 6.分析k8s通过heketi创建pv及pvc的过程 7.测试数据 8.测试deployment 1.glusterfs概述 1.1.glusterfs简介 g

20.Kubernetes共享存储

Kubermetes对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后,仍然可以使用之前的数据.不过,存储资源和计算资源(CPU/内存)的管理方式完全不同.为了能够屏蔽底层存储实现的细节,让用户方便使用,同时能让管理员方便管理, Kubernetes从v1.0版本就引入PersistentVolume和PersistentVolumeClaim两个资源对象来

kubernetes实战(九):k8s集群动态存储管理GlusterFS及容器化GlusterFS扩容

1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [[email protected] ~]# kubectl label node k8s-node01 storagenode=glusterfs node/k8s-node01 labeled [[email protected]-master01 ~]# kubectl label node k8s-no

k8s使用Glusterfs动态生成pv

一.环境介绍 [[email protected] ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.31.250.152 k8s-m172.31.250.153 node1172.31.250.154 node

k8s附加组件之存储-glusterfs

k8s附加组件之存储-glusterfs 2018/1/16 部署 glusterfs 集群 初始化 glusterfs 集群 创建 glusterfs 卷,用于保存数据 不做特别说明的,都在 67 上操作 集群节点 10.10.9.67 10.10.9.68 10.10.9.69 初始化 glusterfs 集群 ~]# yum install centos-release-gluster310 -y ~]# yum install glusterfs-server -y ~]# yum in

kubernetes中部署Heketi和GlusterFS(二)

kubernetes中部署Heketi和GlusterFS(二)在上一节中,Heketi的部署方式还不能用于生产环境,因为Heketi Pod的数据并没有持久化,容易导致heketi的数据丢失,Heketi的数据保存在/var/lib/heketi/heketi.db文件中,因此需要把此目录挂载到GlusterFS分布式存储中. 按照上一节的步骤,执行heketi-cli topology load --json=topology-sample.json $ echo $HEKETI_CLI_S