附010.Kubernetes永久存储之GlusterFS超融合部署
程序员文章站
2022-05-09 14:44:39
一 前期准备 1.1 基础知识 在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC-->Pod挂载PVC 如果要创建多个PV,则需要手动重复执行,可通过Heketi管理glusterfs。 Heketi是用来 ......
一 前期准备
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