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 发布!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
DevOps的未来:2022年及以后的6大趋势
未来趋势 DevOps 已成为不可或缺的软件开发方法。得益于其诱人的优势,例如更快的软件交付、更高的质量和高客户满意度。在疫情期间,DevOps 获得了巨大的重视,因为它简化了远程协作以促进敏捷开发实践和基础设施灵活性。事实上,83% 的受访组织在 2021 年实施了 DevOps 实践。 尽管 DevOps 不再是一个流行词,但该领域正在发生重大变化。新的实践、技术和趋势使DevOps成为现在和未来令人兴奋的地方。 在本文中,我们精选了将塑造DevOps 未来的主要趋势和预测。我们来看一下: 2022 年及以后值得关注的 6 大 DevOps 趋势 1微服务架构 微服务架构将单体应用分成小的独立单元或服务。这使 DevOps 团队在整个软件开发生命周期中具有更高的敏捷性和可扩展性。DevOps 团队可以根据业务需求扩展每个应用程序段,而不是一次扩展整个应用程序。 此外,微服务架构使开发人员能够在不中断整个代码库的情况下部署小特性或功能。 这种 DevOps 趋势将在 2022 年获得显着势头。然而,我们必须认识到一个事实,即微服务的次优实施可能会导致严重的后果,包括数据丢失和安全风险...
- 下一篇
云原生技术在离线交付场景中的实践
软件产品只有交付到用户手中才有价值,本人在面向政府等 ToG 场景的软件交付领域具有数年的工作经验,深知其中痛点。今天借助这篇文章,分享这些痛点以及我的解决之道。 提出问题 本人供职的公司,其主要客户群体是省内的政府部门,所开发的业务系统是服务于政府内网之中的移动APP。作为交付负责人,我一直苦恼于如何将一套基于 Spring Cloud 框架开发而来的服务端业务系统交付给我的客户。完成软件系统的交付只是万里长征第一步,如何处理后期的运维工作也是必须面对的问题。政府场景的特殊性,为我的工作平添了许多不利因素,这些 ToG 场景交付的痛点,且听我娓娓道来。 离线环境交付 与公网环境隔离,与公司网络隔离,完全的离线场景是政府交付工作中的标配特征,也是 ToG 交付最大的痛点。相信离线环境交付是所有的交付工程师都不想面对的场景,这意味着所有的交付物必须在事先准备好,交付过程中一旦出现任何遗漏和错误,都意味着明天必须再来现场一次。 交付环境不统一 如果你从事过面向政府的交付工作,那多半会遭遇过交付环境不统一的情况。由于各级政府部门的 IT 建设脚步不一样,同样一套业务系统,在交付到市级部门时,...
相关文章
文章评论
共有0条评论来说两句吧...