在Kubernetes中部署GlusterFS+Heketi

摘要:
为了尽可能消除这一点,一种方法是直接将Heketi部署到Kubernetes集群,并重用部署特性以确保Heketi容器可用。事实上,如果Gluster Kubernetes想要直接将Heketi和Glusterfs部署到Kubernete,开源软件已经为我们做了这些事情。本文档将展示如何在kubernetes集群中手动部署Glusterfs+Heketi,从而在kuberetes中运行Glusterf+Heketin。配置文件的执行器必须设置为kubernetes,以允许Heketiserver控制glasspod。
目录
简介

在上一篇《独立部署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-175ubuntu16.04192.168.75.175k8s-node,glusterfs
ops-k8s-176ubuntu16.04192.168.75.176k8s-node,glusterfs
ops-k8s-177ubuntu16.04192.168.75.177k8s-node,glusterfs
ops-k8s-178ubuntu16.04192.168.175.178k8s-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共享存储》

免责声明:文章转载自《在Kubernetes中部署GlusterFS+Heketi》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql死锁问题分析freemarker学习二--日期格式化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NodeJS + Socket.IO 最终版

服务器端 //socket.io var app = require("express")(); var http = require("http").Server(app); var io = require("socket.io")(http); //couchbase var couchbase = require("couchbase"); va...

nodejs 异步之 Timer &Tick; 篇

nodejs 异步之 Timer &Tick; 篇 - CNode nodejs 异步之 Timer &Tick; 篇 Timer: 在前端开发中,我们 经常会使用setTimeout 函数组,这组函数其实不属于语言标准,他们只是extentsion ,在浏览器中,他们属于 BOM(浏览器对象扩展),即它的确切定义为:window....

nodejs生成UID(唯一标识符)——node-uuid模块

unique identifier 惟一标识符 -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联。 node-uuid模块很好的提供了这个功能。 https://github.com/kelektiv/node-uuid 使用起来很简单,两种: 1、uuid.v1(); -->基于时间戳生成 (time...

深入浅出Node.js(上)

(一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹。从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定。InfoQ一直在关注Node.js的发展,在今年的两次...

Laravel-mix 中文文档

镜像地址 : https://segmentfault.com/a/1190000015049847原文地址: Laravel Mix Docs   概览   基本示例 larave-mix 是位于webpack顶层的一个简洁的配置层,在 80% 的情况下使用 laravel mix 会使操作变的非常简单。尽管 webpack 非常的强大,但大部分...

Ubuntu安装Node和npm

本文简单介绍在Ubuntu上安装最新版本的node和npm。 本次试验环境是Ubuntu 18.10。 安装nodejs root@ubuntu:~# cat /etc/issue Ubuntu 18.10l root@ubuntu:~# sudo apt install nodejs -y ... 安装npm # sudo apt install...