GlusterFS在Kubernetes中的應用實戰(一)

運維社群發表於2018-11-06

【分享嘉賓】

    張龍,從事運維8年時間,先後做過運維實施、SE、mysqldba、PE、運維開發等;2015年轉k8s技術研究及k8s在企業的落地實戰,曾在易寶、凡普、京東金融等國內網際網路金融公司工作。開發過應用釋出系統,熟練運維架構,擅長saltstack、python、flask、js等。

背景介紹

首先需要大家已經成功搭建好了Kubernetes叢集的實驗環境,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實戰】

GlusterFS在Kubernetes中的應用實戰(一)

1.磁碟型別修改

    實際生產案例中大家的磁碟都比較大,先將磁碟型別修改為gpt。這裡給大家提供一個生產使用的指令碼。

#!/bin/bash  
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH  
function main(){
i=3
while [ $i -lt 10 ]                
do
j=`echo $i|awk '{printf "%c",97+$i}'`
parted /dev/sd$j <<FORMAT               
mklabel gpt
yes
mkpart primary 0 -1
ignore
quit
FORMAT
i=$(($i+1))
done
}
main


請大家在三臺機器上使用fdisk –l檢視下新加入硬碟的編號,我這裡為/dev/sdb。在三臺機器上分別進行如下操作,操作過程按照生產環境來。三臺機器的新加磁碟均需要做如下操作。

GlusterFS在Kubernetes中的應用實戰(一)

操作完成後檢查新加入的磁碟型別是否為gpt型別。檢測命令fdisk -l

GlusterFS在Kubernetes中的應用實戰(一)

2.磁碟格式化並掛載卷

    生產環境在使用的時候儲存也進行了自己的規劃使用了flashcache做快取層,大家有興趣的可以研究下儲存,我這邊實驗環境沒有使用flashcache。給大家提供一個格式化和掛載的指令碼。

function mkfs(){
for i in `seq 1 12`;do
if [ $i -lt 10 ] 
then
mkfs.xfs  -L brick$i -f -i  size=512 /dev/mapper/flash0$i
sleep 1
else
mkfs.xfs  -L brick$i -f -i  size=512 /dev/mapper/flash$i
fi
done
}
function guazai(){
for i in `seq 1 12`;do
mkdir /gluster_brick$i
echo "LABEL=brick$i   /gluster_brick$i   xfs  defaults 0 0"  >>  /etc/fstab
done
}


 好了不廢話,繼續我們的實驗,格式化磁碟/dev/sdb1,如下所示,三臺機器均進行如下操作。這裡不使用卷標的可以使用uuid,否則有坑。

# mkfs.xfs -L brick1 -f -i size=512 /dev/sdb1
# mkdir /gluster_brick1
# echo "LABEL=brick1   /gluster_brick1   xfs  defaults 0 0"  >> /etc/fstab
# 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進行操作,需要執行如下兩條命令。

  # gluster peer probe  linux-node2
    # gluster peer probe  linux-node3

驗證是否新增成功,如下圖所示則為成功。

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

5.建立卷devops

注意生產中,一般使用三個副本,這裡就三塊盤,裡面儲存的資料是一致的,如下圖所示:

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

6.測試glusterfs儲存

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

此步驟可以看到100個檔案;然後檢視下:

GlusterFS在Kubernetes中的應用實戰(一)

因為是三個副本,所以每個機器上已經有了100個檔案,好了glusterfs的實驗就到這裡。

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

GlusterFS在Kubernetes中的應用實戰(一)

1.將glusterfs當作pv和pvc在叢集中使用

需要使用三個檔案:

  1. glusterfs-endpoints.yaml 

  2. pv-demo.yaml

  3. pvc-demo.yaml

[root@linux-node1 glusterfs]# cat glusterfs-endpoints.yaml 
apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-volume
subsets:
- addresses:
  - ip: 192.168.56.11
  ports:
  - port: 20
- addresses:
  - ip: 192.168.56.12
  ports:
  - port: 20
- addresses:
  - ip: 192.168.56.13
  ports:
  - port: 20
[root@linux-node1 glusterfs]# cat pv-demo.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-gluster
spec:
  capacity:
    storage: 5G
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  glusterfs:
    endpoints: "glusterfs-volume"
    path: "devops"
    readOnly: false
[root@linux-node1 glusterfs]# cat pvc-demo.yaml 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-glusterfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1G


使用kubectl直接建立好資源即可。

2.用deployment進行驗證

[root@linux-node1 glusterfs]# cat nginx-ingress-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.13.12
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          subPath: nginxpvc-gluster
          mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: pvc-glusterfs
# kubectl  apply -f  nginx-ingress-deployment.yaml

3.自動化擴容pvc

  1、當glustefs的磁碟空間夠大的時候,我們使用的pv跟我們申請的大小是不一樣的,上限是GFS卷的大小,若gfs儲存不夠,只需擴容gfs的volume即可。

2、當儲存管理員開啟了這個引數的時候怎麼辦?

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

擴容完儲存之後,將我們的quota值調大,這個時候我們k8s裡面的pod就可以使用大額的儲存了,不需要重啟。pv和pvc不做調整。

上面的實驗過程中,我們建立順序為先建立glusterfs的volume->再建立endpoint指向glusterfs叢集,再建立pv與volume做關聯,然後是pvc繫結pv,pod使用pvc,那麼有沒有辦法來自動建立這一切呢?下篇文章我們將介紹《使用Heketi來自動化管理GlusterFS》。

原文連結:https://mp.weixin.qq.com/s/AlgakenKnipt1X6QVaBqIQ

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556419/viewspace-2218930/,如需轉載,請註明出處,否則將追究法律責任。

相關文章