一 前期準備
1.1 基礎知識
在Kubernetes中,使用GlusterFS文件系統,操作步驟通常是:
創建brick–>創建volume–>創建PV–>創建PVC–>Pod掛載PVC
如果要創建多個PV,則需要手動重複執行,可通過Heketi管理glusterfs。
Heketi是用來管理GlusterFS卷的生命周期的,並提供了一個RESTful API接口供Kubernetes調用,因為GlusterFS沒有提供API調用的方式,所以我們藉助heketi。通過Heketi,Kubernetes可以動態配置GlusterFS卷,Heketi會動態在集群內選擇bricks創建所需的volumes,確保數據的副本會分散到集群不同的故障域內,同時Heketi還支持GlusterFS多集群管理,便於管理員對GlusterFS進行操作。
Heketi要求在每個glusterfs節點上配備裸磁盤,用於Heketi創建PV和VG。通過Hekete,Kubernetes中使用PV步驟為:
創建StorageClass–>創建PVC–>Pod掛載PVC
這種方式稱為基於StorageClass的動態資源供應。
提示:本實驗基於Kubernetes部署glusterfs,同時glusterfs管理組件Heketi也使用Kubernetes部署。
1.2 架構示意
提示:本實驗不涉及Kubernetes部署,Kubernetes部署參考001-019。
1.3 相關規劃
主機 |
IP |
磁盤 |
備註 |
k8smaster01 |
172.24.8.71 |
Kubernetes master節點 |
|
k8smaster02 |
172.24.8.72 |
Kubernetes master節點 |
|
k8smaster03 |
172.24.8.73 |
Kubernetes master節點 |
|
k8snode01 |
172.24.8.74 |
sdb |
Kubernetes node節點 glusterfs節點 |
k8snode02 |
172.24.8.75 |
sdb |
Kubernetes node節點 glusterfs節點 |
k8snode03 |
172.24.8.76 |
sdb |
Kubernetes node節點 glusterfs節點 |
磁盤規劃
1.4 部署條件
超融合部署需要具有已經部署的Kubernetes集群管理訪問權限。如果Kubernetes節點滿足以下要求,則可以選擇將GlusterFS作為超融合服務部署:
- 必須至少有三個節點用於glusterfs;
- 每個節點必須至少連接一個裸磁盤設備,以供heketi使用。這些設備上不得包含任何數據,heketi將會格式化和分區此設備;
- 每個節點必須打開以下端口才能進行GlusterFS通信:
- 2222:GlusterFS pod的sshd端口;
- 24007:GlusterFS守護程序;
- 24008:GlusterFS管理;
- 49152——49251:主機上每個卷的每個brick都需要有獨立的端口。對於每塊新brick,將從49152開始使用一個新端口。建議每台主機的默認範圍為49152-49251,也可根據需要進行調整。
- 必須加載以下內核模塊:
- dm_snapshot
- dm_mirror
- dm_thin_pool
- 對於內核模塊,可通過lsmod | grep <name>查看模塊是否存在,並modprobe <name>加載給定的模塊。
- 每個節點都要求該mount.glusterfs命令可用。在所有基於Red Hat的操作系統下,此命令由glusterfs-fuse軟件包提供。
注意:節點上安裝的GlusterFS客戶端版本應盡可能接近服務器的版本。要獲取已安裝的版本,可通過glusterfs –version或kubectl exec <pod> — glusterfs –version命令查看。
1.5 其他準備
所有節點NTP配置;
所有節點添加相應主機名解析:
1 172.24.8.71 k8smaster01 2 172.24.8.72 k8smaster02 3 172.24.8.73 k8smaster03 4 172.24.8.74 k8snode01 5 172.24.8.75 k8snode02 6 172.24.8.76 k8snode03
注意:若非必要,建議關閉防火牆和SELinux。
二 規劃裸設備
2.1 確認磁盤
1 [root@k8snode01 ~]# fdisk /dev/sdb -l #檢查sdb是否為裸磁盤
三 安裝glusterfs-fuse
3.1 安裝相應RPM源
1 [root@k8snode01 ~]# yum -y install centos-release-gluster 2 [root@k8snode01 ~]# yum -y install glusterfs-fuse #安裝glusterfs-fuse
提示:k8snode01、k8snode02、k8snode03類似操作,根據1.4要求安裝glusterfs-fuse組件;
安裝相應源之後,會在/etc/yum.repos.d/目錄多出文件CentOS-Storage-common.repo,內容如下:
# CentOS-Storage.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more
# information
[centos-storage-debuginfo]
name=CentOS-$releasever – Storage SIG – debuginfo
baseurl=http://debuginfo.centos.org/$contentdir/$releasever/storage/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
3.2 加載相應模塊
1 [root@k8snode01 ~]# cat > /etc/sysconfig/modules/glusterfs.modules <<EOF 2 #!/bin/bash 3 4 for kernel_module in dm_snapshot dm_mirror dm_thin_pool;do 5 /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1 6 if [ \$? -eq 0 ]; then 7 /sbin/modprobe \${kernel_module} 8 fi 9 done; 10 EOF 11 [root@k8snode01 ~]# chmod +x /etc/sysconfig/modules/glusterfs.modules 12 [root@k8snode01 ~]# lsmod |egrep "dm_snapshot|dm_mirror|dm_thin_pool" #所有glusterfs node節點檢查
提示:可通過modprobe <name>加載給定的模塊。
四 Kubernetes部署glusterfs
4.1 Node tag
1 [root@k8smaster01 ~]# kubectl label nodes k8snode01 storagenode=glusterfs 2 [root@k8smaster01 ~]# kubectl label nodes k8snode02 storagenode=glusterfs 3 [root@k8smaster01 ~]# kubectl label nodes k8snode03 storagenode=glusterfs
提示:在後續使用DaemonSet部署時候kube-templates/glusterfs-daemonset.yaml存在如下針對label的Selector:
spec:
nodeSelector:
storagenode: glusterfs
4.2 下載glusterfs-Kubernetes
1 [root@k8smaster01 ~]# yum -y install git 2 [root@k8smaster01 ~]# git clone https://github.com/gluster/gluster-kubernetes.git
4.3 修改glusterfs拓撲
1 [root@k8smaster01 ~]# cd gluster-kubernetes/deploy/ 2 [root@k8smaster01 deploy]# cp topology.json.sample topology.json 3 [root@k8smaster01 deploy]# vi topology.json
1 { 2 "clusters": [ 3 { 4 "nodes": [ 5 { 6 "node": { 7 "hostnames": { 8 "manage": [ 9 "k8snode01" 10 ], 11 "storage": [ 12 "172.24.8.74" 13 ] 14 }, 15 "zone": 1 16 }, 17 "devices": [ 18 "/dev/sdb" 19 ] 20 }, 21 { 22 "node": { 23 "hostnames": { 24 "manage": [ 25 "k8snode02" 26 ], 27 "storage": [ 28 "172.24.8.75" 29 ] 30 }, 31 "zone": 1 32 }, 33 "devices": [ 34 "/dev/sdb" 35 ] 36 }, 37 { 38 "node": { 39 "hostnames": { 40 "manage": [ 41 "k8snode03" 42 ], 43 "storage": [ 44 "172.24.8.76" 45 ] 46 }, 47 "zone": 1 48 }, 49 "devices": [ 50 "/dev/sdb" 51 ] 52 } 53 ] 54 } 55 ] 56 }
提示:heketi配置文件及介紹參考《附009.Kubernetes永久存儲之GlusterFS獨立部署》。
若需要修改heketi的暴露方式,若需要修改為NodePort,可參考https://lichi6174.github.io/glusterfs-heketi/。
所有部署相關yaml位於/root/gluster-kubernetes/deploy/kube-templates,本實驗採用默認參數。
4.4 配置heketi
1 [root@k8smaster01 deploy]# cp heketi.json.template heketi.json 2 [root@k8smaster01 deploy]# vi heketi.json 3 { 4 "_port_comment": "Heketi Server Port Number", 5 "port" : "8080", 6 7 "_use_auth": "Enable JWT authorization. Please enable for deployment", 8 "use_auth" : true, #開啟用戶認證 9 10 "_jwt" : "Private keys for access", 11 "jwt" : { 12 "_admin" : "Admin has access to all APIs", 13 "admin" : { 14 "key" : "admin123" #管理員密碼 15 }, 16 "_user" : "User only has access to /volumes endpoint", 17 "user" : { 18 "key" : "xianghy" #用戶密碼 19 } 20 }, 21 22 "_glusterfs_comment": "GlusterFS Configuration", 23 "glusterfs" : { 24 25 "_executor_comment": "Execute plugin. Possible choices: mock, kubernetes, ssh", 26 "executor" : "${HEKETI_EXECUTOR}", #本實驗使用Kubernetes方式 27 28 "_db_comment": "Database file name", 29 "db" : "/var/lib/heketi/heketi.db", #heketi數據存儲 30 31 "kubeexec" : { 32 "rebalance_on_expansion": true 33 }, 34 35 "sshexec" : { 36 "rebalance_on_expansion": true, 37 "keyfile" : "/etc/heketi/private_key", 38 "port" : "${SSH_PORT}", 39 "user" : "${SSH_USER}", 40 "sudo" : ${SSH_SUDO} 41 } 42 }, 43 44 "backup_db_to_kube_secret": false 45 }
4.5 相關修正
新版Kubernetes的# kubectl get pod命令無–show-all選項,需要如下操作修正部署gk-deploy腳本。
1 [root@k8smaster01 deploy]# vi gk-deploy 2 924 #heketi_pod=$(${CLI} get pod --no-headers --show-all --selector="heketi" | awk '{print $1}') 3 925 heketi_pod=$(${CLI} get pod --no-headers --selector="heketi" | awk '{print $1}')
由於國內glusterfs鏡像可能無法pull,建議通過VPN等方式提前pull鏡像,然後上傳至所有glusterfs node節點。
1 [root@VPN ~]# docker pull gluster/gluster-centos:latest 2 [root@VPN ~]# docker pull heketi/heketi:dev 3 [root@VPN ~]# docker save -o gluster_latest.tar gluster/gluster-centos:latest 4 [root@VPN ~]# docker save -o heketi_dev.tar heketi/heketi:dev 5 [root@k8snode01 ~]# docker load -i gluster_latest.tar 6 [root@k8snode01 ~]# docker load -i heketi_dev.tar 7 [root@k8snode01 ~]# docker images 8
4.6 正式部署
1 [root@k8smaster01 deploy]# ./gk-deploy -h #查看部署參數 2 [root@k8smaster01 deploy]# kubectl create ns heketi #建議部署在獨立的namespace中 3 [root@k8smaster01 deploy]# ./gk-deploy -g -n heketi topology.json --admin-key admin123 --user-key xianghy 4 …… 5 Do you wish to proceed with deployment? 6 7 [Y]es, [N]o? [Default: Y]: y
提示:部署腳本更多參數參考:https://github.com/gluster/gluster-kubernetes/blob/master/deploy/gk-deploy。
注意:若部署失敗,需要通過下方式徹底刪除后重新部署:
1 [root@k8smaster01 deploy]# ./gk-deploy --abort --admin-key admin123 --user-key xianghy -y -n heketi 2 [root@k8smaster01 deploy]# kubectl delete -f kube-templates/ -n heketi
glusterfs node節點需要執行如下徹底清理:
1 [root@k8snode01 ~]# dmsetup ls 2 [root@k8snode01 ~]# dmsetup remove_all 3 [root@k8snode01 ~]# rm -rf /var/log/glusterfs/ 4 [root@k8snode01 ~]# rm -rf /var/lib/heketi 5 [root@k8snode01 ~]# rm -rf /var/lib/glusterd/ 6 [root@k8snode01 ~]# rm -rf /etc/glusterfs/ 7 [root@k8snode01 ~]# dd if=/dev/zero of=/dev/sdb bs=512k count=1 8 [root@k8snode01 ~]# wipefs -af /dev/sdb
4.7 Kubernetes集群查看驗證
1 [root@k8smaster01 ~]# kubectl get nodes --show-labels | grep -E 'NAME|node' 2 [root@k8smaster01 ~]# kubectl get all -n heketi
1 [root@k8smaster01 ~]# kubectl get pods -o wide -n heketi
4.8 gluster集群查看驗證
1 [root@k8smaster01 ~]# kubectl exec -it heketi-65f4555d74-72hrf -n heketi -- heketi-cli cluster list --user admin --secret admin123 #集群列表 2 [root@k8smaster01 ~]# kubectl -n heketi exec -ti heketi-65f4555d74-72hrf /bin/bash [root@heketi-65f4555d74-72hrf /]# heketi-cli cluster list --user admin --secret admin123 #進入heketi容器查看 3 [root@k8smaster01 ~]# curl http://10.254.111.219:8080/hello 4 Hello from Heketi
注意:使用4.6腳本為一鍵部署,也可使用gluster-kubernetes/deploy/目錄下的文件,分開逐步部署,整理部署思路如下:
- 使用glusterfs-daemonset.json部署glusterfs DaemonSet;
- 對node節點進行打標籤;
- 使用heketi-service-account.json部署Heketi的服務帳戶;
- 對Heketi所創建的服務帳戶授權;
- 創建secret;
- 轉發本地8080端口至deploy-heketi。
獨立部署完整過程參考:https://jimmysong.io/kubernetes-handbook/practice/using-heketi-gluster-for-persistent-storage.html。
五 安裝heketi-cli
由於在master節點管理heketi需要進入heketi容器或者使用kubectl exec -ti 方式,建議直接在master節點安裝heketi客戶端,直接管理、
5.1 安裝heketi服務
1 [root@k8smaster01 ~]# yum -y install centos-release-gluster 2 [root@k8smaster01 ~]# yum -y install heketi-client
5.2 配置heketi
1 [root@k8smaster01 ~]# echo "export HEKETI_CLI_SERVER=http://$(kubectl get svc heketi -n heketi -o go-template='{{.spec.clusterIP}}'):8080" >> /etc/profile.d/heketi.sh 2 [root@k8smaster01 ~]# echo "alias heketi-cli='heketi-cli --user admin --secret admin123'" >> ~/.bashrc 3 [root@k8smaster01 ~]# source /etc/profile.d/heketi.sh 4 [root@k8smaster01 ~]# source ~/.bashrc 5 [root@k8smaster01 ~]# echo $HEKETI_CLI_SERVER 6 http://heketi:8080
5.3 集群管理
1 [root@k8smaster01 ~]# heketi-cli cluster list 2 Clusters: 3 Id:67004a06fbcb4fa525bcec1fbaa9ef2d [file][block] 4 [root@k8smaster01 ~]# heketi-cli cluster info 67004a06fbcb4fa525bcec1fbaa9ef2d #集群詳細信息 5 Cluster id: 67004a06fbcb4fa525bcec1fbaa9ef2d 6 Nodes: 7 40cdd4c1d0c389939193d6dea3c5bfe8 8 62873c54cf61025fda91e6d44433378b 9 d48986357840d28653304e7170599da5 10 Volumes: 11 5f15f201d623e56b66af56313a1975e7 12 Block: true 13 14 File: true 15 [root@k8smaster01 ~]# heketi-cli topology info 67004a06fbcb4fa525bcec1fbaa9ef2d #查看拓撲信息 16 [root@k8smaster01 ~]# heketi-cli node list #查看所有node 17 Id:40cdd4c1d0c389939193d6dea3c5bfe8 Cluster:67004a06fbcb4fa525bcec1fbaa9ef2d 18 Id:62873c54cf61025fda91e6d44433378b Cluster:67004a06fbcb4fa525bcec1fbaa9ef2d 19 Id:d48986357840d28653304e7170599da5 Cluster:67004a06fbcb4fa525bcec1fbaa9ef2d 20 [root@k8smaster01 ~]# heketi-cli node info 40cdd4c1d0c389939193d6dea3c5bfe8 #node節點信息 21 [root@k8smaster01 ~]# heketi-cli volume create --size=2 --replica=2 #默認為3副本的replica模式
1 [root@k8smaster01 ~]# heketi-cli volume list #列出所有卷 2 [root@k8smaster01 ~]# heketi-cli volume info fc296ab350dcc36e00dd3b3643a04645 #卷信息 3 [root@k8smaster01 ~]# heketi-cli volume delete fc296ab350dcc36e00dd3b3643a04645 #刪除卷
六 Kubernetes動態掛載glusterfs
6.1 StorageClass動態存儲
kubernetes共享存儲provider模式:
靜態模式(Static):集群管理員手工創建PV,在定義PV時設置後端存儲的特性;
動態模式(Dynamic):集群管理員不需要手工創建PV,而是通過StorageClass的設置對後端存儲進行描述,標記為某種”類型(Class)”;此時要求PVC對存儲的類型進行說明,系統將自動完成PV的創建及與PVC的綁定;PVC可以聲明Class為””,說明PVC禁止使用動態模式。
基於StorageClass的動態存儲供應整體過程如下圖所示:
- 集群管理員預先創建存儲類(StorageClass);
- 用戶創建使用存儲類的持久化存儲聲明(PVC:PersistentVolumeClaim);
- 存儲持久化聲明通知系統,它需要一個持久化存儲(PV: PersistentVolume);
- 系統讀取存儲類的信息;
- 系統基於存儲類的信息,在後台自動創建PVC需要的PV;
- 用戶創建一個使用PVC的Pod;
- Pod中的應用通過PVC進行數據的持久化;
- 而PVC使用PV進行數據的最終持久化處理。
提示:關於Kubernetes的部署參考《附003.Kubeadm部署Kubernetes》。
6.2 定義StorageClass
關鍵字說明:
- provisioner:表示存儲分配器,需要根據後端存儲的不同而變更;
- reclaimPolicy: 默認即”Delete”,刪除pvc后,相應的pv及後端的volume,brick(lvm)等一起刪除;設置為”Retain”時則保留數據,若需刪除則需要手工處理;
- resturl:heketi API服務提供的url;
- restauthenabled:可選參數,默認值為”false”,heketi服務開啟認證時必須設置為”true”;
- restuser:可選參數,開啟認證時設置相應用戶名;
- secretNamespace:可選參數,開啟認證時可以設置為使用持久化存儲的namespace;
- secretName:可選參數,開啟認證時,需要將heketi服務的認證密碼保存在secret資源中;
- clusterid:可選參數,指定集群id,也可以是1個clusterid列表,格式為”id1,id2”;
- volumetype:可選參數,設置卷類型及其參數,如果未分配卷類型,則有分配器決定卷類型;如”volumetype: replicate:3”表示3副本的replicate卷,”volumetype: disperse:4:2”表示disperse卷,其中‘4’是數據,’2’是冗餘校驗,”volumetype: none”表示distribute卷
提示:關於glusterfs各種不同類型的卷見《004.RHGS-創建volume》。
1 [root@k8smaster01 ~]# echo -n "admin123" | base64 #將密碼轉換為64位編碼 2 YWRtaW4xMjM= 3 [root@k8smaster01 ~]# mkdir -p heketi 4 [root@k8smaster01 ~]# cd heketi/ 5 [root@k8smaster01 ~]# vi heketi-secret.yaml #創建用於保存密碼的secret 6 apiVersion: v1 7 kind: Secret 8 metadata: 9 name: heketi-secret 10 namespace: heketi 11 data: 12 # base64 encoded password. E.g.: echo -n "mypassword" | base64 13 key: YWRtaW4xMjM= 14 type: kubernetes.io/glusterfs 15 [root@k8smaster01 heketi]# kubectl create -f heketi-secret.yaml #創建heketi 16 [root@k8smaster01 heketi]# kubectl get secrets -n heketi 17 NAME TYPE DATA AGE 18 default-token-6n746 kubernetes.io/service-account-token 3 144m 19 heketi-config-secret Opaque 3 142m 20 heketi-secret kubernetes.io/glusterfs 1 3m1s 21 heketi-service-account-token-ljlkb kubernetes.io/service-account-token 3 143m 22 [root@kubenode1 heketi]# vim gluster-heketi-storageclass.yaml #正式創建StorageClass 23 apiVersion: storage.k8s.io/v1 24 kind: StorageClass 25 metadata: 26 name: gluster-heketi-storageclass 27 parameters: 28 resturl: "http://10.254.111.219:8080" 29 clusterid: "67004a06fbcb4fa525bcec1fbaa9ef2d" 30 restauthenabled: "true" #若heketi開啟認證此處也必須開啟auth認證 31 restuser: "admin" 32 secretName: "heketi-secret" #name/namespace與secret資源中定義一致 33 secretNamespace: "heketi" 34 volumetype: "replicate:3" 35 provisioner: kubernetes.io/glusterfs 36 reclaimPolicy: Delete 37 [root@k8smaster01 heketi]# kubectl create -f gluster-heketi-storageclass.yaml
注意:storageclass資源創建后不可變更,如修改只能刪除后重建。
1 [root@k8smaster01 heketi]# kubectl get storageclasses #查看確認 2 NAME PROVISIONER AGE 3 gluster-heketi-storageclass kubernetes.io/glusterfs 85s 4 [root@k8smaster01 heketi]# kubectl describe storageclasses gluster-heketi-storageclass
6.3 定義PVC
1 [root@k8smaster01 heketi]# vi gluster-heketi-pvc.yaml 2 apiVersion: v1 3 kind: PersistentVolumeClaim 4 metadata: 5 name: gluster-heketi-pvc 6 annotations: 7 volume.beta.kubernetes.io/storage-class: gluster-heketi-storageclass 8 spec: 9 accessModes: 10 - ReadWriteOnce 11 resources: 12 requests: 13 storage: 1Gi
注意:accessModes可有如下簡寫:
- ReadWriteOnce:簡寫RWO,讀寫權限,且只能被單個node掛載;
- ReadOnlyMany:簡寫ROX,只讀權限,允許被多個node掛載;
- ReadWriteMany:簡寫RWX,讀寫權限,允許被多個node掛載。
1 [root@k8smaster01 heketi]# kubectl create -f gluster-heketi-pvc.yaml -n heketi 2 [root@k8smaster01 heketi]# kubectl get pvc -n heketi 3 [root@k8smaster01 heketi]# kubectl describe pvc gluster-heketi-pvc -n heketi 4 [root@k8smaster01 heketi]# kubectl get pv -n heketi 5 [root@k8smaster01 heketi]# kubectl describe pv pvc-ca949559-094a-11ea-8b3c-000c29fa7a79 -n heketi
1 [root@k8smaster01 heketi]# kubectl describe endpoints glusterfs-dynamic-ca949559-094a-11ea-8b3c-000c29fa7a79 -n heketi
提示:由上可知:PVC狀態為Bound,Capacity為1G。查看PV詳細信息,除容量,引用storageclass信息,狀態,回收策略等外,同時可知GlusterFS的Endpoint與path。EndpointsName為固定格式:glusterfs-dynamic-PV_NAME,且endpoints資源中指定了掛載存儲時的具體地址。
6.4 確認查看
通過5.3所創建的信息:
- volume與brick已經創建;
- 主掛載點(通信)在172.24.8.41節點,其餘兩個節點備選;
- 三副本的情況下,所有節點都會創建brick。
1 [root@k8smaster01 ~]# kubectl get pod -n heketi 2 [root@k8smaster01 ~]# kubectl exec -ti glusterfs-b854k -n heketi -- lsblk #glusterfs節點查看 3 [root@k8smaster01 ~]# kubectl exec -ti glusterfs-b854k -n heketi -- df -hT #glusterfs節點查看 4 [root@k8smaster01 ~]# kubectl exec -ti glusterfs-b854k -n heketi -- gluster volume list 5 [root@k8smaster01 ~]# kubectl exec -ti glusterfs-b854k -n heketi -- gluster volume info vol_29ba6f9665522ad5893412e61799a433 #glusterfs節點查看
6.5 Pod掛載測試
1 [root@xxx ~]# yum -y install centos-release-gluster 2 [root@xxx ~]# yum -y install glusterfs-fuse #安裝glusterfs-fuse
提示:本環境master節點也允許分發pod,因此所有master也必須安裝glusterfs-fuse以便於正常掛載,同時版本需要和glusterfs節點一致。
1 [root@k8smaster01 heketi]# vi gluster-heketi-pod.yaml 2 kind: Pod 3 apiVersion: v1 4 metadata: 5 name: gluster-heketi-pod 6 spec: 7 containers: 8 - name: gluster-heketi-container 9 image: busybox 10 command: 11 - sleep 12 - "3600" 13 volumeMounts: 14 - name: gluster-heketi-volume #必須和volumes中name一致 15 mountPath: "/pv-data" 16 readOnly: false 17 volumes: 18 - name: gluster-heketi-volume 19 persistentVolumeClaim: 20 claimName: gluster-heketi-pvc #必須和5.3創建的PVC中的name一致 21 [root@k8smaster01 heketi]# kubectl create -f gluster-heketi-pod.yaml -n heketi #創建Pod
6.6 確認驗證
1 [root@k8smaster01 ~]# kubectl get pod -n heketi | grep gluster-heketi 2 gluster-heketi-pod 1/1 Running 0 4m58s 3 [root@k8smaster01 ~]# kubectl exec -it gluster-heketi-pod /bin/sh -n heketi #進入Pod寫入測試文件 4 / # cd /pv-data/ 5 /pv-data # echo "This is a file!" >> a.txt 6 /pv-data # echo "This is b file!" >> b.txt 7 /pv-data # ls 8 a.txt b.txt 9 [root@k8smaster01 ~]# kubectl exec -it gluster-heketi-pod -n heketi -- df -h #查看所掛載的glusterfs
1 [root@k8smaster01 ~]# kubectl get pods -n heketi -o wide #查看對應的glusterfs node
1 [root@k8smaster01 ~]# kubectl exec -ti glusterfs-b854k -n heketi -- cat /var/lib/heketi/mounts/vg_2c7a02d1b1b7c1f165283b6691062102/brick_16e37a18a5e5fd40e14338ba78d99565/brick/a.txt 2 This is a file!
提示:通過Pod寫入相應的測試文件,然後通過glusterfs node節點查看是否存在。
6.7 刪除資源
1 [root@k8smaster01 ~]# cd heketi/ 2 [root@k8smaster01 heketi]# kubectl delete -f gluster-heketi-pod.yaml -n heketi 3 [root@k8smaster01 heketi]# kubectl delete -f gluster-heketi-pvc.yaml 4 [root@k8smaster01 heketi]# kubectl get pvc -n heketi 5 [root@k8smaster01 heketi]# kubectl get pv -n heketi 6 [root@k8smaster01 heketi]# kubectl exec -ti glusterfs-b854k -n heketi gluster volume list | grep gluster
參考:https://www.linuxba.com/archives/8152
https://www.cnblogs.com/blackmood/p/11389811.html本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益