Curve 分布式存储在 KubeSphere 中的实践

news2024/11/17 3:35:41

Curve 介绍

Curve 是网易开发的现代存储系统,目前支持文件存储 (CurveFS) 和块存储 (CurveBS)。现在它作为一个沙盒项目托管在 CNCF。 Curve 是一个高性能、轻量级操作、本地云的开源分布式存储系统。Curve 可以应用于 :

1) 主流云本地基础设施平台 OpenStack 和 Kubernetes; 2) 云本地数据库的高性能存储 ; 3) 使用与 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.9192.168.149.169
Curve1(服务节点)Centos7.9192.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 信息。字段说明 :

  1. mdsAddr 地址可以通过 Curveadm status 输出后查看
  2. s3Endpoint 可以通过 K8s 集群的 service 里查看到(要填写 minio 服务对应的 NodePort,不要填写 console 的 Nodeport)
  3. AKSK 可以通过刚才 minio 上创建时保存的查看
  4. s3Bucket 可以通过刚才创建的 Bucket 查看

通过 Curve-sc 创建 PV 和 PVC 进行挂载

创建持久卷声明:

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

进入容器终端:

切换目录到 /data 并写入测试数据:

cd /data
mkdir curve
echo 1111 > curve.txt

验证查看 minio 数据:

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Bigdata】【Java】用IDEA创建一个Maven项目时,一直卡在Generating project in Batch mode步骤

Project Scenario&#xff08;项目场景&#xff09;&#xff1a; I want to create a Maven project with IDEA to practice writing UDF functions and upload it to hdfs, so I need to initialize the maven project. &#xff08;本人想用IDEA创建一个Maven项目来练习UDF函…

Netty初探

序&#xff1a; 为什么打算写Netty 相关的博客呢&#xff1f; Netty如今已经是应用非常广泛了&#xff0c; 很多框架底层都能看到他的影子&#xff0c;如Dubbo , Spring Gateway &#xff0c; RocketMQ、Elasticsearch、HBase 等比较出名的框架&#xff0c;在性能&#xff0c;…

使用div+css实现表格布局

DIVCSS是WEB设计标准&#xff0c;它是一种网页的布局方法。与传统中通过表格&#xff08;table&#xff09;布局定位的方式不同&#xff0c;它可以实现网页页面内容与表现相分离。提起DIVCSS组合&#xff0c;还要从XHTML说起。XHTML是一种在HTML&#xff08;标准通用标记语言的…

【MySQL】【systemd】mysqld_pre_systemd 及 mysqld@.service 的 bugs

mysqld_pre_systemd 及 mysqld.service 的 bugs问题原理mysqld_pre_systemd 的 bugsmysqld.service 的 bugs测试案例重现不指定 datadir 和 log-error 的 bugs开启 SELinux &#xff0c;指定不同于默认值的自定义数据目录和错误日志位置进行测试修正方法方法一&#xff1a;向 m…

【Word】MathType 运行时错误‘53’:文件未找到:MathPage.WLL

问题描述 1. 环境&#xff1a; MathType7.4Microsoft Office 365Windows 11 2. 问题 情景1. Microsoft Word 启动时显示 Please reload Word to load MathType addin properly 情景2. 安装MathType后在 Microsoft Word 中使用复制粘贴时报错 运行时错误‘53’ 情景3. 在 M…

JavaScript 对象-三种创建对象的方式,遍历获取到对象。

JavaScript 对象-三种创建对象的方式&#xff0c;遍历获取到对象。 目录JavaScript 对象-三种创建对象的方式&#xff0c;遍历获取到对象。1. 对象1.1 什么是对象&#xff1f;1.2 为什么需要对象2. 创建对象的三种方式2.1 利用字面量创建对象2.2 利用new Object创建对象2.3 利用…

【数组】leetcode209.有序数组的平方(C/C++/Java/Js)

leetcode209.长度最小的子数组1 题目2 思路-滑动窗口3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 JavaScript版本4 总结1 题目 题源链接 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, nu…

系列教程之《高铁上的GO》-第一篇

作者&#xff1a;坚果&#xff0c;OpenHarmony布道师&#xff0c;OpenHarmony校源行开源大使&#xff0c;CSDN博客专家&#xff0c;电子发烧友鸿蒙MVP&#xff0c;51CTO博客专家博主&#xff0c;阿里云博客专家。 本文主要讲解Go是什么&#xff0c;Go如何安装&#xff0c;开发G…

【Docker】(二)使用Dockerfile构建并发布一个SpringBoot服务

1.前言 在上一篇笔记 Docker基本概念与安装 中&#xff0c;我们已经获取到了一个Docker服务&#xff0c;并了解了Docker的基本组成及其各个组件的作用。 我们了解到&#xff0c;使用Docker的其中一个目的&#xff0c;是为了更加简单&#xff0c;方便的部署我们编写的服务&…

Typora下载和Markdown基础语法

本章内容如下&#xff1a; Typoar笔记下载资源及主题设置Markdown语法使用的基本方法 这篇博客一开始是为了教女朋友如何使用Typora和Markdown语法写的笔记&#xff0c;Markdown语法的内容不太全&#xff0c;只涉及基础使用。 文章目录Typora下载与主题设置Typora主题设置修改图…

在线考试答题系统的五大功能,你知道多少?

在线考试答题系统-五大功能&#xff0c;你知道多少&#xff1f;-在线考试答题系统优势&#xff1a;在线考试答题系统具有高度的可扩展性&#xff0c;高效灵活、功能强大。考试用户随时随地就可通过网络登录在线考试答题系统&#xff0c;参加在线报名、在线练习、在线考试、在线…

嵌入式开发中为什么选择C语言?它有哪些特点?

众所周知&#xff0c;C语言在嵌入式开发中占据着十分重要的地位&#xff0c;为什么嵌入式开发要选择C语言&#xff1f;嵌入式开发的方向可以分为单片机开发、Linx应用开发和现场可编辑逻辑门阵列&#xff08;FPGA)开发&#xff0c;不同于传统开发模式&#xff0c;操作系统是嵌入…

Nepnep x CatCTF Writeup

Web&#xff1a; 题目名称 ez_js 直接查看网页源代码&#xff0c;查看game.js&#xff0c;进入该目录即可得到flag Reverse&#xff1a; 题目名称 The cat did it 点进来看到一个看着很复杂的图像&#xff0c;离开的概率我猜是0% MD5加密&#xff0c;第一个即为flag Misc&am…

给在校学生的科普文:数字芯片后端工程师的日常

芯片后端设计&#xff0c;看似只是将网表中的晶体管摆放好。但并不是如同砖头砌墙那样简单粗暴。它是一门兼具形式美和工程实践需求的技术。形式美&#xff0c;直接来源于功能内容和需求&#xff0c;在后端设计的环节中&#xff0c;数以万计的标准单元如散乱的点点繁星&#xf…

2022年度穿戴设备行业分析:智能手表销额增长25%,智能手环销量下滑

当前&#xff0c;随着社会经济的发展与居民可支配收入的提高&#xff0c;居民的购买力逐渐增强&#xff0c;我国智能穿戴设备行业也得以快速发展。同时&#xff0c;随着相关技术的不断开发&#xff0c;我国智能穿戴设备行业的技术水平也持续提高。根据数据显示&#xff0c;智能…

软考中级数据库系统工程师好考吗?

数据库还好的&#xff0c;每年五月份考试&#xff0c;通过率20-30%。 数据库系统工程师&#xff0c;主要考核内容&#xff1a;数据库系统基本概念及关系理论&#xff1b;常用的大型数据库管理系统的应用技术&#xff1b;数据库应用系统的设计方法和开发过程&#xff1b;数据库系…

【C++修炼之路】12. stack queue类

每一个不曾起舞的日子都是对生命的辜负 stack&&queue一. stack的介绍和使用1. stack的介绍2. stack的使用二. stack的模拟实现三. queue的介绍和使用1. queue的介绍2. queue的使用四. queue的模拟实现五. deque的介绍和使用1. deque的介绍2. deque的使用3. deque的缺陷…

东方通无法加载程序jar包中的js

东方通中间件使用龙芯适配程序问题描述&#xff1a;东方通无法加载程序jar包中的js排查过程&#xff1a;根据以往经验确保东方通处于最新版本&#xff0c;确认版本为最新的检查容器配置&#xff0c;确认无误在东方通tongweb/bin/external.vmoption 里把-DWebModuleOnly参数值改…

Qt扫盲-QSS定制Qt Widget控件

QSS定制Qt Widget控件概述一、盒子模型二、子控件概述 在使用样式表时&#xff0c;每个部件都被视为具有四个同心矩形的盒子:外边距矩形、边界矩形、内边距矩形和内容矩形。 其实即是每一个继承至 QWidget 都支持的&#xff0c;这个和 前端的 CSS 里面的 盒子模型有些区别但是…

哪吒S亮相广州车展,定位B级燃油车颠覆者

2022年收官&#xff0c;哪吒汽车宣布全年交付152073台&#xff0c;其中&#xff1a; •哪吒U 51021台&#xff1b; •哪吒V 98847台&#xff1b; •哪吒S 2003台&#xff08;12月首月交付&#xff09;。与此同时&#xff0c;在年末的广州车展&#xff0c;哪吒汽车携全系车型参展…