最新消息: PyCharm vs VSCode,哪个更好?
您现在的位置是:群英 > 服务器 > 系统运维 >
Kubernetes中使用GlusterFS如何操作?
CSDN发表于 2020-09-16 17:25 次浏览
如何在Kubernetes中使用GlusterFS?经过小编从事运维多年的经验,以下做出了应用实战,希望能给大家带来帮助!

背景介绍

首先需要大家已经成功搭建好了Kubernetes集群的实验环境,Kubernetes的集群部署请参考自动化部署:https://github.com/unixhot/salt-kubernetes。

想在生产环境里面使用glusterfs做storageclass,本文就可以保证你完成。

【Glusterfs实验环境准备】

      本案例中,实验环境与k8s集群使用同样的主机地址,实际生产案例中请分开部署。三个虚拟机里面各新建一块硬盘,硬盘大小均为10g。

主机ip

主机名

磁盘

挂载点

192.168.56.11

Linux-node1.example.com

/dev/sdb

/gluster_brick1

192.168.56.12

Linux-node2.example.com

/dev/sdb

/gluster_brick1

192.168.56.13

Linux-node3.example.com

/dev/sdb

/gluster_brick1

 

【第一部分:Glusterfs实战】

bb

1.磁盘类型修改

    实际生产案例中大家的磁盘都比较大,先将磁盘类型修改为gpt。这里给大家提供一个生产使用的脚本。

 


  1.  
    #!/bin/bash  
  2.  
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
  3.  
    export PATH  
  4.  
    function main(){
  5.  
    i=3
  6.  
    while [ $i -lt 10 ]                
  7.  
    do
  8.  
    j=`echo $i|awk '{printf "%c",97+$i}'`
  9.  
    parted /dev/sd$j <<FORMAT               
  10.  
    mklabel gpt
  11.  
    yes
  12.  
    mkpart primary 0 -1
  13.  
    ignore
  14.  
    quit
  15.  
    FORMAT
  16.  
    i=$(($i+1))
  17.  
    done
  18.  
    }
  19.  
    main

 

请大家在三台机器上使用fdisk –l查看下新加入硬盘的编号,我这里为/dev/sdb。在三台机器上分别进行如下操作,操作过程按照生产环境来。三台机器的新加磁盘均需要做如下操作。

操作完成后检查新加入的磁盘类型是否为gpt类型。检测命令fdisk -l

2.磁盘格式化并挂载卷

    生产环境在使用的时候存储也进行了自己的规划使用了flashcache做缓存层,大家有兴趣的可以研究下存储,我这边实验环境没有使用flashcache。给大家提供一个格式化和挂载的脚本。

 


  1.  
    function mkfs(){
  2.  
    for i in `seq 1 12`;do
  3.  
    if [ $i -lt 10 ] 
  4.  
    then
  5.  
    mkfs.xfs  -L brick$i -f -i  size=512 /dev/mapper/flash0$i
  6.  
    sleep 1
  7.  
    else
  8.  
    mkfs.xfs  -L brick$i -f -i  size=512 /dev/mapper/flash$i
  9.  
    fi
  10.  
    done
  11.  
    }
  12.  
    function guazai(){
  13.  
    for i in `seq 1 12`;do
  14.  
    mkdir /gluster_brick$i
  15.  
    echo "LABEL=brick$i   /gluster_brick$i   xfs  defaults 0 0"  >>  /etc/fstab
  16.  
    done
  17.  
    }

 

 好了不废话,继续我们的实验,格式化磁盘/dev/sdb1,如下所示,三台机器均进行如下操作。这里不使用卷标的可以使用uuid,否则有坑。


  1.  
    # mkfs.xfs -L brick1 -f -i size=512 /dev/sdb1
  2.  
    # mkdir /gluster_brick1
  3.  
    # echo "LABEL=brick1   /gluster_brick1   xfs  defaults 0 0"  >> /etc/fstab
  4.  
    # mount -a

3.安装glusterfs

   去gfs官网看了下glusterfs更加简单了,安装的命令不复杂了,n年前我安装的时候还是3版本,偶然发现已经5版本了,变化太快了,若你有兴趣可把官网看一遍。三台机器均为glusterfs的server,均需按照如下步骤进行安装:

 # yum install centos-release-gluster
    # yum install glusterfs-server(说明如果是glsuterfs的客户端,则只需要按照glusterfs-client包即可)
    # systemctl enable glusterd
    # systemctl start glusterd

    当然你也可以使用之前配置好的salt进行自动化安装。

 

    # salt-ssh '*' cmd.run 'systemctl enable glusterd'

 

4.gluster peer管理

  当glusterd运行起来之后在任意一台机器添加另外两个机器进信任的池子即可。这里在linux-node1进行操作,需要执行如下两条命令。


  1.  
      # gluster peer probe  linux-node2
  2.  
        # gluster peer probe  linux-node3

验证是否添加成功,如下图所示则为成功。

[root@linux-node1 ~]# gluster peer status

5.创建卷devops

注意生产中,一般使用三个副本,这里就三块盘,里面存储的数据是一致的,如下图所示:


  1.  
    [root@linux-node1 ~]# gluster volume create devops replica 3 linux-node1:/gluster_brick1/b1 linux-node2:/gluster_brick1/b1  linux-node3:/gluster_brick1/b1
  2.  
    volume create: devops: success: please start the volume to access data
  3.  
    [root@linux-node1 ~]# gluster volume start devops
  4.  
    volume start: devops: success

6.测试glusterfs存储


  1.  
    [root@linux-node1 ~]# mkdir /test
  2.  
    [root@linux-node1 ~]# mount -t glusterfs linux-node1:/devops  /test
  3.  
    [root@linux-node1 ~]# for i in `seq -w 1 100`; do echo "test" >> /test/copy-test-$i; done
  4.  
    [root@linux-node1 ~]# ls -lA /test | wc -l
  5.  
    101

此步骤可以看到100个文件;然后查看下:

因为是三个副本,所以每个机器上已经有了100个文件,好了glusterfs的实验就到这里。

【第二部分:在Kubernetes集群中使用】

bb

1.将glusterfs当作pv和pvc在集群中使用

需要使用三个文件:

  1. glusterfs-endpoints.yaml 

  2. pv-demo.yaml

  3. pvc-demo.yaml


  1.  
    [root@linux-node1 glusterfs]# cat glusterfs-endpoints.yaml 
  2.  
    apiVersion: v1
  3.  
    kind: Endpoints
  4.  
    metadata:
  5.  
      name: glusterfs-volume
  6.  
    subsets:
  7.  
    - addresses:
  8.  
      - ip: 192.168.56.11
  9.  
      ports:
  10.  
      - port: 20
  11.  
    - addresses:
  12.  
      - ip: 192.168.56.12
  13.  
      ports:
  14.  
      - port: 20
  15.  
    - addresses:
  16.  
      - ip: 192.168.56.13
  17.  
      ports:
  18.  
      - port: 20
  19.  
    [root@linux-node1 glusterfs]# cat pv-demo.yaml 
  20.  
    apiVersion: v1
  21.  
    kind: PersistentVolume
  22.  
    metadata:
  23.  
      name: pv-gluster
  24.  
    spec:
  25.  
      capacity:
  26.  
        storage: 5G
  27.  
      accessModes:
  28.  
      - ReadWriteMany
  29.  
      persistentVolumeReclaimPolicy: Recycle
  30.  
      glusterfs:
  31.  
        endpoints: "glusterfs-volume"
  32.  
        path: "devops"
  33.  
        readOnly: false
  34.  
    [root@linux-node1 glusterfs]# cat pvc-demo.yaml 
  35.  
    kind: PersistentVolumeClaim
  36.  
    apiVersion: v1
  37.  
    metadata:
  38.  
      name: pvc-glusterfs
  39.  
    spec:
  40.  
      accessModes:
  41.  
        - ReadWriteMany
  42.  
      resources:
  43.  
        requests:
  44.  
          storage: 1G

 

使用kubectl直接创建好资源即可。

2.用deployment进行验证


  1.  
    [root@linux-node1 glusterfs]# cat nginx-ingress-deployment.yaml 
  2.  
    apiVersion: apps/v1
  3.  
    kind: Deployment
  4.  
    metadata:
  5.  
      name: nginx-deployment
  6.  
      labels:
  7.  
        app: nginx
  8.  
    spec:
  9.  
      replicas: 2
  10.  
      selector:
  11.  
        matchLabels:
  12.  
          app: nginx
  13.  
      template:
  14.  
        metadata:
  15.  
          labels:
  16.  
            app: nginx
  17.  
        spec:
  18.  
          containers:
  19.  
          - name: nginx
  20.  
            image: nginx:1.13.12
  21.  
            ports:
  22.  
            - containerPort: 80
  23.  
            volumeMounts:
  24.  
            - name: www
  25.  
              subPath: nginxpvc-gluster
  26.  
              mountPath: /usr/share/nginx/html
  27.  
          volumes:
  28.  
          - name: www
  29.  
            persistentVolumeClaim:
  30.  
              claimName: pvc-glusterfs
  31.  
    # kubectl  apply -f  nginx-ingress-deployment.yaml

3.自动化扩容pvc

  1、当glustefs的磁盘空间够大的时候,我们使用的pv跟我们申请的大小是不一样的,上限是GFS卷的大小,若gfs存储不够,只需扩容gfs的volume即可。

2、当存储管理员开启了这个参数的时候怎么办?


  1.  
    # gluster volume devops quota enable
  2.  
    # gluster volume quota devops limit-usage / 1gb

扩容完存储之后,将我们的quota值调大,这个时候我们k8s里面的pod就可以使用大额的存储了,不需要重启。pv和pvc不做调整。

上面的实验过程中,我们创建顺序为先创建glusterfs的volume->再创建endpoint指向glusterfs集群,再创建pv与volume做关联,然后是pvc绑定pv,pod使用pvc,那么有没有办法来自动创建这一切呢?下篇文章我们将介绍《使用Heketi来自动化管理GlusterFS》。

标签:GlusterFS
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐
2020-09-16 17:27:40 关键词:GlusterFS
摘要:前言 有很多学习运维的朋友开始搞不懂glusterfs集群安装,那么下面的文章就让我们来学习一下 环境准备 系统 1 [root@VM_0_9_centos ~]# uname -a 2 Linux VM_0_9_centos 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8..