云原生存储解决方案Rook-Ceph与Rainbond结合的实践
基础不牢,地动山摇。无论是何种体系架构,底层存储的选择都是一个值得探讨的话题。存储承载着业务的数据,其性能直接影响到业务应用的实际表现。也正因为存储和业务的数据关联紧密,其可靠性也必须得到关注,存储的失效一旦导致业务数据丢失,那将会是一场灾难级别的事故。
1. 云原生时代的存储选择之路
最近几年,我的工作内容始终围绕着客户 Kubernetes 集群的建设。如何为客户的 Kubernetes 集群选择一款稳定可靠、性能表现优异的存储解决方案,这样的问题一直困扰着我。
存储卷可以在 Pod 漂移到其他节点后重新挂载这一最基础的功能性要求,让我一开始就把目光放在了共享文件系统这一存储类型上。最开始选择了 Nfs,到后来又投入了 Glusterfs 的怀抱,直到最近开始努力探索其他更好的云原生存储解决方案,这一路走来也让我对各种存储有了一定的了解。它们各自有着自己的特点:
Nfs:Nfs 是一种老牌的基于网络共享文件的存储解决方案。它的优点是简单高效。它的缺点也比较明显,服务端单点故障,数据没有复制机制。在某些对可靠性要求不高的场景下,Nfs依然是不二之选。
Glusterfs:这是一种开源的分布式共享存储解决方案。相对于 Nfs 而言,Gfs 通过多副本复制集提升了数据的可靠性,添加 Brick 的机制也让存储集群的扩展不再受限于一台服务器。Gfs 一度是我部在生产环境下的首选,通过将复制因子设置为 3 ,保障了数据的可靠性的同时,又能够避免分布式系统下的数据脑裂的问题。伴随 Gfs 一起前进了很久之后,我们也发现了它在密集小文件读写场景下的性能短板。而且单一的共享文件系统类型的存储,也渐渐不再满足我们的使用场景需要。
我们在寻找更合适的存储这一道路上一直没有停止探索。这两年云原生概念炙手可热,社区中不断涌现出来各种云原生领域项目,其中也不乏存储相关的项目。最开始,我们将目光放在 Ceph 身上,它最吸引我们的是可以提供高性能的块设备类型存储。然而被其复杂的部署方式、较高的运维门槛一度劝退。而 CNCF 毕业项目 Rook 的出现,终于铲平了接触 Ceph 的最后一道门槛。
Rook 项目提供了一种云原生存储编排工具,为各种类型的存储提供平台级、框架级的支持,统管了存储软件的安装、运维。Rook 在 2018 年发布的 0.9 版本中,正式将 Ceph Operator 作为稳定支持的特性,迄今已经数年。使用 Rook 部署和管理生产级别的 Ceph 集群还是非常稳健的。
相对于 Gfs ,Rook-Ceph 提供了性能极高的块设备类型存储,这相当于为 Pod 挂载了一块硬盘,应对密集小文件读写场景并非难事。Rook-Ceph 除了能够提供块设备类型存储之外,也可以基于 Cephfs 提供分布式共享存储,以及基于 S3 协议的对象存储。多种存储类型统一管理,并提供了可视化管理界面,对于运维人员非常友好。
作为 CNCF 毕业项目,Rook-Ceph 对云原生场景的支持毋庸置疑。部署完成的 Rook-Ceph 集群提供了 CSI 插件,以 StorageClass 的形式面向 Kubernetes 供应数据卷,对于兼容 CSI 规范的各类云原生 PaaS 平台也非常友好。
2. Rainbond与Rook的对接
在 Rainbond V5.7.0-release 版本中,添加了对 Kubernetes CSI 容器存储接口的支持。
Rainbond 在安装部署阶段,就会引用 Cephfs 来部署默认为所有服务组件提供的共享存储。而对于有状态的服务组件而言,添加持久化存储时,可以选择当前集群中所有可用的 StorageClass,通过选择 rook-ceph-block
即可申请块设备进行挂载,全程图形化界面操作,十分方便。
如何部署 Rook-Ceph 并对接到 Rainbond 之中,请参考文档 Rook-Ceph 对接方案 。
3. 使用体验
这个章节,我会以直观的方式,描述在 Rainbond 对接了 Rook-Ceph 存储之后的各种使用体验。
3.1 使用共享存储
Rainbond 在安装阶段通过指定参数来对接 Cephfs 作为集群共享存储。在使用 Helm 安装 Rainbond 的过程中,关键的对接参数如下:
--set Cluster.RWX.enable=true \
--set Cluster.RWX.config.storageClassName=rook-cephfs \
--set Cluster.RWO.enable=true \
--set Cluster.RWO.storageClassName=rook-ceph-block
对于任意一个部署在 Rainbond 平台上的服务组件而言,仅需要在挂载持久化存储时,选择默认的共享存储,即相当于将数据持久化的保存进了 Cephfs 文件系统中。
集群中使用组件英文名可以过滤查询所生成的 PV 资源:
$ kubectl get pv | grep mysqlcephfs
pvc-faa3e796-44cd-4aa0-b9c9-62fa0fbc8417 500Gi RWX Retain Bound guox-system/manual7-volume-mysqlcephfs-0 rainbondsssc 2m7s
3.2 挂载块设备
除了默认的共享存储之外,其他所有集群中的 StorageClass 都面向有状态服务开放。手动选择 rook-ceph-block
即可创建块设备类型存储,并挂载给 Pod 使用。当服务组件拥有多个实例时,每个 Pod 都会生成一个块设备挂载使用。
查询所生成的 PV 资源:
$ kubectl get pv | grep mysql6-0
pvc-5172cb7a-cf5b-4770-afff-153c981ab09b 50Gi RWO Delete Bound guox-system/manual6-app-a710316d-mysql6-0 rook-ceph-block 5h15m
3.3 开启dashboard
Rook-Ceph 默认部署时安装了可视化操作界面 Ceph-dashboard。在这里可以监控整个存储集群,也可以基于图形化界面操作更改各种存储类型的配置。
修改 Ceph 集群配置,禁用 dashboard 内置 ssl:
$ kubectl -n rook-ceph edit cephcluster -n rook-ceph rook-ceph
# 修改 ssl 为 false
spec:
dashboard:
enabled: true
ssl: false
# 重启 operator 使配置生效
$ kubectl delete po -l app=rook-ceph-operator -n rook-ceph
$ kubectl -n rook-ceph get service rook-ceph-mgr-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-mgr-dashboard ClusterIP 10.43.210.36 <none> 7000/TCP 118m
获取svc,在平台上使用第三方组件的形式代理,开启对外服务地址后,即可经过网关访问 dashboard。
访问到仪表板后,默认用户为admin
,在服务器执行以下命令获取密码:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
3.4 使用对象存储
请参考文档 Rook-Ceph 部署对接 ,可以在 Rook-Ceph 中部署对象存储。只需要将对象存储的 service ClusterIP 通过第三方服务代理,我们就可以得到一个可以被同个控制台纳管的多个集群同时访问的对象存储地址。Rainbond 可以基于这一特性,实现云端备份迁移功能。
获取对象存储的 svc 地址:
$ kubectl -n rook-ceph get service rook-ceph-rgw-my-store
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-rgw-my-store ClusterIP 10.43.12.100 <none> 80/TCP 3h40m
通过在企业设置中填写好事先在 Ceph-dashboard 中创建的对象存储 bucket、access-key、secret-key,即可对接好对象存储。
4. 性能对比测试
我们利用 sysbench 工具,对使用了不同类型存储的 Mysql 进行了性能测试,除数据目录挂载了不同类型的存储,其他实验条件均一致。参与测试的存储类型包括 Glusterfs、Cephfs、Ceph-RBD 三种。
采集的数据为 sysbench 测试返回的每秒事务数(TPS)以及每秒请求数(QPS):
存储类型 | Mysql 内存 | QPS | TPS |
---|---|---|---|
Glusterfs | 1G | 4600.22 | 230.01 |
Cephfs | 1G | 18095.08 | 904.74 |
Ceph-RBD | 1G | 24852.58 | 1242.62 |
测试结果显而易见,Ceph 块设备性能最高,Cephfs 相对 Glusterfs 也有较明显的性能优势。
5. 写在最后
适配 Kubernetes CSI 容器存储接口是 Rainbond v5.7.0-release 版本的一大特性,这个特性让我们可以轻松对接 Rook-Ceph 这一优秀的存储解决方案。通过对 Rook-Ceph 的使用体验的描述以及最后的性能测试对比,不得不说,Rook-Ceph 即将成为我们在云原生存储领域探索的一个主攻方向。
云原生存储解决方案Rook-Ceph与Rainbond结合的实践的更多相关文章
- 快速上手 Rook,入门云原生存储编排
Rook 是一个开源 cloud-native storage orchestrator(云原生存储编排器),为各种存储解决方案提供平台.框架和支持,以与云原生环境进行原生集成. Rook 将存储软件 ...
- kubespray 容器存储设备 -- rook ceph
1./root/kubespray/roles/docker/docker-storage/defaults/main.yml #在用kubespray部署集群是制定docker用什么设备 dock ...
- 7.云原生之Docker容器Dockerfile镜像构建浅析与实践
转载自:https://www.bilibili.com/read/cv15220707/?from=readlist Dockerfile 镜像构建浅析与实践 描述:Dockerfile是一个文本格 ...
- 2019 年 CNCF 中国云原生调查报告
中国 72% 的受访者生产中使用 Kubernetes 在 CNCF,为更好地了解开源和云原生技术的使用,我们定期调查社区.这是第三次中国云原生调查,以中文进行,以便更深入地了解中国云原生技术采用的步 ...
- 柯基数据通过Rainbond完成云原生改造,实现离线持续交付客户
1.关于柯基数据 南京柯基数据科技有限公司成立于2015年,提供一站式全生命周期知识图谱构建和运维.智能应用服务,致力于"链接海量数据,从大数据中挖掘智慧".帮助企业运用知识 ...
- 云原生入门 第五章:kubernetes学习实践
1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...
- 云原生时代的DevOps平台设计之道
开发人员与运维人员是 IT 领域很重要的两大人群,他们都会参与到各种业务系统的建设过程中去.DevOps 是近年间火爆起来的一种新理念,这种理念被很多人错误的解读为"由开发人员(Dev)学习 ...
- 如何将云原生工作负载映射到 Kubernetes 中的控制器
作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...
- 《Kubernetes与云原生应用》系列之容器设计模式
http://www.infoq.com/cn/articles/kubernetes-and-cloud-native-app-container-design-pattern <Kubern ...
随机推荐
- ruby 版本管理RVM (ruby version manager)
macOS. 自带的ruby 版本目录权限比较高, 经常有很多 操作需要权限而不能执行 虽然 macOS 自带了一个 ruby 环境,但是是系统自己使用的,所以权限很小,只有 system. 而/Li ...
- 如何科学衡量广告投放效果?HMS Core分析服务助您科学归因
日益多元化的广告形式以及投放成本的不断攀升,让广告主们更加关注每一次广告投放带来的实际价值. 然而,广告主一般仅能从平台获得展示.点击.下载等前端效果字段,实际的用户注册.激活等后端深度转化指标并无法 ...
- vim 下几种比较省劲的方式(vi结合着用)
Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在正常模式下,按i.a.o等都可以进入插入模式. 可视模式:正常模式下按v可以进入可视模式, 在可视模式下, ...
- upsource 配置git仓库时的 rsa 问题
在使用 upsource 时,当 通过 SSH-key 需要配置一个 git 仓库代码时,在使用本机已有配置的 rsa 是出现无法连接的问题.这是需要看下具体的提示,如下图的显示 其实关键的地方看这个 ...
- Linux中权限对于文件和目录的区别
Linux系统中的权限对于文件和目录来说,是有一定区别的 下面先列举下普通文件对应的权限 1)可读r:表示具有读取.浏览文件内容的权限,例如,可以对文件执行 cat.more.less.head.ta ...
- Java语言学习day13--7月14日
今日内容介绍1.循环练习2.数组方法练习 ###01奇数求和练习 * A: 奇数求和练习 * a: 题目分析 * 为了记录累加和的值,我们需要定义一个存储累加和的变量 * 我们要获取到1-100范围内 ...
- 上市公司招聘:今天国际直聘DBA
今天国际一家专业的智慧物流·智能制造系统综合解决方案提供商,为生产制造.流通配送企业提供智慧物流·智能制造系统 的规划设计.系统集成.软件开发.设备定制.电控系统开发.现场安装调试.客户培训和售后服务 ...
- IDEA2021.2安装lombok插件(借鉴前辈)
lomhok下载地址: https://plugins.jetbrains.com/plugin/6317-lombok/versions CSDN关注斧头湖懒客 一,下载lombok插件我这里下载的 ...
- LINUX系统下安装PyCharm和annaconda3并配置
以下是在ubantu18.04版本下的配置教程: Step 1 去PyCharm官网下载Linux版的PyChram安装压缩包 网址:https://www.jetbrains.com/zh-cn/p ...
- Docker系列教程01-使用Docker镜像
docker系列导读 一文带你读懂什么是docker Docker安装部署 10张图带你深入理解Docker容器和镜像 前言 学习Docker,我们需要掌握它的三大核心概念:镜像.容器和仓库. 今天先 ...