环境及版本说明:

centso7.6
k8s 1.17
glusterfs 7.1
集群只有三台机器
三台即作为客户端,也作为服务端。

加载内核模块(所有机器都要执行)

modprobe dm_snapshot

modprobe dm_mirror

modprobe dm_thin_pool

添加一个硬盘,或者分一个新的分区(所有机器都要执行)

fdisk /dev/sdb

(不能格式化)

添加gluster的源(所有机器都要执行)

vim /etc/yum.repos.d/Gluster7.1-Base.repo

[centos-gluster]
name=CentOS-$releasever - Gluster 7 (Long Term Maintanance)
baseurl=http://mirror.centos.org/$contentdir/$releasever/storage/$basearch/gluster-7/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

[centos-gluster7-test]
name=CentOS-$releasever - Gluster 7 Testing (Long Term Maintenance)
baseurl=http://buildlogs.centos.org/centos/$releasever/storage/$basearch/gluster-7/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

yum clean all

yum makecache

yum repolist all

安装相应的glusterfs的客户端 命令行工具及fuse等模块(所有机器都要执行)

vim test.txt

glusterfs-api-7.1-1.el7.x86_64
glusterfs-server-7.1-1.el7.x86_64
glusterfs-libs-7.1-1.el7.x86_64
glusterfs-client-xlators-7.1-1.el7.x86_64
glusterfs-fuse-7.1-1.el7.x86_64
glusterfs-7.1-1.el7.x86_64
glusterfs-cli-7.1-1.el7.x86_64

while read line; do yum install -y $line;done <test.txt
yum install -y git

下载git库

mkdir -p /work/deploy/foundataion/
cd /work/deploy/foundataion/
git clone https://github.com/gluster/gluster-kubernetes.git
客户端版本 rpm -qa|grep glusterfs 所有的包的版本要一致,且要和服务端保持一致
cat glusterfs-daemonset.yaml|grep image 看一下这个镜像的版本,运行起来以后exec进入后执
行 gluster --version 查看版本。要和上面yum安装的那些包要保持版本一致。

修改相应yaml文件的版本

从git库克隆下载下来的文件 下面这三个文件需要改deployment和daemonset的 apiversion的版本 为apps/v1

sed -i 's/extensions\/v1beta1/apps\/v1/g' $(grep "v1beta1" -rl .)

deploy-heketi-deployment.yaml
glusterfs-daemonset.yaml
heketi-deployment.yaml

添加相应的选择标签

从git库克隆下载下来的文件 下面这三个文件需要添加相应的selector标签
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建命名空间

kubectl create ns runsdata

修改topology.json,根据自己实际情况修改

编辑topology.json文件,定义好gluster节点

{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostnames": {
              "manage": [
                "172.16.5.150"
              ],
              "storage": [
                "172.16.5.150"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb1"
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "172.16.5.151"
              ],
              "storage": [
                "172.16.5.151"
              ]
            },
            "zone": 2
          },
          "devices": [
            "/dev/sdb1"
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "172.16.5.152"
              ],
              "storage": [
                "172.16.5.152"
              ]
            },
            "zone": 3
          },
          "devices": [
            "/dev/sdb1"
          ]
        }
      ]
    }
  ]
}

提前把镜像拉好(每台机器都提前拉好)

docker pull gluster/gluster-centos:latest

docker pull heketi/heketi:dev

脚本修改

由于新版本kubectl get pod 没有–show-all选项了,首先要修改gk-deploy脚本,把 C L I g e t p o d − − n o − h e a d e r s − − s h o w − a l l − − s e l e c t o r = " h e k e t i " 改 成 {CLI} get pod --no-headers --show-all --selector="heketi"改成 CLIgetpodnoheadersshowallselector="heketi"{CLI} get pod --no-headers -n ${NAMESPACES} --selector=“heketi” 这个脚本里面的所有带有–show-all都要删除。

并且修改heketi.json.template中填写相应的key

"admin" : {
		"key" : "runsdata-gf-admin"
},
"_user" : "User only has access to /volumes endpoint",
"user" : {
		"key" : "runsdata-gf-user"
}

把下面的命令放到run_deploy.sh 里面方便执行

#!/bin/bash
./gk-deploy -g --admin-key runsdata-gf-admin --user-key runsdata-fs-user -n runsdata -y

上面脚本里面的命名空间用户和key需要和上面创建的命名空间以及template文件中设置的要对应
chmod +x run_deploy.sh
./run_deploy.sh

如果上面的过程中有报错,需要重来,需要按下面的步骤做完后重新执行脚本

k8s master执行

kubectl delete -f . 
kubectl delete serviceaccount heketi-service-account -n runsdata
kubectl delete clusterrolebindings heketi-sa-view
kubectl delete secret  heketi-config-secret -n runsdata
kubectl delete  endpoints heketi-storage-endpoints  -n runsdata
kubectl delete services heketi-storage-endpoints -n runsdata
kubectl delete ns runsdata

并且删除每个节点上已经打好的标签:kubectl label nodes 172.16.5.x storagenode-
rm -rf /var/lib/heketi/ (每台机器都要删除)
rm -rf /var/lib/glusterd/ (每台机器都要删除)

上面这些步骤做完了才可以进行下面的vg删除,不然vg会自动恢复
vgs
vgremove xxxx 一路确认按y
然后重新创建命名空间,重新执行run_deploy.sh脚本

最终结果

踩了无穷无尽的坑,终于见到了下面这个结果。泪奔
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐