一、前言及环境

  在实践kubernetes的StateFulSet及各种需要持久存储的组件和功能时,通常会用到pv的动态供给,这就需要用到支持此类功能的存储系统了。在各类支持pv动态供给的存储系统中,GlusterFS的设定比较简单,且数据安全性比较有保障,相较于ceph和NFS。

环境(gluster-server之间互信):

二、部署GlusterFS

1.分别在三个节点上安装glusterfs-server程序包,并启动服务
[root@gluster-server01 ~]# yum clean all && yum makecache fast
[root@gluster-server01 ~]# yum install centos-release-gluster -y
[root@gluster-server01 ~]# yum --enablerepo=centos-gluster*-test install glusterfs-server -y
[root@gluster-server01 ~]# systemctl enable glusterd && systemctl start glusterd
[root@gluster-server01 ~]# systemctl status glusterd #确保服务器启动成功

#其他两个节点相同操作

2.在任意一节点发现其他节点,组成GlusterFS集群
[root@gluster-server01 ~]# gluster peer probe gluster-server02
peer probe: success.
[root@gluster-server01 ~]# gluster peer probe gluster-server03
peer probe: success.
[root@gluster-server01 ~]# gluster peer status
Number of Peers: Hostname: gluster-server02
Uuid: 82a98899-550b-466c-80f3-c56b85059e9a
State: Peer in Cluster (Connected) Hostname: gluster-server03
Uuid: 9fdb08a3-b5ca-4e93--d49e737f92e8
State: Peer in Cluster (Connected)

三、部署Heketi(gluster-server01上)

Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期。 通过Heketi,就可以像使用OpenStack Manila,Kubernetes和OpenShift一样申请可以动态配置GlusterFS卷。Heketi会动态在集群内选择bricks构建所需的volumes,这样以确保数据的副本会分散到集群不同的故障域内。同时Heketi还支持任意数量的ClusterFS集群,以保证接入的云服务器不局限于单个GlusterFS集群。
1.安装Heketi服务
[root@gluster-server01 ~]# yum install heketi heketi-client  -y
2.配置heketi用户能够基于SSH秘钥认证的方式连接至GlusterFS集群各节点
[root@gluster-server01 ~]# ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''
[root@gluster-server01 ~]# chown heketi:heketi /etc/heketi/heketi*
[root@gluster-server01 ~]# for host in {..};do ssh-copy-id -i /etc/heketi/heketi_key.pub root@gluster-server${host} done
3.heketi的主配置文件/etc/heketi/heketi.json,定义服务监听的端口、认证及连接Gluster存储集群的方式
[root@gluster-server01 ~]# cp /etc/heketi/heketi.json /etc/heketi/heketi.json-bak
[root@gluster-server01 ~]# cat /etc/heketi/heketi.json
{
"port": "",
"use_auth": false, #若要启动连接Heketi的认证,则需要将user_auth改为true,并在jwt{}段为各用户设置相应的密码,用户名和密码都可以自定义 "jwt": {
"admin": {
"key": "My Secret"
},
"user": {
"key": "My Secret"
}
}, "glusterfs": {
"executor": "ssh",
"sshexec": {
"keyfile": "/etc/heketi/heketi_key",
"user": "root",
"port": "",
"fstab": "/etc/fstab"
},
"db": "/var/lib/heketi/heketi.db",
"loglevel" : "debug"
}
}
4.启动heketi服务
[root@gluster-server01 ~]# systemctl enable heketi && systemctl start heketi
[root@gluster-server01 ~]# systemctl status heketi
5.向heketi发起测试请求
[root@gluster-server01 ~]# curl http://gluster-server01:8080/hello
Hello from Heketi

四、设置Heketi系统拓扑

拓扑信息用于让Heketi确认可以使用的节点、磁盘和集群,管理员必须自行确定节点的故障域。故障域是赋予一组节点的整数值,这组节点共享相同的交换机、电源或其他任何会导致它们同时失效的组件。管理员必须确认哪些节点构成一个集群,Heketi使用这些信息来确保跨故障域中创建副本,从而提供数据冗余能力,Heketi支持多个Gluster存储集群
1、使用客户端加载预定义的集群拓扑(注意客户端的版本要与服务端保持一致)

示例:根据当前Gluster集群的实际环境将gluster-server01、gluster-server02、gluster-server03三个节点定义在同一个集群中,并指明各节点用于提供存储的设备

[root@gluster-server01 heketi]# cat topolgy_demo.json
{
"clusters": [
{
"nodes": [
{
"node": {
"hostnames": {
"manage": [
"192.168.1.107"
],
"storage": [
"192.168.1.107"
]
},
"zone":
},
"devices": [
"/dev/sdb"
]
}, { "node": {
"hostnames": {
"manage": [
"192.168.1.108"
],
"storage": [
"192.168.1.108"
]
},
"zone":
},
"devices": [
"/dev/sdb"
]
},
{ "node": {
"hostnames": {
"manage": [
"192.168.1.109"
],
"storage": [
"192.168.1.109"
]
},
"zone":
},
"devices": [
"/dev/sdb"
]
}
]
}
]
}

加载拓扑信息,并添加各节点生成的随机ID号

[root@gluster-server01 heketi]# echo "export HEKETI_CLI_SERVER=http://gluster-server01:8080" > /etc/profile.d/heketi.sh
[root@gluster-server01 heketi]# source /etc/profile.d/heketi.sh
[root@gluster-server01 heketi]# echo $HEKETI_CLI_SERVER
http://gluster-server01:8080
[root@gluster-server01 heketi]# heketi-cli topology load --json=topolgy_demo.json
Creating cluster ... ID: 34be103e76c2254779d3c0dbd029acbd
Allowing file volumes on cluster.
Allowing block volumes on cluster.
Creating node 192.168.1.107 ... ID: 389b66793f41ed74ab30109e8d1faf85
Adding device /dev/sdb ... OK
Creating node 192.168.1.108 ... ID: d3bffc39419abfe1a04d2c235f9720f3
Adding device /dev/sdb ... OK
Creating node 192.168.1.109 ... ID: 45b7db6cd1cb0405f07ac634a82b9fc9
Adding device /dev/sdb ... OK
2.根据生成的随机Cluster ID号查看集群状态信息
[root@gluster-server01 heketi]# heketi-cli cluster info 34be103e76c2254779d3c0dbd029acbd  #注意是第一行的cluster ID
Cluster id: 34be103e76c2254779d3c0dbd029acbd
Nodes:
389b66793f41ed74ab30109e8d1faf85
45b7db6cd1cb0405f07ac634a82b9fc9
d3bffc39419abfe1a04d2c235f9720f3
Volumes: Block: true File: true
3.创建一个测试使用的存储卷
[root@gluster-server01 heketi]# heketi-cli volume create --size=
Name: vol_9f2dde345a9b7566f8134c3952251d7a
Size:
Volume Id: 9f2dde345a9b7566f8134c3952251d7a
Cluster Id: 34be103e76c2254779d3c0dbd029acbd
Mount: 192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a #客户端挂载的地址
Mount Options: backup-volfile-servers=192.168.1.109,192.168.1.108
Block: false
Free Size:
Reserved Size:
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distributed+Replica:
4.存储客户端安装glusterfs客户端程序并挂载测试存储卷(如果有k8s集群,也可以使用k8s来测试)
[root@gluster-client01 ~]# yum clean all && yum makecache fast
[root@gluster-client01 ~]# yum install centos-release-gluster -y
[root@gluster-client01 ~]# yum --enablerepo=centos-gluster*-test install glusterfs glusterfs-fuse -y
[root@gluster-client01 ~]# mount -t glusterfs 192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a /mnt #创建volume信息中的Mount信息
[root@gluster-client01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G .0G 15G % /
devtmpfs 330M 330M % /dev
tmpfs 341M 341M % /dev/shm
tmpfs 341M 4.8M 336M % /run
tmpfs 341M 341M % /sys/fs/cgroup
/dev/sda1 1014M 139M 876M % /boot
tmpfs 69M 69M % /run/user/
192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a .0G 84M .0G % /mnt
5.测试完成删除存储卷命令
[root@gluster-server01 heketi]# heketi-cli volume delete  9f2dde345a9b7566f8134c3952251d7a  #创建信息中的Volume Id

部署GlusterFS及Heketi的更多相关文章

  1. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

  2. 独立部署GlusterFS+Heketi实现Kubernetes共享存储

    目录 环境 glusterfs配置 安装 测试 heketi配置 部署 简介 修改heketi配置文件 配置ssh密钥 启动heketi 生产案例 heketi添加glusterfs 添加cluste ...

  3. CentOS 7.6 部署 GlusterFS 分布式存储系统

    文章目录 GlusterFS简介 环境介绍 开始GlusterFS部署 配置hosts解析 配置GlusterFS 创建文件系统 安装GlusterFS 启动GlusterFS 将节点加入到主机池 创 ...

  4. CentOS 6 部署GlusterFS

    首先需要关闭CentOS的防火墙和selinux,否则glusterfs将可能无法正常工作. /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着. /etc/in ...

  5. Ubuntu Server 12.04下部署glusterfs

    1.安装环境 Linux:Ubuntuserver 12.04.1 LTS 64bit 2台 分布式文件系统:Gluster 测试环境:一台作文件服务器端(192.168.56.133),一台作客户端 ...

  6. glusterfs+heketi为k8s提供共享存储

    背景 近来在研究k8s,学习到pv.pvc .storageclass的时候,自己捣腾的时候使用nfs手工提供pv的方式,看到官方文档大量文档都是使用storageclass来定义一个后端存储服务, ...

  7. 附009.Kubernetes永久存储之GlusterFS独立部署

    一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...

  8. 附010.Kubernetes永久存储之GlusterFS超融合部署

    一 前期准备 1.1 基础知识 在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC--&g ...

  9. kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群

    1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@ ...

随机推荐

  1. ccf-炉石传说-201609-3

    大概是CCF 第三题比较简洁的一道题吧 尽量设计好一个数据结构: node t[2][10]: 存双方的英雄和随从 int    num[2]: 存隋朝的数量 用p来实现双方的切换,因为有统一 的接口 ...

  2. Codeforces1056E.Check Transcription(枚举+Hash)

    题目链接:传送门 题目: E. Check Transcription time limit per test seconds memory limit per test megabytes inpu ...

  3. eclipse中js报错简单快捷的解决方式

    eclipse中对正确的js文件报错十分常见,我的项目中只要是以.js结尾的必会报错,作为一名小小的程序员,看到“满江红”甚是烦躁!今天就给大家分享一个方便又快捷的解决方案. 瞄准被报错的js文件点鼠 ...

  4. javascript第一个作业之网页计算器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. UT源码105032014093

    需求描述: 设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Ce ...

  6. 20164318 毛瀚逸 Exp4 恶意代码分析

    ---恢复内容开始--- 1 关键内容 系统运行监控 (1)使用计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述分析结果. (2)安装配置sys ...

  7. robotframework之去除空格、去掉前面的0、增加空格换行符的方法,两个字符之间的拼接

    1.去除空格 A)若需要去除两个拼接字符之间的空格,可以使用robotframework中的关键词Catenate,需要注意的是SEPARATOR=一定需要大写 B)若在一个字符串中存在空格,且需要去 ...

  8. C语言 基础

    内存的定义 在学习python的时候 了解过内存的管理机制,例如引用计数,垃圾回收,小内存池的概念. 但是并不了解内存究竟是个什么东西?不了解内存的实际存储方式. Mac OS Mojave 处理器 ...

  9. java-使用icepdf实现pdf转换成png

    下载icepdf的架包,并导入项目中,这里用到4个,如下: /** * 本地pdf文件转png */ public static int pdf2pngByFile(String target){ S ...

  10. 【凡尘】---react-redux---【react】

    一.Redux与组件 react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构 React-Redux提供connect方法,用于从UI组件生成容器组件,conn ...