参考文档:https://github.com/gluster/gluster-kubernetes
实验环境:
Kubernetes:v1.12.1
Glusterfs: 3.7.6
OS: Ubuntu 16.04
Docker:18.6.1
详细情况如下图所示:
要求:
1. 至少三个gluster节点:至少需要3个节点用来部署glusterfs集群,并且这3个节点每个节点需要至少一个空余的磁盘。本案例中使用master,worker3,worker4作为gluster集群节点,加入的磁盘及各个节点IP如下:
master: 192.168.0.50 磁盘:/dev/sdb
worker3: 192.168.0.53 磁盘:/dev/sdc
worker4: 192.168.0.54 磁盘:/dev/sdg
删除所有分区(Each node must have at least one raw block device attached (like an EBS Volume or a local disk) for use by heketi. These devices must not have any data on them, as they will be formatted and partitioned by heketi.):
#master
sudo wipefs -a /dev/sdb
#worker3
sudo wipefs -a /dev/sdc
#worker4
sudo wipefs -a /dev/sdg
2. 安装Glusterfs客户端:每个gluster集群的节点需要安装gulsterfs的客户端。本案例中,需要在master, worker3,worker4上运行:
sudo apt-get install glusterfs-client
3. 加载内核模块:每个gluster集群的节点加载内核模块dm_thin_pool,dm_mirror,dm_snapshot。本案例中,需要在master, worker3,worker4上运行,执行语句:
sudo modprobe dm_thin_pool
sudo modprobe dm_mirror
sudo modprobe dm_snapshot
4. 开放端口
2222:GlusterFS pod的sshd
24007:Gluster Daemon
24008: GlusterFs 管理
49152-49251 :每个brick可能会用到的port
5. 默认情况下,出于安全原因,集群不会在主服务器master上调度pod。如果您希望能够在主服务器master上调度pod,请运行:(本案例将master作为gluster集群节点,因此需要开放该权限。否则,无需执行下面的语句。)
kubectl taint nodes --all node-role.kubernetes.io/master-
主要步骤:
1. 在master节点,下载gluster-kubernetes, 运行
git clone https://github.com/gluster/gluster-kubernetes.git
该项目提供了自动化安装工具和各种模板。
2. 进入文件夹
cd gluster-kubernetes/deploy
3. 执行
vim kube-templates/glusterfs-daemonset.yaml
修改kube-templates/glusterfs-daemonset.yaml内容,改变了pod存活检查和读取检查部分内容,如下:(如果不执行,会gluster pod会报错!)
注释了- "if command -v /usr/local/bin/status-probe.sh; then /usr/local/bin/status-probe.sh readiness; else systemctl status glusterd.service; fi"
添加:
- "systemctl status glusterd.service"
修改后的结果如下图所示:
修改后的文件如下:
---
kind: Dae