glusterfs中部署mysql_Kubernetes 基于GlusterFS的动态存储管理StorageClass

说明

最近由于需要部署有状态服务,没有云环境的支持,不能很好的通过cloud provider调用云磁盘EBS,所以在node节点部署了一套glusterFS分布式文件存储系统,用来提供非结构化数据存储,存储图片,大文件等等.

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

heketi:提供基于RESTful接口管理glusterfs的功能,可以方便的创建集群管理glusterfs的node,device,volume;与k8s结合可以创建动态的PV,扩展glusterfs存储的动态管理功能。主要用来管理glusterFS volume的生命周期,初始化时候就要分配好裸磁盘(未格式化)设备.

注意事项

安装Glusterfs客户端:每个kubernetes集群的节点需要安装gulsterfs的客户端,如glusterfs-cli,glusterfs-fuse.主要用于在每个node节点挂载volume。

加载内核模块:每个kubernetes集群的节点运行modprobe dm_thin_pool,加载内核模块。

高可用(至少三个节点):至少需要节点用来部署glusterfs集群,并且这3个节点每个节点需要至少一个空余的磁盘。

基础设施要求:

正在运行的Kubernetes集群,至少有三个node节点,每个节点至少有一个可用的裸块设备(如EBS卷或本地磁盘,就是没有格式化的).

用于运行GlusterFS节点必须为GlusterFS通信打开相应的端口(如果开启了防火墙的情况下,没开防火墙就不需要这些操作)。在每个节点上运行以下命令

$ sudo iptables -N heketi

$ sudo iptables -A heketi -p tcp -m state --state NEW -m tcp --dport 24007 -j $ sudo ACCEPT

$ sudo iptables -A heketi -p tcp -m state --state NEW -m tcp --dport 24008 -j ACCEPT

$ sudo iptables -A heketi -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT

$ sudo iptables -A heketi -p tcp -m state --state NEW -m multiport --dports 49152:49251 -j ACCEPT

$ sudo service iptables save

Heketi安装

Heketi是由golang编写,直接静态编译运行二进制即可也可以通过yum安装以及docker部署,主要会产生db文件存储cluster、node、device、volume等信息。

#/bin/bash

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

tar xzf heketi-v8.0.0.linux.amd64.tar.gz

mkdir -pv /data/heketi/{bin,conf,data}

cp heketi/heketi.json /data/heketi/conf/

cp heketi/{heketi,heketi-cli} /data/heketi/bin/

mv heketi-v8.0.0.linux.amd64.tar.gz /tmp/

创建ssh-key

我们glusterFS部署在k8s集群外,所以heketi通过ssh管理glusterFS。需要创建免秘钥登陆到所有glusterFS节点。

$ sudo ssh-keygen -f /data/heketi/conf/heketi_key -t rsa -N ''

# 将公钥放到所有GlusterFS节点

$ sudo ssh-copy-id -i /data/heketi/conf/heketi_key.pub root@node1

$ ...

配置文件修改

{

"_port_comment": "Heketi Server Port Number",

"port": "18080",

"_use_auth": "Enable JWT authorization. Please enable for deployment",

# 开启认证

"use_auth": true,

"_jwt": "Private keys for access",

"jwt": {

"_admin": "Admin has access to all APIs",

# admin用户的key

"admin": {

"key": "adminkey"

},

"_user": "User only has access to /volumes endpoint",

"user": {

"key": "userkey"

}

},

"_glusterfs_comment": "GlusterFS Configuration",

"glusterfs": {

"_executor_comment": [

"Execute plugin. Possible choices: mock, ssh",

"mock: This setting is used for

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值