一 前期准备
1.1 基础知识
在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是:
创建brick-->创建volume-->创建PV-->创建PVC-->Pod挂载PVC
如果要创建多个PV,则需要手动重复执行,可通过Heketi管理glusterfs。
Heketi是用来管理GlusterFS卷的生命周期的,并提供了一个RESTful API接口供Kubernetes调用,因为GlusterFS没有提供API调用的方式,所以我们借助heketi。通过Heketi,Kubernetes可以动态配置GlusterFS卷,Heketi会动态在集群内选择bricks创建所需的volumes,确保数据的副本会分散到集群不同的故障域内,同时Heketi还支持GlusterFS多集群管理,便于管理员对GlusterFS进行操作。
Heketi要求在每个glusterfs节点上配备裸磁盘,用于Heketi创建PV和VG。通过Hekete,Kubernetes中使用PV步骤为:
创建StorageClass-->创建PVC-->Pod挂载PVC
这种方式称为基于StorageClass的动态资源供应。
提示:本实验基于Kubernetes部署glusterfs,同时glusterfs管理组件Heketi也使用Kubernetes部署。
1.2 架构示意
提示:本实验不涉及Kubernetes部署,Kubernetes部署参考001-019。
1.3 相关规划
主机 |
IP |
磁盘 |
备注 |
k8smaster01 |
172.24.8.71 |
Kubernetes master节点 |
|
k8smaster02 |
172.24.8.72 |
Kubernetes master节点 |
|
k8smaster03 |
172.24.8.73 |
Kubernetes master节点 |
|
k8snode01 |
172.24.8.74 |
sdb |
Kubernetes node节点 glusterfs节点 |
k8snode02 |
172.24.8.75 |
sdb |
Kubernetes node节点 glusterfs节点 |
k8snode03 |
172.24.8.76 |
sdb |
Kubernetes node节点 glusterfs节点 |
磁盘规划
k8snode01
|
k8snode02
|
k8snode03
|
|||||||
PV
|
sdb1
|
sdb1
|
sdb1
|
1.4 部署条件
超融合部署需要具有已经部署的Kubernetes集群管理访问权限。如果Kubernetes节点满足以下要求,则可以选择将GlusterFS作为超融合服务部署:
必须至少有三个节点用于glusterfs;
每个节点必须至少连接一个裸磁盘设备,以供heketi使用。这些设备上不得包含任何数据,heketi将会格式化和分区此设备;
每个节点必须打开以下端口才能进行GlusterFS通信:
2222:GlusterFS pod的sshd端口;
24007:GlusterFS守护程序;
24008:GlusterFS管理;
49152——49251:主机上每个卷的每个brick都需要有独立的端口。对于每块新brick,将从49152开始使用一个新端口。建议每台主机的默认范围为49152-49251,也可根据需要进行调整。
必须加载以下内核模块:
dm_snapshot
dm_mirror
dm_thin_pool
对于内核模块,可通过lsmod | grep <name>查看模块是否存在,并modprobe <name>加载给定的模块。
每个节点都要求该mount.glusterfs命令可用。在所有基于Red Hat的操作系统下,此命令由glusterfs-fuse软件包提供。
注意:节点上安装的GlusterFS客户端版本应尽可能接近服务器的版本。要获取已安装的版本,可通过glusterfs --version或kubectl exec <pod> -- glusterfs --version命令查看。
1.5 其他准备
所有节点NTP配置;
所有节点添加相应主机名解析:
1 172.24.8.71 k8smaster01 2 172.24.8.72 k8smaster02 3 172.24.8.73 k8smaster03 4 172.24.8.74 k8snode01 5 172.24.8.75 k8snode02 6 172.24.8.76 k8snode03
注意:若非必要,建议关闭防火墙和SELinux。
二 规划裸设备
2.1 确认磁盘
1 [root@k8snode01 ~]# fdisk /dev/sdb -l #检查sdb是否为裸磁盘
三 安装glusterfs-fuse
3.1 安装相应RPM源
1 [root@k8snode01 ~]# yum -y install centos-release-gluster 2 [root@k8snode01 ~]# yum -y install glusterfs-fuse #安装glusterfs-fuse
提示:k8snode01、k8snode02、k8snode03类似操作,根据1.4要求安装glusterfs-fuse组件;
安装相应源之后,会在/etc/yum.repos.d/目录多出文件CentOS-Storage-common.repo,内容如下:
# CentOS-Storage.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more
# information
[centos-storage-debuginfo]
name=CentOS-$releasever - Storage SIG - debuginfo
baseurl=http://debuginfo.centos.org/$contentdir/$releasever/storage/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
3.2 加载相应模块
1 [root@k8snode01 ~]# cat > /etc/sysconfig/modules/glusterfs.modules <<EOF 2 #!/bin/bash 3 4 for kernel_module in dm_snapshot dm_mirror dm_thin_pool;do 5 /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1 6 if [ \$? -eq 0 ]; then 7 /sbin/modprobe \${kernel_module} 8 fi 9 done; 10 EOF 11 [root@k8snode01 ~]# chm