云网牛站
所在位置:首页 > Linux云服务器 > 使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

2019-09-18 16:18:37作者:李燕稿源:云网牛站

本文介绍使用GlusterFS和Heketi为您的Kubernetes/OpenShift集群设置持久卷动态配置。 GlusterFS是一个免费的开源可扩展网络文件系统,适用于云存储和媒体流等数据密集型任务。它使用常见的现成硬件,在我的设置中,我选择将GlusterFS部署为Kubernetes节点上的超融合服务,这将释放Kubernetes中动态配置的持久性GlusterFS卷的强大功能。我们将使用gluster-kubernetes项目,该项目为Kubernetes管理员提供了一种机制,可以将GlusterFS作为本机存储服务轻松部署到现有的Kubernetes集群上。在这里,GlusterFS像Kubernetes中的任何其他应用程序一样进行管理和编排。heketi是GlusterFS的RESTful卷管理界面,它允许您使用API​​创建和管理Gluster卷。

 

基础设施要求

以下是设置的基本要求。

1、必须至少有三个节点。

2、每个节点必须至少有一个原始块设备连接供heketi使用。

3、每个节点必须为GlusterFS通信打开以下端口:GlusterFS pod的sshd为2222,GlusterFS Daemon为24007,GlusterFS管理为24008,主机上创建的每个brick为49152至49251。

4、必须加载以下内核模块:

dm_snapshot

dm_mirror

dm_thin_pool

5、每个节点都要求mount.glusterfs命令可用。

6、安装在节点上的GlusterFS客户端版本应尽可能接近服务器版本。

 

一、设置Kubernetes/OpenShift集群参考文章

此设置假设您有一个正在运行的Kubernetes/OpenShift(OKD)群集。参考:使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

 

二、在所有节点上安装glusterfs/配置防火墙

如果您使用的是基于Red Hat的Linux发行版,请安装glusterfs-fuse软件包,该软件包提供了mount.glusterfs命令:

sudo yum -y install glusterfs-fuse

对于Ubuntu/Debian:

sudo apt-get install glusterfs-client

加载所需的所有内核模块

for i in dm_snapshot dm_mirror dm_thin_pool; do sudo modprobe $i; done

检查模块是否已加载:

$ sudo lsmod |  egrep 'dm_snapshot|dm_mirror|dm_thin_pool'

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

检查安装的版本:

$ glusterfs --version

glusterfs 3.12.2

打开防火墙上所需的端口,针对CentOS/RHEL/Fedora:

for i in 2222 24007 24008 49152-49251; do

sudo firewall-cmd --add-port=${i}/tcp --permanent

done

sudo firewall-cmd --reload

 

三、检查Kubernetes群集状态

通过确保群集中的所有节点都已就绪来验证Kubernetes安装:

$ kubectl  get nodes

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

要查看正在运行的Kubernetes的确切版本,请使用:

$ kubectl version

Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

 

四、将辅助原始磁盘添加到节点

每个节点必须至少有一个原始块设备连接供heketi使用,我已经为我的k8s节点添加了2个50gb的虚拟磁盘:

[worker01 ~]$ lsblk 

[worker02 ~]$ lsblk 

[worker03 ~]$ lsblk 

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

 

五、创建拓扑文件

您必须提供GlusterFS集群拓扑信息,该信息描述GlusterFS集群中存在的节点以及附加到它们的块设备以供heketi使用。

由于我在Kubernetes主节点上运行所有操作,让我们从Github拉出gluster-kubernetes:

sudo yum -y install git vim

git clone https://github.com/gluster/gluster-kubernetes.git

复制和编辑拓扑信息模板:

cd gluster-kubernetes/deploy/

cp topology.json.sample topology.json

这就是我的配置:

{

"clusters": [

{

"nodes": [

{

"node": {

"hostnames": {

"manage": [

"worker01"

],

"storage": [

"10.10.1.193"

]

},

"zone": 1

},

"devices": [

"/dev/vdc",

"/dev/vdd"

]

},

{

"node": {

"hostnames": {

"manage": [

"worker02"

],

"storage": [

"10.10.1.167"

]

},

"zone": 1

},

"devices": [

"/dev/vdc",

"/dev/vdd"

]

},

{

"node": {

"hostnames": {

"manage": [

"worker03"

],

"storage": [

"10.10.1.178"

]

},

"zone": 1

},

"devices": [

"/dev/vdc",

"/dev/vdd"

]

}

]

}

]

}

创建自己的拓扑文件时:

1、确保拓扑文件仅列出了用于heketi的块设备,heketi需要访问整个块设备(例如/dev/vdc,/dev/vdd),它将进行分区和格式化。

2、主机名数组有点误导,manage应该是节点的主机名列表,但存储应该是节点上用于后端存储通信的IP地址列表。

 

六、运行部署脚本

创建拓扑文件后,您就可以从具有Kubernetes集群管理访问权限的计算机上运行gk-deploy脚本,如果未从主节点运行,请将Kubernetes配置文件复制到~/.kube/config。

可用选项:

./gk-deploy -h

常见选项:

-g, --deploy-gluster:在包含brick设备的拓扑中的节点上部署GlusterFS pod。

--ssh-user USER:用于将命令用于GlusterFS节点的用户,非root用户必须在节点上具有sudo权限。默认为'root'。

--user-key USER_KEY:一般heketi用户的密码字符串,这是必需的论点。

-l LOG_FILE, --log-file LOG_FILE:将所有输出保存到指定的文件。

-v, --verbose:详细输出

运行以下命令开始部署GlusterFS/Heketi,用您的键值替换MyUserStrongKey和MyAdminStrongKey:

./gk-deploy -g \

 --user-key MyUserStrongKey \

 --admin-key MyAdminStrongKey \

 -l /tmp/heketi_deployment.log \

 -v topology.json

按Y键接受安装:

Do you wish to proceed with deployment?

[Y]es, [N]o? [Default: Y]: Y

如果部署成功,您应该收到一条消息:

heketi is now running and accessible via http://10.233.108.5:8080

见下面的截图:

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

成功部署后,将自动创建Pod,服务和端点,现在应该安装GlusterFS和heketi并准备好了。

$ kubectl  get deployments

$ kubectl get pods

$ kubectl  get services

$ kubectl get endpoints

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

 

七、安装并使用heketi-cli与GlusterFS进行交互

heketi-cli用于与部署在Kubernetes集群上的GlusterFS进行交互,下载最新版本并将二进制文件放在PATH中:

curl -s https://api.github.com/repos/heketi/heketi/releases/latest \

 | grep browser_download_url \

 | grep linux.amd64 \

 | cut -d '"' -f 4 \

 | wget -qi -

提取下载的存档文件,这将同时包含客户端和服务器:

for i in `ls | grep heketi | grep .tar.gz`; do tar xvf $i; done

将heketi-cli复制到/usr/local/bin目录:

sudo cp ./heketi-client/bin/heketi-cli /usr/local/bin

您应该可以像登录服务器的任何用户一样获得heketi-cli版本:

$ heketi-cli --version

heketi-cli v9.0.0

您可以为heketi-cli设置HEKETI_CLI_SERVER环境变量以直接读取它:

export HEKETI_CLI_SERVER=$(kubectl get svc/heketi --template 'http://{{.spec.clusterIP}}:{{(index .spec.ports 0).port}}')

确认变量值:

$ echo $HEKETI_CLI_SERVER

http://10.233.108.5:8080

查询群集详细信息:

$ heketi-cli cluster list --user admin --secret  MyAdminStrongKey

$ heketi-cli cluster info 88ed1913182f880ab5eb22ca2f904615

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

如果将Heketi admin用户名和密钥保存为环境变量,则无需传递这些选项:

$ export HEKETI_CLI_USER=admin

$ export HEKETI_CLI_KEY=MyAdminStrongKey

$ heketi-cli cluster list

$ heketi-cli cluster info 5c94db92049afc5ec53455d88f55f6bb

$  heketi-cli node list

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

查看拓扑信息:

$ heketi-cli topology info

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

创建StorageClass以进行动态配置:

$ vim gluster-storage-class.yaml 

$ kubectl create -f gluster-storage-class.yaml

$ kubectl  get storageclass

$ kubectl  describe storageclass.storage.k8s.io/glusterfs-storage

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

创建PVC:

$ cat  gluster-pvc.yaml

$ kubectl create -f gluster-pvc.yaml

使用GlusterFS和Heketi设置Kubernetes/OpenShift动态持久卷配置

注:

1、glusterfs-storage是Kubernetes存储类注释和存储类的名称。

2、1Gi是请求的存储量。

 

相关主题

在Ubuntu 18.04/16.04上安装和配置OpenShift Origin(OKD)的方法

精选文章
热门文章