Curve 分布式存储在 KubeSphere 中的实践
Curve 介绍
Curve 是网易开发的现代存储系统,目前支持文件存储 (CurveFS) 和块存储 (CurveBS)。现在它作为一个沙盒项目托管在 CNCF。
Curve 是一个高性能、轻量级操作、本地云的开源分布式存储系统。Curve 可以应用于 :
- 主流云本地基础设施平台 OpenStack 和 Kubernetes;
- 云本地数据库的高性能存储 ;
- 使用与 s3 兼容的对象存储作为数据存储的云存储中间件。

实现效果
通过部署 CurveFS 集群、Helm 部署 Curve-csi 插件创建 SC 来达到声明 PVC 时自动创建 PV 的效果
开始部署
K8s 环境可以通过安装 KubeSphere 进行部署 , 我使用的是高可用方案。
在公有云上安装 KubeSphere 参考文档:多节点安装
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 79d v1.23.8
k8s-node1 Ready worker 79d v1.23.8
k8s-node2 Ready worker 79d v1.23.8
k8s-node3 Ready worker 79d v1.23.8

使用 Curveadm 工具部署 CurveFS
CurveAdm 是 Curve 团队为提高系统易用性而设计的工具,其主要用于快速部署和运维 CurveBS/CurveFS 集群。
硬件环境需求:
| 宿主机 | 系统 | IP 地址 |
|---|---|---|
| Curve(控制节点) | Centos7.9 | 192.168.149.169 |
| Curve1(服务节点) | Centos7.9 | 192.168.149.177 |
每台服务器都需要安装 docker:
[root@curve ~]# yum install -y yum-utils
[root@curve ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@curve ~]# yum install docker-ce docker-ce-cli containerd.io
[root@curve ~]# systemctl start docker
控制节点安装 Curveadm:
[root@curve ~]# bash -c "$(curl -fsSL https://curveadm.nos-eastchina1.126.net/script/install.sh)"
主机管理
主机模块用来统一管理用户主机,以减少用户在各配置文件中重复填写主机 SSH 连接相关配置。(此操作在控制节点进行)
准备主机列表:
global:
user: root
ssh_port: 22
private_key_file: /root/.ssh/id_rsa
hosts:
- host: curve1
hostname: 192.168.149.169
- host: curve
hostname: 192.168.149.177
forward_agent: true
become_user: root
labels:
- client
说明:

创建 SSH 秘钥:
[root@curve ~]# ssh-keygen #一路回车即可
[root@curve ~]# ssh-copy-id -i root@192.168.149.177
#发送私钥到服务节点
导入主机列表:
[root@curve ~]#curveadm hosts commit hosts.yaml
查看主机列表:
[root@curve ~]# curveadm hosts ls

CuveFS 集群拓扑
集群拓扑文件用来描述哪些服务部署在哪些机器上,以及每一个服务实例的配置。
(目前集群拓扑分为单机部署、多机部署本教程只演示单机部署)
准备单机部署文件:
说明:此文件只需要修改一处,target 的值改成服务节点的 hostname,其他全默认不需要修改。
kind: curvefs
global:
report_usage: true
data_dir: ${home}/curvefs/data/${service_role}${service_host_sequence}
log_dir: ${home}/curvefs/logs/${service_role}${service_host_sequence}
container_image: opencurvedocker/curvefs:latest
variable:
home: /tmp
target: curve1 #这里需要改成服务节点的hostname
etcd_services:
config:
listen.ip: ${service_host}
listen.port: 2380${service_host_sequence} # 23800,23801,23802
listen.client_port: 2379${service_host_sequence} # 23790,23791,23792
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
mds_services:
config:
listen.ip: ${service_host}
listen.port: 670${service_host_sequence} # 6700,6701,6702
listen.dummy_port: 770${service_host_sequence} # 7700,7701,7702
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
metaserver_services:
config:
listen.ip: ${service_host}
listen.port: 680${service_host_sequence} # 6800,6801,6802
listen.external_port: 780${service_host_sequence} # 7800,7801,7802
global.enable_external_server: true
metaserver.loglevel: 0
# whether commit filesystem caches of raft wal to disk.
# it should be true iff you wants data NEVER lost,
# of course, it will leads some performance skew.
braft.raft_sync: false
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
config:
metaserver.loglevel: 0
部署预检
预检模块用来提前检测那些可能导致用户部署失败的因素,以提高用户部署的成功率。
添加自定义命名集群,并指定拓扑文件:
[root@curve ~]# curveadm cluster add curve -f topology.yaml
切换 curve 集群为当前管理集群:
[root@curve ~]# curveadm cluster checkout curve
执行预检:
[root@curve ~]# curveadm precheck
查看执行结果:

使用 CurveAdm 部署 CurveFS 集群
[root@curve ~]# curveadm deploy
如果部署成功,将会输出类似 Cluster 'curve' successfully deployed ^_^. 的字样
查看集群运行情况:
[root@curve ~]#curveadm status
[root@localhost curve]# curveadm status
Get Service Status: [OK]
cluster name : curve
cluster kind : curvefs
cluster mds addr : 192.168.149.177:6700,192.168.149.177:6701,192.168.149.177:6702
cluster mds leader: 192.168.149.177:6701 / f339fd5e7f3e
Id Role Host Replicas Container Id Status
-- ---- ---- -------- ------------ ------
724fe98710d0 etcd curve1 1/1 e3d86591f2dc Up 50 seconds
d5b08fe05a81 etcd curve1 1/1 da7932929055 Up 50 seconds
963664e175dd etcd curve1 1/1 134d4445542a Up 50 seconds
83fa9fc656af mds curve1 1/1 1f7429cd9822 Up 48 seconds
f339fd5e7f3e mds curve1 1/1 2983a89adecf Up 49 seconds
3d7201165a57 mds curve1 1/1 b6135408346b Up 49 seconds
875d7fd126f2 metaserver curve1 1/1 1983afeed590 Up 44 seconds
9d5fb31b2bd9 metaserver curve1 1/1 fe920d6b7343 Up 44 seconds
1344d99579c4 metaserver curve1 1/1 875cb4e5c14d Up 44 seconds
[root@localhost curve]# curveadm status
Get Service Status: [OK]
cluster name : curve
cluster kind : curvefs
cluster mds addr : 192.168.149.177:6700,192.168.149.177:6701,192.168.149.177:6702
cluster mds leader: 192.168.149.177:6701 / f339fd5e7f3e
Id Role Host Replicas Container Id Status
-- ---- ---- -------- ------------ ------
724fe98710d0 etcd curve1 1/1 e3d86591f2dc Up 2 hours
d5b08fe05a81 etcd curve1 1/1 da7932929055 Up 2 hours
963664e175dd etcd curve1 1/1 134d4445542a Up 2 hours
83fa9fc656af mds curve1 1/1 1f7429cd9822 Up 2 hours
f339fd5e7f3e mds curve1 1/1 2983a89adecf Up 2 hours
3d7201165a57 mds curve1 1/1 b6135408346b Up 2 hours
875d7fd126f2 metaserver curve1 1/1 1983afeed590 Up 2 hours
9d5fb31b2bd9 metaserver curve1 1/1 fe920d6b7343 Up 2 hours
1344d99579c4 metaserver curve1 1/1 875cb4e5c14d Up 2 hours
KubeSphere 平台部署 minio
添加 minio 应用仓库

添加仓库地址:charts.min.io/。

从应用模板创建 minio 服务
<
,
,
,
,
>
自定义 root 账号和密码:


访问 minio 界面并设置:
说明:登录的 URL 是集群宿主机的 IP+NodePort 端口,可以在 service 中查看对应端口号


点击新建 Bucket:

自定义 Bucket 名称:

创建 Policies:

自定义 Policy Name:

创建规则:
说明 : 此规则是全局 Bucket 都可以访问,生产环境不建议这么配置
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListAllMyBuckets",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
创建 Users:

创建 AKSK:


自定义账号名称并勾选刚才设置好的规则(也可以全选):

创建 Group:


KubeSphere 平台部署 Cruvefs-csi 插件
创建应用:

选择应用商店:

选择 Curvefs-csi 应用进行安装:



填写 parameters 信息。字段说明 :
- mdsAddr 地址可以通过 Curveadm status 输出后查看
- s3Endpoint 可以通过 K8s 集群的 service 里查看到(要填写 minio 服务对应的 NodePort,不要填写 console 的 Nodeport)
- AKSK 可以通过刚才 minio 上创建时保存的查看
- s3Bucket 可以通过刚才创建的 Bucket 查看

通过 Curve-sc 创建 PV 和 PVC 进行挂载
创建持久卷声明:




创建工作负载使用存储卷:






进入容器终端:

切换目录到 /data 并写入测试数据:
cd /data
mkdir curve
echo 1111 > curve.txt
验证查看 minio 数据:

本文由博客一文多发平台 OpenWrite 发布!
Curve 分布式存储在 KubeSphere 中的实践的更多相关文章
- ceph在品高云中的实践
ceph简介 ceph是业界目前人气最高的开源存储项目之一,关于其定义在官网是这样的:"Ceph is a unified, distributed storage system desig ...
- KubeSphere 日志备份与恢复实践
为什么需要日志备份 KubeSphere 日志系统使用 Fluent Bit + ElasticSearch 的日志采集存储方案,并通过 Curator 实现对 Index 的生命周期管理,定期清理久 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- 05-雷海林-mysql备份原理与在TDSQL中的实践
05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- React 与 Redux 在生产环境中的实践总结
React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...
- immutable.js 在React、Redux中的实践以及常用API简介
immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark : https://yq.aliyu ...
- Immutable.js 以及在 react+redux 项目中的实践
来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...
- TypeScript在react项目中的实践
前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...
随机推荐
- 使用CPU运行大语言模型(LLM),以清华开源大模型ChatGLM3为例:无需显卡!用CPU搞定大模型运行部署!【详细手把手演示】
教程视频地址: 无需显卡!用CPU搞定大模型运行部署![详细手把手演示] 按照上面视频进行安装配置之前需要注意,python编程环境需要大于等于python3.10,否则会运行报错.下载好GitHub ...
- 某宝购入牙膏厂U后其售后事宜的思虑
近日某宝购入i7 9700k, 突然想去保修的问题(没有发票,要发票比京东自营贵200左右, 不要则便宜100左右),由于确实囊中幸亏所以还是选择了某宝,东西到手后突然想起这东西没票是否可以保修 ...
- 【转载】 NetworkManager——nmcli命令连接WIFI和创建热点
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u014695839/article/de ...
- ImageNet数据集下载
ImageNet数据集是Vision领域最重要的数据集之一,十分经典也十分常用,但是该数据集体量较大,而且由于在外网下载速度较慢,其中最为重要的一点是该数据集只提供给高校科研工作者,这也就意味着你必须 ...
- fatal error: GL/osmesa.h: No such file or directory
安装mujoco报错: fatal error: GL/osmesa.h: No such file or directory 解决方法: sudo apt install libosmesa6-de ...
- 【安装】SQL SERVER 彻底卸载清除
-----2024年8月6日09:40:13 -----bayaim, 以下内容纯属百度网络搜到,如有侵权请联系及时删除 SQL SERVER 如果卸载不干净,就会导致下一次安装失败,下面是卸载的步 ...
- 零基础学习人工智能—Python—Pytorch学习(三)
前言 这篇文章主要两个内容. 一,把上一篇关于requires_grad的内容补充一下. 二,介绍一下线性回归. 关闭张量计算 关闭张量计算.这个相对简单,阅读下面代码即可. print(" ...
- Java jdk版本对照表
这里将JDK版本和major.minor的版本的对照关系进行整理,作为今后查阅的依据. 序号 jdk版本 major.minor version 1 1.1 45 2 1.2 46 3 1.3 47 ...
- CSV文件导出详细讲解
一.准备jar 如下所以放入maven配置文件中 二.controller层 三.SERVICE层 四.CsvUtil文件 /** * csv文件导入导出 */public class CsvUti ...
- Windows10使用MSYS2和VS2019编译FFmpeg详解
1 环境准备 1.1 安装Visual Studio 2019 这个步骤相对比较简单,不再详细说明. 1.2 安装msys2 首先需要安装msys2环境以及相关的编译依赖项, 官方网址为: https ...