GlusterFS在Kubernetes中的應用實戰(一)
【分享嘉賓】
張龍,從事運維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實戰】
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。在三臺機器上分別進行如下操作,操作過程按照生產環境來。三臺機器的新加磁碟均需要做如下操作。
操作完成後檢查新加入的磁碟型別是否為gpt型別。檢測命令fdisk -l
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個檔案;然後檢視下:
因為是三個副本,所以每個機器上已經有了100個檔案,好了glusterfs的實驗就到這裡。
【第二部分:在Kubernetes叢集中使用】
1.將glusterfs當作pv和pvc在叢集中使用
需要使用三個檔案:
glusterfs-endpoints.yaml
pv-demo.yaml
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes client-go實戰應用clientGo
- Kubernetes 實戰——發現應用(Service)
- Kubernetes 實戰——升級應用(Deployment)
- kubernetes在騰訊遊戲的應用實踐遊戲
- 實戰分享,教你藍芽在小程式中的應用藍芽
- 大資料分析在公安實戰中的應用(前言)大資料
- kubernetes實踐之二十六:GlusterFS
- k8s中應用GlusterFS型別StorageClassK8S型別
- Kubernetes 實戰——有狀態應用(StatefulSet)
- 動畫利器-lottie在懂表帝App中的實戰應用動畫APP
- Kubernetes 實戰——配置應用(ConfigMap、Secret)
- Linux在實際中的應用Linux
- 策略模式在應用中的實踐模式
- 樂觀鎖和悲觀鎖在kubernetes中的應用
- 擴散模型在機器學習中的應用及其挑戰模型機器學習
- 淺談設計模式在iOS開發實戰專案中的應用設計模式iOS
- web開發實戰教程:Apache Shiro在web專案中的應用WebApache
- coreseek實戰(三):全文搜尋在php中應用(使用api介面)PHPAPI
- 策略模式在實際業務中的應用模式
- 策略模式在業務中的實際應用模式
- Helm, 在Kubernetes中部署應用的利器
- AI在汽車中的應用:實用深度學習AI深度學習
- 設計模式在vue中的應用(一)設計模式Vue
- AOP及其在Spring中的應用(一) .Spring
- 請教benq大哥strategy模式在實際中的一個應用ENQ模式
- 實戰 | 在應用中使用 Compose Material 3
- gRPC應用實戰:(一)簡介RPC
- flannel網路在kubernetes中的運用
- Runtime在實際開發中的應用
- ASR專案實戰-任務佇列在檔案轉寫特性中的應用佇列
- [譯] 在 Kubernetes 之上架構應用架構
- SpEL應用實戰
- Knative 實戰:一個微服務應用的部署微服務
- 談談網頁設計中的字型應用(3):實戰應用篇·上網頁
- 談談網頁設計中的字型應用(4):實戰應用篇·下網頁
- Kubernetes 部署 Laravel 應用的最佳實踐Laravel
- Sentry實時應用錯誤跟蹤系統在Kubernetes中私有化部署
- Refs 在React中的應用React