在Kubernetes中部署GlusterFS+Heketi
简介
在上一篇《独立部署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的更多相关文章
- 概念验证:在Kubernetes中部署ABAP
对于将SAP ABAP应用服务器组件容器化和在Kubernetes中部署它们,我们在SPA LinuxLab中做了概念验证(PoC),本文将介绍一些我们的发现和经验.本文会也会指出这项工作的一些潜在的 ...
- Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型
机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...
- 在 Kubernetes 中部署 Redis 集群
在 Kubernetes 中部署 Redis 集群 在Kubernetes中部署Redis集群面临挑战,因为每个 Redis 实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此,我们需 ...
- 独立部署GlusterFS+Heketi实现Kubernetes共享存储
目录 环境 glusterfs配置 安装 测试 heketi配置 部署 简介 修改heketi配置文件 配置ssh密钥 启动heketi 生产案例 heketi添加glusterfs 添加cluste ...
- Helm, 在Kubernetes中部署应用的利器
一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...
- Kubernetes 中部署 NFS-Subdir-External-Provisioner 为 NFS 提供动态分配卷
文章转载自:http://www.mydlq.club/article/109/ 系统环境: 操作系统: CentOS 7.9 Docker 版本: 19.03.13 Kubernetes 版本: 1 ...
- 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务
在CentOS7环境下,kubernetes单机版环境,成功部署一个服务,在虚拟机中访问服务没问题,下面这样: curl http://172.27.73.26:8888/eureka-server/ ...
- kubernetes中部署kube-prometheus项目解决ControllerManager与Scheduler无法监控问题
文章转载自:https://www.kococ.cn/20210302/cid=697.html 一.问题描述 在部署 kube-prometheus 到 kubernetes 集群中总会遇到一个问题 ...
- Kubernetes 中部署 MySQL 集群
文章转载自:https://www.cnblogs.com/ludongguoa/p/15319861.html 一般情况下 Kubernetes 可以通过 ReplicaSet 以一个 Pod 模板 ...
随机推荐
- 顶级项目孵化的故事系列——Kylin的心路历程【转】
现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache ...
- Django的rest_framework认证组件之全局设置源码解析
前言: 在我的上一篇博客我介绍了一下单独为某条url设置认证,但是如果我们想对所有的url设置认证,该怎么做呢?我们这篇博客就是给大家介绍一下在Rest_framework中如何实现全局的设置认证组件 ...
- .NET, ASP.NET, ADO.NET, C# 区别
1. .NET 是一套框架 1.1 CLR (common language runtime) 公共语言运行时,-提供内在管理,代码安全性检测等功能 1.1.1 CLS (common langua ...
- Sql Server 三个很有用的函数
好久没有写有关SqlServer 数据库方面技术的文章了,正好今天遇到了一个问题,我就把这个当做一个练习记录下来.今天遇到一个麻烦事,详情如下:公司买了一个系统,在这个系统里面有一个“充值卡”的功能, ...
- windows 性能监视器常用计数器
转载地址:https://www.jianshu.com/p/f4406c29542a?utm_campaign=maleskine&utm_content=note&utm_medi ...
- Linux学习---GCC编译过程
(一)GCC编译过程 预处理 cpp -o a.i a.c //生成预处理文件 等同于[gcc -E] //预处理为将宏定义(#define)等进行替换. 编译 /user/lib/gcc/i ...
- 算法竞赛新编??---WERTYU,UVa10082
P47 例题:3-2 WERTYU,UVA10082 注:作者的想法是找出输入字符在常量数组中的位置(使用for( i = 1; s[i] && s[i] != c;i++);语句来 ...
- MFC设置单文档保存格式以及标题
在使用MFC编写单文档程序时,有时候需要将编辑的内容序列化为文件,使该文件可以直接以自己的程序打开,这时候需要在保存时将文件后缀改为我们想要的格式. 步骤 打开String Table,找到IDR_M ...
- c++类对象的内存分布
要想知道c++类对象的内存布局, 可以有多种方式,比如: 1)输出成员变量的偏移, 通过offsetof宏来得到 2)通过调试器查看, 比如常用的VS 1.没有数据成员的对象 class A{ }; ...
- HSmartWindowControl之安装篇 (Visual Studio 2013 & Halcon 18)
1.环境简介 Visual Studio 2013社区版 Halcon18.05 2.使用Nuget在VS工程中安装Halcon插件 搜索栏输入关键字halcon,出现两个插件,分别是halcon语言 ...