K8s之使用Glusterfs-yellowcong
https://blog.csdn.net/cuipengchong/article/details/72152547http://blog.51cto.com/nosmoking/2062906
K8s的glusterfs客户端使用,其实也是有特别多的坑,我就被glusterfs的节点和端口的问题给坑到了,在k8s的集群种,都必须安装 glusterfs的客户端,而且配置pv卷,注意endpoints和path,endpoints是我们配置的glusterfs服务,来给容器使用,path就是我们的卷的名称。
#实验准备
K8s之GlusterFS集群文件系统安装-yellowcong
官方文档
https://github.com/gluster/gluster-kubernetes/blob/master/docs/setup-guide.md#infrastructure-requirements
系统架构
注意,在k8s集群种,所有的节点上,都必须安装glusterfs 客户端的客户端,不然就会导致挂载不上了。而且服务端的ip必须在客户端/etc/hosts配置。
ip | 主机名 | k8s节点 | glusterfs 节点 |
---|---|---|---|
192.168.141.51 | master-01-k8s | k8s主节点 | 服务端 |
192.168.141.52 | master-02-k8s | k8s主节点 | 服务端 |
192.168.141.53 | master-03-k8s | k8s主节点 | 服务端 |
192.168.141.56 | node-0001-k8s | k8s主从点 | 服务端 |
192.168.141.54 | node-0002-k8s | k8s主从点 | 客户端 |
192.168.141.53 | node-0003-k8s | k8s主从点 | 客户端 |
可以看到是4个节点都安装了glusterfs
1 准备数据卷
#建立挂载的目录
mkdir -p /data/fs_data
#创建卷
gluster volume create k8s-volume master-01-k8s:/data/fs_data master-02-k8s:/data/fs_data master-03-k8s:/data/fs_data master-02-k8s:node-0001-k8s
#启动卷
gluster volume start k8s-volume
查看卷的信息
2 创建endpoint
通过endpoint将外部的glusterfs提供给k8s的容器来访问。
2.1 创建endpoint 配置
glusterfs-r3-default.yaml的配置文件
apiVersion: v1
kind: Endpoints
metadata:
name: glusterfs-r3
namespace: default
subsets:
- addresses:
- ip: 192.168.141.51
- ip: 192.168.141.52
- ip: 192.168.141.53
- ip: 192.168.141.56
ports:
- port: 49153
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: glusterfs-k8s
namespace: default
spec:
ports:
- port: 49153
protocol: TCP
targetPort: 49153
sessionAffinity: None
type: ClusterIP
2.2 配置文件讲解
注意端口是我们想要用的glsusterfs的卷端口,不要映射错了,导致挂载问题。
如果不知道目录卷的端口,可以执行以下命令查看
#k8s-volume 是卷的名称,如果不写卷的名称,会查询出所有的数据
gluster volume status k8s-volume
下图,大家可以看到k8s-volume的端口是49153
2.3 启动服务
#创建endpoint
kubectl create -f glusterfs-r3-default.yaml
#查看启动结果
kubectl get endpoints,service
3创建pv
PersistentVolume(PV)和 PersistentVolumeClaim(PVC)是kubernetes提供的两种API资源,用于抽象存储细节。管理员关注于如何通过pv提供存储功能而无需关注用户如何使用,同样的用户只需要挂载PVC到容器中而不需要关注存储卷采用何种技术实现。
PVC和PV的关系跟pod和node关系类似,前者消耗后者的资源。PVC可以向PV申请指定大小的存储资源并设置访问模式。
3.1 创建配置文件
这个pv-gv1-default.yaml配置文件,endpoints 为上面建立的endpoints的名称,而path 需要写成glusterfs 创建的卷名称
apiVersion: v1
kind: PersistentVolume
metadata:
name: glusterfs-r3-gv1-default
labels:
type: glusterfs
spec:
storageClassName: gv1-default
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: "glusterfs-r3"
path: "k8s-volume"
readOnly: false
3.2 配置文件讲解
3.3 创建pv
#创建pv
kubectl create -f pv-gv1-default.yaml
#查看pv信息
kubectl get pv
4 创建pvc
4.1 添加配置文件
pvc-gv1-default.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: glusterfs-r3-gv1-default
namespace: default
spec:
storageClassName: gv1-default
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
4.2 创建服务
kubectl create -f pvc-gv1-default.yaml
5 k8s使用
5.1 创建配置文件
通过k8s来使用我们的卷,test-nginx.yml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: gv1-default-t1
namespace: default
labels:
app.name: gv1-default-t1
spec:
replicas: 1
selector:
matchLabels:
app.name: gv1-default-t1
template:
metadata:
labels:
app.name: gv1-default-t1
spec:
containers:
- name: nginx-test
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: glusterfsvol
mountPath: "/mnt/glusterfsvol"
volumes:
- name: glusterfsvol
persistentVolumeClaim:
claimName: glusterfs-r3-gv1-default
5.2 配置注意点
5.3 创建服务
kubctl create -f test-nginx.yml
6查看挂载
进入到了容器后,发现目录/mnt/glusterfsvol下面,已经存在我们的配置信息了。
#进入到后台种
kubectl exec -it gv1-default-t1-848455b8b6-54x8t /bin/bash
#查看目录挂载信息
df -h
查看目录挂载信息
7 验证容器
我们进入容器后,在容器挂载的目录卷中,输出一个文件,然后到物理机的目录卷中,查看文件,结果发现文件存在。
在物理机种,查看信息
#创建文件夹
mkdir /data2
#挂载到data2
mount master-01-k8s:/k8s_data /data2
#查看data2
cd /data2
可以看到,我们容器里面的文件,在物理机上,也看到了。
常见问题
1 mount: unknown filesystem type ‘glusterfs’
导致这个问题的原因有很多,我列举一下基本的问题
- glusterfs的目录卷端口没有对应
- pv和pvc没有启动
- 目录卷存在问题
4.所有子节点没有安装glusterfs的客户端(我被这个问题坑了。)
参考文章
https://blog.csdn.net/cuipengchong/article/details/72152547
http://blog.51cto.com/nosmoking/2062906
更多推荐
所有评论(0)