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.51master-01-k8sk8s主节点服务端
192.168.141.52master-02-k8sk8s主节点服务端
192.168.141.53master-03-k8sk8s主节点服务端
192.168.141.56node-0001-k8sk8s主从点服务端
192.168.141.54node-0002-k8sk8s主从点客户端
192.168.141.53node-0003-k8sk8s主从点客户端

可以看到是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’

导致这个问题的原因有很多,我列举一下基本的问题

  1. glusterfs的目录卷端口没有对应
  2. pv和pvc没有启动
  3. 目录卷存在问题
    4.所有子节点没有安装glusterfs的客户端(我被这个问题坑了。)

这里写图片描述

参考文章

https://blog.csdn.net/cuipengchong/article/details/72152547
http://blog.51cto.com/nosmoking/2062906

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐