简介

在上一篇《独立部署GlusterFS+Heketi实现Kubernetes共享存储》中,我们说明了如何手动部署GlusterFS+Heketi来提供Kubernetes的共享存储。

然而,因为Heketi无法集群部署,所以这种部署方式中,Heketi是一个单点。要尽可能的消除这个单点,一种方式是直接将Heketi部署到Kubernetes集群,复用Deployment的特性来确保heketi容器可用。

Gluster-Kubernetes

其实如果想直接将heketi和glusterfs直接部署到kubernetes中,已经有开源软件帮我们做了这些事情。这就是gluster-kuberntes项目。

但是我们这篇文档并不打算展开来说Gluster-Kubernetes项目,如果对该项目有兴趣,可以自行查阅相关文档。本篇文档将通过手动在kubernetes集群中部署一个Glusterfs+Heketi来展示其是如何在kubernetes中运行的。

部署

环境准备

主机名 系统 ip地址 角色
ops-k8s-175 ubuntu16.04 192.168.75.175 k8s-node,glusterfs
ops-k8s-176 ubuntu16.04 192.168.75.176 k8s-node,glusterfs
ops-k8s-177 ubuntu16.04 192.168.75.177 k8s-node,glusterfs
ops-k8s-178 ubuntu16.04 192.168.175.178 k8s-node,glusterfs

下载相关文件

其实heketi官方在其源码包及其heketi-client的二进制包中都包含了将glusterfs及heketi部署到kubernetes的相关示例文件。github上地址如下:https://github.com/heketi/heketi/tree/master/extras/kubernetes

我们可以直接将其全部下载到本地:

wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/glusterfs-daemonset.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-bootstrap.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-deployment.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-service-account.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-start.sh
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi.json
wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/topology-sample.json

部署glusterfs

在上面下载的文件中,glusterfs-daemonset.json就是用于部署glusterfs的配置文件,将glusterfs作为daemonset的方式运行。可以通过将指定stoargenode=glusterfs标签来选择用于部署glusterfs的节点:

kubectl label node 192.168.75.175 storagenode=glusterfs
kubectl label node 192.168.75.176 storagenode=glusterfs
kubectl label node 192.168.75.177 storagenode=glusterfs
kubectl label node 192.168.75.178 storagenode=glusterfs

修改glusterfs-daemonset.json使用的image为gluster/gluster-centos:gluster4u0_centos7,然后执行该json文件:

kubectl create -f glusterfs-daemonset.json

即可完成glusterfs部署

部署heketi server端

部署heketi之前,需要先为heketi创建serviceaccount:

kubectl create -f heketi-service-account.json

然后为该serviceaccount授权,为其绑定相应的权限来控制gluster的pod,执行如下操作:

kubectl create clusterrolebinding heketi-gluster-admin --clusterrole=edit --serviceaccount=default:heketi-service-account

接着,创建一个Kubernetes secret来保存我们Heketi实例的配置。必须将配置文件的执行程序设置为 kubernetes才能让Heketi server控制gluster pod。

heketi.json的配置修改如下:

......
#打开认证
"use_auth": true,
......
#修改admin用户的key
"key": "adminkey"
......
#修改执行插件为kubernetes
"executor": "kubernetes",
......
#备份heketi数据库
"backup_db_to_kube_secret": true

执行如下操作,将heketi.json创建为kubernetes的secret:

kubectl create secret generic heketi-config-secret --from-file=./heketi.json

接着部署heketi的运行容器,配置文件为heketi-bootstrap.json,需要修改image为heketi/heketi:7

kubectl create -f heketi-bootstrap.json

通过创建ingress的方式将heketi暴露出来:

# cat heketi.ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
name: heketi
spec:
rules:
- host: heketi.breezey.io
http:
paths:
- path: /
backend:
serviceName: deploy-heketi
servicePort: 8080 # kubectl create -f hekti.ingress.yaml

至此,完成heketi server端部署

配置heketi client

需要说明的是,heketi的客户端版本需要与server端对应,server端我们使用的是7.0,所以客户端也需要下载7.0版本:

wget https://github.com/heketi/heketi/releases/download/v7.0.0/heketi-client-v7.0.0.linux.amd64.tar.gz

修改topology-sample.json文件,如下:

{
"clusters": [
{
"nodes": [
{
"node": {
"hostnames": {
"manage": [
"192.168.75.175"
],
"storage": [
"192.168.75.175"
]
},
"zone": 1
},
"devices": [
"/dev/vda2"
]
},
{
"node": {
"hostnames": {
"manage": [
"192.168.75.176"
],
"storage": [
"192.168.75.176"
]
},
"zone": 1
},
"devices": [
"/dev/vda2"
]
},
{
"node": {
"hostnames": {
"manage": [
"192.168.75.177"
],
"storage": [
"192.168.75.177"
]
},
"zone": 1
},
"devices": [
"/dev/vda2"
]
},
{
"node": {
"hostnames": {
"manage": [
"192.168.75.178"
],
"storage": [
"192.168.75.178"
]
},
"zone": 1
},
"devices": [
"/dev/vda2"
]
}
]
}
]
}

创建集群:

heketi-cli  topology load --json topology-sample.json

至此,完成了glusterfs和heketi在kubernetes中的部署,具体的使用可参考《独立部署GlusterFS+Heketi实现Kubernetes共享存储》

在Kubernetes中部署GlusterFS+Heketi的更多相关文章

  1. 概念验证:在Kubernetes中部署ABAP

    对于将SAP ABAP应用服务器组件容器化和在Kubernetes中部署它们,我们在SPA LinuxLab中做了概念验证(PoC),本文将介绍一些我们的发现和经验.本文会也会指出这项工作的一些潜在的 ...

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

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

  3. Helm, 在Kubernetes中部署应用的利器

    一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...

  4. 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务

    在CentOS7环境下,kubernetes单机版环境,成功部署一个服务,在虚拟机中访问服务没问题,下面这样: curl http://172.27.73.26:8888/eureka-server/ ...

  5. 关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储

    容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节:另外很多时候一个 Pod 中可 ...

  6. 附009.Kubernetes永久存储之GlusterFS独立部署

    一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...

  7. 如何将云原生工作负载映射到 Kubernetes 中的控制器

    作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...

  8. [译]Kubernetes 分布式应用部署和人脸识别 app 实例

    原文地址:KUBERNETES DISTRIBUTED APPLICATION DEPLOYMENT WITH SAMPLE FACE RECOGNITION APP 原文作者:skarlso 译文出 ...

  9. 在Kubernetes下部署Prometheus

    使用ConfigMaps管理应用配置 当使用Deployment管理和部署应用程序时,用户可以方便了对应用进行扩容或者缩容,从而产生多个Pod实例.为了 能够统一管理这些Pod的配置信息,在Kuber ...

随机推荐

  1. 不要遍历dom

    function selectProvince() { $.ajax( { type: "post", url: "/province/getStrType", ...

  2. css z-index

    使用z-index的position必须是relative或者是absolute

  3. UITableView中的cell的优化

    1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...

  4. 苹果 Mac OS X Yosemite 10.10 新功能特性总结 - 扁平化、主打跨设备的无缝连通性

    苹果在2014.06.03凌晨的 WWDC 2014 大会上正式发布了最新的 OS X Yosemite 桌面操作系统和 iOS 8 移动系统.虽然整场发布会的重心都在软件上,并没有硬件亮相,但软件上 ...

  5. dd大牛的《背包九讲》

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...

  6. C++中的引用到底是什么

    这也算是一个老生常谈的问题,写这个其实就是想趁着暑假把博客丰富一下. 咱随便在谷哥.度娘.病软引擎上搜搜都可以得到各种关于引用的解释,无非就是"引用不同于指针,引用是一个变量的别名" ...

  7. Duplicate entry '97112' for key 1

    1.错误描写叙述 2014-07-08 10:27:13,939 ERROR(com.you.conn.JDBCConnection:104) -com.mysql.jdbc.exceptions.j ...

  8. view测量

    一.测规格是由测量模式mode和测量大小size组成的,size好说,那测量模式mode代表什么含义呢.由上面的代码可知,测量模式有三类:    UNSPECIFIED    父控件不对你有任何限制, ...

  9. fcn训练及预测tgs数据集

    一.背景 kaggle上有这样一个题目,关于盐份预测的语义分割题目.TGS Salt Identification Challenge | Kaggle  https://www.kaggle.com ...

  10. Redux系列x:源码解析

    写在前面 redux的源码很简洁,除了applyMiddleware比较绕难以理解外,大部分还是 这里假设读者对redux有一定了解,就不科普redux的概念和API啥的啦,这部分建议直接看官方文档. ...