一 前期準備
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節點
|
磁盤規劃
|
k8snode01 |
k8snode02 |
k8snode03 |
| PV |
sdb1 |
sdb1 |
sdb1 |
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 ?
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益