背景

近来在研究k8s,学习到pv、pvc 、storageclass的时候,自己捣腾的时候使用nfs手工提供pv的方式,看到官方文档大量文档都是使用storageclass来定义一个后端存储服务, 使用pvc来自动申请pv,

所以花了点时间研究了下glusterfs配合heketi如果为k8s动态提供存储。

环境

主机名 ip地址 角色 备注
master 192.168.16.10 k8s-master,glusterfs,heketi  heketi只需要一个节点部署就可以了。
node01 192.168.16.11 k8s-node,glusterfs  
node02 192.168.16.12 k8s-node,glusterfs  

gluster安装配置

gluster安装

下面操作需要在三个节点都需要执行。

# centos 需要安装下 centos-release-gluster5, 此包提供gluster相关的包

[root@master ~]# yum install centos-release-gluster5
[root@master ~]# yum install yum install glusterfs-server fuse glusterfs-client# 开机自启
[root@master ~]# systemctl enable glusterd && systemctl restart glusterd && systemctl status glusterd

gluster配置

# 各个节点启动后, 需要使用peer探测各个节点[root@master ~]# gluster peer probe  node01
[root@master ~]# gluster peer probe  node02# 查看探测后的状态
[root@master ~]# gluster peer status
Number of Peers: 2Hostname: node01
Uuid: c7c12e58-a7de-4948-b11f-52205e3b527c
State: Peer in Cluster (Connected)Hostname: node02
Uuid: 7af10306-5643-424c-b1e7-85c4b22ec5c2
State: Peer in Cluster (Connected)

这一步骤确保集群的各个节点都是connected的。

heketi的安装和配置

heketi简介

我们这里使用heketi注意是给glusterfs提供rest的api服务, 这样就相当于给glusterfs和k8s之间架通了桥梁。我们的k8s就可以使用heketi提供的rest api完成对glusterfs的pv申请和管理。

heketi的安装

主需要在主节点一个节点安装就可以了。

[root@master ~]# yum install heketi

heketi的配置

[root@master ~]# cd /etc/heketi/
[root@master heketi]# ll
total 4
-rw-r--r-- 1 root root 1927 Sep 13 05:37 heketi.json# 备份一下。
[root@master heketi]# cp heketi.json  heketi.json.default
[root@master heketi]# vim heketi.json
# 修改如下配置
"port": "18080",
"use_auth": true,"admin": {"key": "admin"},"user": {"key": "admin"}"executor": "ssh","sshexec": {"keyfile": "/home/heketi/.ssh/id_rsa","user": "heketi","port": "22",      "sudo": true,"fstab": "/etc/fstab"},

heketi有三种ececutor, 我们这里选择了生产环境中推荐的ssh方式, 由于大部分场景下root是禁止远程登录的 所以这里使用heketi用户来执行。

准备用户和配置ssh免密码

#master节点
[root@master heketi]# id heketi
uid=995(heketi) gid=992(heketi) groups=992(heketi)# 原有的账户无home,无shell. 删除添加新的。
[root@master heketi]# userdel heketi
[root@master heketi]# useradd heketi
[root@master ~]#  echo "heketi" |passwd --stdin heketi # 切换到heketi生成key
[root@master heketi]# su - heketi
[heketi@master ~]$ ssh-keygen # node01节点
[root@node01 ~]# useradd heketi
[root@node01 ~]# echo "heketi" |passwd --stdin heketi
[root@node01 ~]# su - heketi
[heketi@node01 ~]$ ssh-keygen # node02节点
[root@node02 ~]# useradd heketi
[root@node02 ~]# echo "heketi" |passwd --stdin heketi
[root@node02 ~]# su - heketi
[heketi@node01 ~]$ ssh-keygen # ssh免密码信任
[heketi@master ~]$ ssh-copy-id  master
[heketi@master ~]$ ssh-copy-id  node01
[heketi@master ~]$ ssh-copy-id  node02

# 给heketisudo权限[root@master heketi]# echo "heketi    ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
[root@node01 heketi]# echo "heketi    ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
[root@node02 heketi]# echo "heketi    ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

启动heketi和测试heketi

# 这一个步骤是必须的, 默认的yum安装后,这个目录的所有者都是root的。 但是安装提供的service文件的user又是heketi. 导致不修改权限就是启动不起来的,坑啊。[root@master ~]# chown heketi:heketi /etc/heketi/ -R || chown heketi:heketi /var/lib/heketi -R 
[root@master ~]# systemctl enable heketi  && systemctl start heketi && systemctl status heketi# 测试下heketi接口问题
[root@master ~]#  heketi-cli --user admin --secret admin --server http://192.168.16.10:18080 --json  cluster create
{"id":"90f60d4e461bfb1dbd3fe3941740615c","nodes":[],"volumes":[],"block":true,"file":true,"blockvolumes":[]}[root@master ~]#  heketi-cli --user admin --secret admin --server http://192.168.16.10:18080 --json  cluster delete 90f60d4e461bfb1dbd3fe3941740615c

创建集群

# 节点管理
[root@master ~]#   heketi-cli --user admin --secret admin --server http://192.168.16.10:18080 --json  node add --cluster "0c15099b0905cf490004ff3a4f0991e4" --management-host-name 192.168.16.10  --storage-host-name 192.168.16.10  --zone 1
[root@master ~]#   heketi-cli --user admin --secret admin --server htt05cf490004ff3a4f0991e4" --management-host-name 192.168.16.11  --storage-host-name 192.168.16.11  --zone 1
heketi-cli --user admin --secret admin --server htt05cf490004ff3a4f0991e4" --management-host-name 192.168.16.12  --storage-host-name 192.168.16.12  --zone 1  

# 添加设备[root@master heketi]# heketi-cli --user admin --secret admin --server http://192.168.16.10:18080   node list
Id:179b08165b56df018a0ba295e2c78f22     Cluster:0c15099b0905cf490004ff3a4f0991e4
Id:a547a8327d3ba9fc51fe5e25d95236cb     Cluster:0c15099b0905cf490004ff3a4f0991e4
Id:c65521c53de76c3f70d2ec828498a261     Cluster:0c15099b0905cf490004ff3a4f0991e4
[root@master heketi]# heketi-cli --user admin --secret admin --server http://192.168.16.10:18080   device add --name "/dev/sdb" --node 179b08165b56df018a0ba295e2c78f22
Device added successfully
[root@master heketi]# heketi-cli --user admin --secret admin --server http://192.168.16.10:18080   device add --name "/dev/sdb" --node a547a8327d3ba9fc51fe5e25d95236cb
Device added successfully
[root@master heketi]# heketi-cli --user admin --secret admin --server http://192.168.16.10:18080   device add --name "/dev/sdb" --node c65521c53de76c3f70d2ec828498a261
Device added successfully

也有直接使用拓扑文件load方式的。 具体可以参考: https://github.com/heketi/heketi/blob/master/docs/admin/topology.md

k8s使用glusterfs

k8s中使用glusterfs的时候, 会根据pvc的申请自动创建对应的pv, 然后绑定。 这样我们在pod里面就可以指定具体的pvc了。

创建storageclass

[root@master ~]# cat k8s.storageclass.yml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://192.16.10:18080"
clusterid: "0c15099b0905cf490004ff3a4f0991e4"
restauthenabled: "true"
restuser: "admin"
restuserkey: "admin"
gidMin: "40000"
gidMax: "50000"
volumetype: "replicate:2"

创建pvc

[root@master ~]# cat pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: pvc1namespace: defaultannotations:volume.beta.kubernetes.io/storage-class: "glusterfs"
spec:accessModes:- ReadWriteManyresources:requests:storage: 2Gi
[root@master ~]# kubectl apply -f pvc.yml
[root@master ~]# kubectl get pvc
NAME   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc1   Bound    pvc-affe7efc-21fe-11e9-9d1f-000c2987cf81   2Gi        RWX            glusterfs      19s

转载于:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_54_kubernates_glusterfs-heketi.html

glusterfs+heketi为k8s提供共享存储相关推荐

  1. NFS为lamp提供共享存储实践

    本文旨在实现NFS为lamp环境web站点提供共享存储. 1.实验需求 (1)nfs server导出/data/application/web,在目录中提供wordpress; (2)nfs cli ...

  2. 并行多核体系结构基础 Yan Solihin 第6章 共享存储多处理器简介 摘录

    本章讨论需要什么样的硬件支持才能保证多处理器系统上基于共享存储的并行程序的正确执行.将介绍三种主要类型的硬件支持:1)缓存一致性协议,确保多个处理器看到的缓存数据是一致的:2)存储一致性模型,确保存储 ...

  3. k8s技术预研13--kubernetes共享存储原理与动态存储供应用使用示例

    1.共享存储机制概述 Kubernetes对于有状态的容器应用或者对于数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生 ...

  4. k8s中使用MySQL共享存储_Kubernetes创建挂载共享存储的容器

    在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务器上如:NFS,GlusterFS,ceph等:一般目前主流的还是使用ceph. ...

  5. k8s部署-45-k8s共享存储(上)

    什么最重要了,当然是存储了,不管你存储的是文件还是数据,图片还是音频,都是非常重要的,那么我们通过什么方式来避免数据的单点故障呢?如何保证存储的可靠性呢?下面我们来看看. PS:本篇为理论,下一篇为实 ...

  6. K8s不同node如何共享存储

    试用markdown阅读体验更佳 环境准备 1.所有节点 2.主节点 3.从节点 4.原生方式数据挂载 1.PV&PVC 1.创建pv池 2.PVC创建与绑定 同一个pod内不同contain ...

  7. kubernetes云原生纪元:共享存储-PVPVC(上)

    kubernetes云原生纪元:共享存储-PV&&PVC(上) 之前我们学习的都是无状态的服务,如果有状态的服务就非常麻烦,比如有的服务会把自己文件存放到自己服务器的目录上,如果直接嵌 ...

  8. 20.Kubernetes共享存储

    Kubermetes对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用 ...

  9. k8s入门:存储(storage)

    系列文章 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:StatefulS ...

最新文章

  1. model.fit以及model.fit_generator区别及用法
  2. C#程序员干货系列之语音识别
  3. 机器学习:一种新的编程范式
  4. oracle遇null赋默认值,使用hibernate annotation 为非空列加上默认值
  5. 依赖注入[5]: 创建一个简易版的DI框架[下篇]
  6. eclipse4.2配置tomcat+jdk
  7. 彷徨了两天,天慢慢晴朗了,心也爽朗了……
  8. python机器学习库sklearn——k均值聚类
  9. c语言贪婪遗传算法算法背包问题,求高手帮我用C语言写一个运用贪心和遗传算法求解背包问题的程序。。。。谢谢!!!!!!十分紧急!!!...
  10. 《软件项目管理案例教程》应考概念要点及重点整理
  11. android版信用卡还款提醒器
  12. chrome打不开axure的html文件解决方法
  13. http://www.feedsky.com/help_publishwidget.html
  14. 2022年医院三基考试肿瘤相关训练题及答案
  15. IDEA光标变成白色粗条的问题
  16. python工资津贴的计算和排序-Python:如何排序(sort)
  17. Java web项目如何在服务器上跑起来(有源码)
  18. 电大考试计算机应用基础考试试题,电大计算机应用基础网络教育统考考试(2013真题卷)...
  19. Linux ln -s目录,Linux 中的 ln 命令
  20. 滴滴的拼车功能怎么让大家用的更多

热门文章

  1. 雅虎更名为Altaba首日股价大涨4%
  2. slickedit结合msys调试x264、ffmpeg
  3. php 获取优酷视频教程,php获取优酷土豆页面中视频swf播放器地址_PHP教程
  4. Vue全家桶之组件化开发
  5. android+3d引擎,基于Android系统3D引擎的设计与实现
  6. Nginx 配置静态资源服务器
  7. 焊接培训,焊工培训的这些坑人套路你知道?
  8. HDU 4284 Travel(12年天津 状态DP)
  9. 代码无错就是优?-简单工厂模式
  10. JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调录像回放视频PS码流并解析预览图像