背景

近来在研究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: Hostname: node01
Uuid: c7c12e58-a7de--b11f-52205e3b527c
State: Peer in Cluster (Connected) Hostname: node02
Uuid: 7af10306--424c-b1e7-85c4b22ec5c2
State: Peer in Cluster (Connected)

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

heketi的安装和配置

heketi简介

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

heketi的安装

主节点安装heketi

[root@master ~]# yum install heketi

所有节点安装heketi-client

yum install heketi-client

heketi的配置

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

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

注意: 上面配置中的sudo是必须的, 否则会提示权限不足的。

准备用户和配置ssh免密码

#master节点
[root@master heketi]# id heketi
uid=(heketi) gid=(heketi) groups=(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  cluster create 
{"id":"0c15099b0905cf490004ff3a4f0991e4","nodes":[],"volumes":[],"block":true,"file":true,"blockvolumes":[]}
# 节点管理(其中集群id为上面命令的返回值)
[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: pvc1
namespace: default
annotations:
volume.beta.kubernetes.io/storage-class: "glusterfs"
spec:
accessModes:
- ReadWriteMany
resources:
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

glusterfs+heketi为k8s提供共享存储的更多相关文章

  1. k8s之共享存储概述以及演示

    共享存储机制 k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷. 另外,k8s还开放了两个资源,分别是P ...

  2. 通过Heketi管理GlusterFS为K8S集群提供持久化存储

    参考文档: Github project:https://github.com/heketi/heketi MANAGING VOLUMES USING HEKETI:https://access.r ...

  3. 独立部署GlusterFS+Heketi实现Kubernetes共享存储

    目录 环境 glusterfs配置 安装 测试 heketi配置 部署 简介 修改heketi配置文件 配置ssh密钥 启动heketi 生产案例 heketi添加glusterfs 添加cluste ...

  4. k8s入坑之路(15)kubernetes共享存储与StatefulSet有状态

    共享存储 docker默认是无状态,当有状态服务时需要用到共享存储 为什么需要共享存储: 1.最常见有状态服务,本地存储有些程序会把文件保存在服务器目录中,如果容器重新启停则会丢失. 2.如果使用vo ...

  5. [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置

    所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...

  6. K8S实战-构建Django项目-03-使用共享存储

    上篇博文,发布之后,正好跟着双十一,不知道大家剁手了没~~.好啦,言归正传先声明一下,每周1,3,5更新教程,大家如果想要了解更多的教程可以重温一下之前的教程或者,关注崔格拉斯 公众号,大家想要源码的 ...

  7. 虚拟化(四):vsphere高可用功能前提-共享存储搭建(使用微软提供的iscsi software target,也可以使用免费开源的openfiler)

    虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...

  8. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

  9. k8s 网络持久化存储之StorageClass(如何一步步实现动态持久化存储)

    StorageClass的作用: 创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦. 而且开发人员在申请PVC资源时,还不一定有匹配条 ...

随机推荐

  1. LocalDate、LocalDateTime、LocalTime开发小结

    在我之前的文章<[整理]Java 8新特性总结 >中有提到Date/Time API (JSR 310)对日期与时间的处理.它将服务端对时间的处理进行了统一,使得对时间的处理更加规范和统一 ...

  2. [C++一本通-图论算法] 例4-4 最小花费

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 输入输 ...

  3. PowerApp Document

    https://docs.microsoft.com/en-us/powerapps/ PowerApp Document: https://docs.microsoft.com/en-us/powe ...

  4. xshell登陆服务器步骤

    Xshell远程连接服务器 打开xshell后找到左上角第一个“文件”点击,弹出来一个下拉框,选择“新建”点击(或者直接按下快捷键“Alt+n”).         点击“新建”之后就会出现下面这样一 ...

  5. Android手机ROM刷机简介

    这一段时间刷了一堆ROM,安卓系列.CM.Hero.OldMos.隔壁新出的Android2.0,反正都尝了一下鲜,手机的照相机也刷得再也启不来了(不知道什么原因,杯具).有话说:"久病成良 ...

  6. yum出现Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile解决方法

    yum出现Could not retrieve mirrorlist解决方法 Loaded plugins: fastestmirror, securityLoading mirror speeds ...

  7. nmon监控分析

    一.下载软件安装 wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz tar xf nmon_linux_14i ...

  8. 大数相加 Big Num

    代码: #include<stdio.h>#include<algorithm>#include<iostream>#include<string.h> ...

  9. windows运维如何批量远程桌面

    作用:windows下批量管理远程桌面, http://www.appmazing.com/ 官方站点  http://www.appmazing.com/files/RDO_Setup.exe wi ...

  10. 吴恩达机器学习笔记52-异常检测的问题动机与高斯分布(Problem Motivation of Anomaly Detection& Gaussian Distribution)

    一.问题动机 异常检测(Anomaly detection)问题是机器学习算法的一个常见应用.这种算法的一个有趣之处在于:它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题. 给 ...