kubernetes实践之二十六:GlusterFS

一:前言
GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。 GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。

服务器:
10.116.137.196          k8s_master
10.116.82.28              k8s_node1
10.116.36.57              k8s_node2

二: 安装glusterfs
我们直接在物理机上使用yum安装,在三台服务器上分别执行以下安装命令。

1.先安装 gluster 源
yum install centos-release-gluster -y

2.安装 glusterfs 组件
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma glusterfs-geo-replication glusterfs-devel

3.创建 glusterfs 目录
mkdir /mnt/glusterd

4.修改 glusterd 目录

点击(此处)折叠或打开

  1. volume management
  2.     type mgmt/glusterd
  3.     option working-directory /mnt/glusterd
  4.     option transport-type socket,rdma
  5.     option transport.socket.keepalive-time 10
  6.     option transport.socket.keepalive-interval 2
  7.     option transport.socket.read-fail-log off
  8.     option ping-timeout 0
  9.     option event-threads 1
  10. # option lock-timer 180
  11. # option transport.address-family inet6
  12. # option base-port 49152
  13. end-volume
5.启动 glusterfs

systemctl enable glusterd.service
systemctl start glusterd.service
systemctl status glusterd.service


三: 配置 glusterfs

1.开放端口
iptables -I INPUT -p tcp --dport 24007 -j ACCEPT

2.创建存储目录
mkdir /opt/gfs_data

3.添加节点到集群
10.116.137.196上执行以下操作:
gluster peer probe 10.116.82.28
gluster peer probe 10.116.36.57

4.查看集群状态
gluster peer status

点击(此处)折叠或打开

  1. Number of Peers: 2

  2. Hostname: 10.116.82.28
  3. Uuid: f73138ca-e32e-4d87-a99d-cf842fc29447
  4. State: Peer in Cluster (Connected)

  5. Hostname: 10.116.36.57
  6. Uuid: 18e22d2c-049b-4b0c-8cc7-2560319e6c05
  7. State: Peer in Cluster (Connected)
  8. [root@iZwz95trb3stk6afg8oozuZ kubernetes]# clear
  9. [root@iZwz95trb3stk6afg8oozuZ kubernetes]# gluster volume create k8s-volume transport tcp 10.116.137.196:/mnt/gfs_data 10.116.82.28:/mnt/gfs_data 10.116.36.57:/mnt/gfs_data force
  10. volume create: k8s-volume: success: please start the volume to access data
  11. [root@iZwz95trb3stk6afg8oozuZ kubernetes]# gluster volume info
  12.  
  13. Volume Name: k8s-volume
  14. Type: Distribute
  15. Volume ID: 62900029-02c9-4870-951c-38fafd5f5d9b
  16. Status: Created
  17. Snapshot Count: 0
  18. Number of Bricks: 3
  19. Transport-type: tcp
  20. Bricks:
  21. Brick1: 10.116.137.196:/mnt/gfs_data
  22. Brick2: 10.116.82.28:/mnt/gfs_data
  23. Brick3: 10.116.36.57:/mnt/gfs_data
  24. Options Reconfigured:
  25. transport.address-family: inet
  26. nfs.disable: on

四: 配置 volume

1.volume的模式
a.分布卷(默认模式):即DHT, 也叫 分布卷: 将文件已hash算法随机分布到 一台服务器节点中存储。
b.复制模式:即AFR, 创建volume 时带 replica x 数量: 将文件复制到 replica x 个节点中。
c.条带模式:即Striped, 创建volume 时带 stripe x 数量: 将文件切割成数据块,分别存储到 stripe x 个节点中 ( 类似raid 0 )。
d.分布式条带模式:最少需要4台服务器才能创建。 创建volume 时 stripe 2 server = 4 个节点: 是DHT 与 Striped 的组合型。
e.分布式复制模式:最少需要4台服务器才能创建。 创建volume 时 replica 2 server = 4 个节点:是DHT 与 AFR 的组合型。
f.条带复制卷模式:最少需要4台服务器才能创建。 创建volume 时 stripe 2 replica 2 server = 4 个节点: 是 Striped 与 AFR 的组合型。
g.三种模式混合: 至少需要8台 服务器才能创建。 stripe 2 replica 2 , 每4个节点 组成一个 组。

2.创建分布卷
gluster volume create k8s-volume transport tcp 10.116.137.196:/mnt/gfs_data 10.116.82.28:/mnt/gfs_data 10.116.36.57:/mnt/gfs_data force

3.查看volume状态
gluster volume info

点击(此处)折叠或打开

  1. Volume Name: k8s-volume
  2. Type: Distribute
  3. Volume ID: 62900029-02c9-4870-951c-38fafd5f5d9b
  4. Status: Created
  5. Snapshot Count: 0
  6. Number of Bricks: 3
  7. Transport-type: tcp
  8. Bricks:
  9. Brick1: 10.116.137.196:/mnt/gfs_data
  10. Brick2: 10.116.82.28:/mnt/gfs_data
  11. Brick3: 10.116.36.57:/mnt/gfs_data
  12. Options Reconfigured:
  13. transport.address-family: inet
  14. nfs.disable: on
4. 启动分布卷
gluster volume start k8s-volume

五: Glusterfs调优

1.开启指定volume的配额
gluster volume quota k8s-volume enable
2.限制指定volume的配额
gluster volume quota k8s-volume limit-usage / 5GB
3.设置cache大小, 默认32MB
gluster volume set k8s-volume performance.cache-size 64MB
4.设置io线程, 太大会导致进程崩溃

gluster volume set k8s-volume performance.io-thread-count 16
5.设置网络检测时间, 默认42s
gluster volume set k8s-volume network.ping-timeout 10
6.设置写缓冲区的大小, 默认1M
gluster volume set k8s-volume performance.write-behind-window-size 512MB

六: Kubernetes中配置glusterfs

1. 配置 endpoints(glusterfs-endpoints.json)

点击(此处)折叠或打开

  1. {
  2.   "kind": "Endpoints",
  3.   "apiVersion": "v1",
  4.   "metadata": {
  5.     "name": "glusterfs-cluster"
  6.   },
  7.   "subsets": [
  8.     {
  9.       "addresses": [
  10.         {
  11.           "ip": "10.116.137.196"
  12.         }
  13.       ],
  14.       "ports": [
  15.         {
  16.           "port": 1990
  17.         }
  18.       ]
  19.     }
  20.   ]
  21. }
kubectl apply -f glusterfs-endpoints.json

2. 配置 service(glusterfs-service.json)

点击(此处)折叠或打开

  1. {
  2.   "kind": "Service",
  3.   "apiVersion": "v1",
  4.   "metadata": {
  5.     "name": "glusterfs-cluster"
  6.   },
  7.   "spec": {
  8.     "ports": [
  9.       {"port": 1990}
  10.     ]
  11.   }
  12. }
kubectl apply -f glusterfs-service.json

3. 创建测试 pod

点击(此处)折叠或打开

  1. {
  2.     "apiVersion": "v1",
  3.     "kind": "Pod",
  4.     "metadata": {
  5.         "name": "glusterfs"
  6.     },
  7.     "spec": {
  8.         "containers": [
  9.             {
  10.                 "name": "glusterfs",
  11.                 "image": "registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0",
  12.                 "volumeMounts": [
  13.                     {
  14.                         "mountPath": "/mnt/glusterfs",
  15.                         "name": "glusterfsvol"
  16.                     }
  17.                 ]
  18.             }
  19.         ],
  20.         "volumes": [
  21.             {
  22.                 "name": "glusterfsvol",
  23.                 "glusterfs": {
  24.                     "endpoints": "glusterfs-cluster",
  25.                     "path": "k8s-volume",
  26.                     "readOnly": true
  27.                 }
  28.             }
  29.         ]
  30.     }
  31. }
kubectl apply -f glusterfs-pod.json   在Pod所在的Node节点上执行 df -h 可以查看k8s-volume挂载目录

4.
配置PersistentVolume(glusterfs-pv.yaml)

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4.   name: gluster-dev-volume
  5. spec:
  6.   capacity:
  7.     storage: 1Gi
  8.   accessModes:
  9.     - ReadWriteMany
  10.   glusterfs:
  11.     endpoints: "glusterfs-cluster"
  12.     path: "k8s-volume"
  13.     readOnly: false
kubectl apply -f glusterfs-pv.yaml

5. 配置PVC(glusterfs-pvc.yaml)

点击(此处)折叠或打开

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4.   name: glusterfs-nginx
  5. spec:
  6.   accessModes:
  7.     - ReadWriteMany
  8.   resources:
  9.     requests:
  10.       storage: 1Gi
kubectl apply -f glusterfs-pvc.yaml

6. 创建nginx deployment 挂载 volume(nginx-deployment.yaml)

点击(此处)折叠或打开

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4.   name: nginx-dm
  5. spec:
  6.   replicas: 2
  7.   template:
  8.     metadata:
  9.       labels:
  10.         name: nginx
  11.     spec:
  12.       containers:
  13.         - name: nginx
  14.           image: nginx:latest
  15.           imagePullPolicy: IfNotPresent
  16.           ports:
  17.             - containerPort: 80
  18.           volumeMounts:
  19.             - name: gluster-dev-volume
  20.               mountPath: "/usr/share/nginx/html"
  21.       volumes:
  22.       - name: gluster-dev-volume
  23.         persistentVolumeClaim:
  24.           claimName: glusterfs-nginx
kubectl apply -f nginx-deployment.yaml

a. 查看 deployment
kubectl get pods |grep nginx-dm

点击(此处)折叠或打开

  1. nginx-dm-64dcbb8d55-pp9vn 1/1 Running 0 1h
  2. nginx-dm-64dcbb8d55-sclj6 1/1 Running 0 1h
b.查看挂载
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- df -h

点击(此处)折叠或打开

  1. Filesystem Size Used Avail Use% Mounted on
  2. overlay 40G 23G 16G 60% /
  3. tmpfs 3.7G 0 3.7G 0% /dev
  4. tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
  5. /dev/xvda1 40G 23G 16G 60% /etc/hosts
  6. shm 64M 0 64M 0% /dev/shm
  7. 10.116.137.196:k8s-volume 5.0G 0 5.0G 0% /usr/share/nginx/html
  8. tmpfs 3.7G 12K 3.7G 1% /run/secrets/kubernetes.io/serviceaccount
c. 创建文件测试
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- touch /usr/share/nginx/html/index.html
kubectl exec -it nginx-dm-64dcbb8d55-sclj6  -- ls -lt /usr/share/nginx/html/index.html

d. 验证 glusterfs
因为我们使用分布卷,所以可以看到某个节点中有文件
ls /mnt/gfs_data/
index.html


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2153444/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-2153444/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
软件包错误: glusterfs-api-6.0-61.el7.x86_64 (updates) 是指在安装或升级软件包时发生了问题。 常见的软件包错误有以下几种可能的原因和解决方法: 1. 依赖关系错误:软件包可能需要依赖其他的软件包或库文件,但是这些依赖关系无法满足,导致安装失败。解决方法是检查其他相关的依赖软件包是否已安装,并升级这些软件包。 2. 软件源错误:软件包可能来自于错误的软件源,或者软件源配置有误。解决方法是检查软件源的配置文件是否正确,并使用安全和可信任的软件源进行安装。 3. 版本冲突错误:软件包可能与已安装的其他软件包存在版本冲突,导致无法安装。解决方法是卸载冲突的软件包,或者升级已安装软件包的版本。 4. 损坏或缺失文件错误:软件包可能下载的文件损坏或缺失,导致安装失败。解决方法是重新下载软件包或检查网络连接是否正常。 5. 系统环境错误:软件包可能与系统环境不兼容或不匹配,导致安装失败。解决方法是检查系统的操作系统版本和硬件要求,并确保满足软件包的要求。 总之,软件包错误可能由多种原因造成,解决方法取决于具体的错误原因。通过检查依赖关系、软件源、版本冲突、文件完整性和系统环境等方面,可以尝试解决软件包错误。如有需要,还可以参考软件包提供的文档或咨询相关技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值