当前位置: 首页 > news >正文

基于Rook的Ceph云原生存储部署与实践指南(上)

#作者:任少近

文章目录

  • 1 Ceph环境准备
  • 2 rook部署ceph群集
    • 2.1 Rook 帮助地址
    • 2.2 安装ceph
    • 2.3 获取csi镜像
    • 2.4 Master参加到osd
    • 2.5 设置默认存储
  • 3 Rook部署云原生RBD块存储
    • 3.1 部署storageclass资源
    • 3.2 部署WordPress使用RBD
    • 3.3 WordPress访问
  • 4 Rook部署云原生RGW对象存储
    • 4.1 部署objectstore资源
    • 4.2 pod访问rgw服务
    • 4.3创建rgw用户
    • 4.4创建buckets桶
  • 5 DeRook部署云原生CephFS文件系统
    • 5.1 部署cephfs storageclass
    • 5.2 创建容器所需cephfs文件系统
    • 5.3创建容器pod使用rook-cephfs提供pvc

1 Ceph环境准备

提前准备一块50G祼盘
在这里插入图片描述
版本
在这里插入图片描述

2 rook部署ceph群集

下载rook
https://rook.io/docs/rook

git clone --single-branch --branch v1.11.5 https://github.com/rook/rook.git# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod

2.1 Rook 帮助地址

https://rook.io/docs/rook/v1.9/ceph-filesystem.html

2.2 安装ceph

cd /root/rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml

2.3 获取csi镜像

成功后,执行cluster.yaml后,插件未启,修改operater.yaml中地址

# ROOK_CSI_REGISTRAR_IMAGE: "registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.7.0"
# ROOK_CSI_RESIZER_IMAGE: "registry.aliyuncs.com/google_containers/csi-resizer:v1.7.0"
# ROOK_CSI_PROVISIONER_IMAGE: "registry.aliyuncs.com/google_containers/csi-provisioner:v3.4.0"
# ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.aliyuncs.com/google_containers/csi-snapshotter:v6.2.1"
# ROOK_CSI_ATTACHER_IMAGE: "registry.aliyuncs.com/google_containers/csi-attacher:v4.1.0"

可以使用如下脚本修改以上

#!/bin/bash
Image_list=(
#csi-node-driver-registrar:v2.7.0
csi-resizer:v1.7.0
csi-provisioner:v3.4.0
csi-snapshotter:v6.2.1
csi-attacher:v4.1.0
)
Aliyuncs="registry.aliyuncs.com/google_containers"
Google_gcr="registry.k8s.io/sig-storage"
for image in ${Image_list[*]}
do
crictl pull ${Aliyuncs}/${image}
#crictl没有tag功能,ctr打tag必须指定namespace,命令:ctr namespace ls查看
ctr -n k8s.io i tag ${Aliyuncs}/${image} ${Google_gcr}/{imag:q!e}
crictl rmi ${Aliyuncs}/${image}
echo "${Aliyuncs}/${image} ${Google_gcr}/${image} download."
done

再执行kubectl apply -f cluster.yaml

2.4 Master参加到osd

去掉污点

#查看污点
kubectl -n rook-ceph describe nodes k8s-master
#去掉污点
kubectl taint node k8s-master node-role.kubernetes.io/k8s-master:NoSchedule-  
(#恢复污点:
kubectl taint node k8s-master node-role.kubernetes.io/k8s-master:NoSchedule

Cluster.yaml修改磁盘扫描时间,默认是60s,可以调整60分钟

592 # The duration between discovering devices in the rook-discover daemonset.
593 - name: ROOK_DISCOVER_DEVICES_INTERVAL
594   value: "60m"

2.5 设置默认存储

[root@k8s-master1 ~]# kubectl patch storageclass rook-ceph-block -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

3 Rook部署云原生RBD块存储

前面通过rook部署ceph集群运行在kubernetes上,ceph集群支持rbd块存储。使用rook部署rbd块服务与kubernetes容器对接。ceph与kubernetes对接会涉及到pool池、ceph认证信息,配置文件,CSI驱动部署等。storageclass创建过程涉及配置较多,而Rook则将这些配置过程简化,以云原生的方式实现对接,默认已继承好相关驱动。通过kubernetes创建storageclass即可对接使用。

3.1 部署storageclass资源

Cd /root/rook/deploy/examples/csi/rbd
在这里插入图片描述

[root@k8s-master rbd]# kubectl apply -f storageclass.yaml
cephblockpool.ceph.rook.io/replicapool created
storageclass.storage.k8s.io/rook-ceph-block created
#查看storageclass资源[root@k8s-master rbd]# kubectl -n rook-ceph get sc
NAME                      PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-block           rook-ceph.rbd.csi.ceph.com      Delete          Immediate           true                   3m42s
rook-ceph-delete-bucket   rook-ceph.ceph.rook.io/bucket   Delete          Immediate           false                  122d

3.2 部署WordPress使用RBD

部署mysql和WordPress资源文件

# kubectl create -f mysql.yaml 
# kubectl create -f wordpress.yaml
注:修改wordpress.yaml中的loadbalance为NodePort
注:资源文件在deploy/examples文件夹下

查看mysql和WordPress pod状态
在这里插入图片描述
查看mysql和wordPress SVC
在这里插入图片描述

3.3 WordPress访问

Wordpress svc更改为NodePort形式对外暴露服务访问
在这里插入图片描述
WordPress访问地址 http://node_ip:31028
在这里插入图片描述
在这里插入图片描述
注:第一次访问需要进行完善信息,完善后跟进自己使用情况进行后台修改或者默认直接使用即可

4 Rook部署云原生RGW对象存储

rook能够在kubernetes中部署对象存储提供rgw服务。

4.1 部署objectstore资源

创建object资源文件

# kubectl create -f object.yaml
查看rgw pod状况

在这里插入图片描述
查看rgw svc状况
在这里插入图片描述

4.2 pod访问rgw服务

root@csicephfs-demo-pod:/# curl 10.104.123.1
在这里插入图片描述

4.3创建rgw用户

[root@k8s-master examples]# cat object-user.yaml
####Create an object store user for access to the s3 endpoint.kubectl create -f object-user.yaml
####################################
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:name: my-usernamespace: rook-ceph # namespace:cluster
spec:store: my-storedisplayName: "my display name"# Quotas set on the user# quotas:# maxBuckets: 100# maxSize: 10G# maxObjects: 10000# Additional permissions given to the user# capabilities:# user: "*"# bucket: "*"# metadata: "*"# usage: "*"# zone: "*"[root@k8s-master examples]# kubectl create -f object-user.yaml

4.4创建buckets桶

在这里插入图片描述
注:使用dashboard web界面管理操作查看即可,rgw对象存储操作使用参考文档:https://docs.ceph.com/en/quincy/radosgw/index.html

5 DeRook部署云原生CephFS文件系统

5.1 部署cephfs storageclass

cephfs文件系统与RBD服务类似,要想在kubernetes pod里使用cephfs,需要创建一个cephfs-provisioner storageclass服务,在rook代码里已有资源文件,单独部署即可

Storageclass.yaml文件如下:
在这里插入图片描述
kubectl create -f deploy/examples/csi/cephfs/storageclass.yaml
查看cephfs storageclass名称:rook-cephfs
在这里插入图片描述

5.2 创建容器所需cephfs文件系统

创建容器所需pvc指定rook部署rook-cephfs存储类名称

[root@node1 cephfs]# cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: rook-cephfs
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pvc.yaml查看pvc所提供是rook-cephfs
[root@node1 cephfs]# kubectl get pvc | grep cephfs-pvc
cephfs-pvc             Bound    pvc-da18c8f9-00c1-4c39-8c53-68a628fa8bdd   1Gi        RWO            rook-cephfs                   21drook-cephfs                   7d23h
[root@node1 cephfs]#

5.3创建容器pod使用rook-cephfs提供pvc


[root@node1 cephfs]# cat pod.yaml
---
apiVersion: v1
kind: Pod
metadata:name: csicephfs-demo-pod
spec:containers:- name: web-serverimage: nginx:latestvolumeMounts:- name: mypvcmountPath: /var/lib/www/htmlvolumes:- name: mypvcpersistentVolumeClaim:claimName: cephfs-pvcreadOnly: false
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pod.yaml查看pod运行状况
[root@node1 cephfs]# kubectl get pod | grep cephfs
csicephfs-demo-pod                           1/1     Running     0            21d
[root@node1 cephfs]#5.4 查看pod是否使用rook-cephfs
[root@node1 cephfs]# kubectl exec -it csicephfs-demo-pod -- bash
root@csicephfs-demo-pod:/# df -hT | grep csi-vol
10.68.91.46:6789,10.68.110.0:6789,10.68.225.251:6789:/volumes/csi/csi-vol-50d5c216-3e2a-11ed-9773-9a6110af61d6/f4e696bf-757d-4793-b2c2-3091d38ccec5 ceph     1.0G     0  1.0G   0% /var/lib/www/html
root@csicephfs-demo-pod:/#
root@csicephfs-demo-pod:/# echo "cephfs" > /var/lib/www/html/index.html
root@csicephfs-demo-pod:/# cat /var/lib/www/html/index.html
cephfs
root@csicephfs-demo-pod:/#注:登录相应pod容器可以看到pod已经挂载cephfs文件系统地址,可以在相应挂载目录创建内容。

相关文章:

基于Rook的Ceph云原生存储部署与实践指南(上)

#作者:任少近 文章目录 1 Ceph环境准备2 rook部署ceph群集2.1 Rook 帮助地址2.2 安装ceph2.3 获取csi镜像2.4 Master参加到osd2.5 设置默认存储 3 Rook部署云原生RBD块存储3.1 部署storageclass资源3.2 部署WordPress使用RBD3.3 WordPress访问 4 Rook部署云原生RGW…...

C++ Qt常见面试题(4):Qt事件过滤器

在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…...

regionserver实例僵住问题分析

问题现象: 应用提交超时,发现regionserver实例异常。hbase原生页面这个实例dead,业务连接到这个rs的进程超时8个regionserver实例。 D08在18:30分后显示warning,应用提交任务到这个rs节点超时,hbase控制台不显示d08的rs信息了。19:30在页面停止rs实例失败,然后kill进程…...

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网,因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...

QT mac系统下qml实现的菜单栏,标准快捷键Delete无作用或失灵的处理

一.在mac系统下,QT官方提供的删除快捷键无作用。 1.下面这一段代码,最后一个menuItem采用的是QT自带的标准快捷键,但是在使用的过程中,快捷键无响应。大家可以将代码带入简单的demo尝试一下: MenuBar {id: rootMenu {id: editMenutitle: TransText.titleBar_EditMenuItem…...

redis序列化设置

redis序列化设置 redis序列化设置序列化对象里有org.joda.time.DateTime1)、报错内容如下2)、解决方案:分别自定义时间的序列化和反序列化,以对象形式关联到redisTemplate redis序列化设置 redis序列化设置,通过自定义…...

浅谈C++/C命名冲突

前言 在这里我会简要地介绍产生命名冲突的原因,和C中处理命名冲突的方法,同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说,了解编译器的编译链接过程才能更好的理解编译器是如何报错的,更能让我们…...

【语音编解码】常用的基于神经网络的语音编解码方案对比

引言 随着实时通信与多媒体应用的爆炸式增长,传统语音编解码技术正面临带宽效率与音质保真的双重挑战。近年来,基于深度学习的神经编解码器突破性地将端到端架构、动态码率控制与可解释信号处理相结合,在3kbps以下超低码率场景仍能保持自然语…...

PVE 配置显卡直通

博客地址:PVE 配置显卡直通 配置 Device: Dell PowerEdge T630CPU: Intel Xeon E5-2696 v4 x2GPU 1: Matrox Electronics Systems Ltd. G200eR2GPU 2: NVIDIA GeForce GTX 1060 3GBOS: Proxmox VE bookworm 8.3.1 x86_64 注意事项 硬件需支持并在 BIOS 中开启 I…...

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来 在深度学习的优化中,自然梯度下降(Natural Gradient Descent)是一个强大的工具,它利用Fisher信息矩阵(FIM)调整梯度…...

ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图

在地理信息系统(GIS)领域,地表覆盖图的矢量化是一项至关重要的任务。天地图作为中国国家级的地理信息服务平台,提供了丰富且详尽的地表覆盖数据。然而,这些数据通常以栅格格式存在,不利于进行空间分析和数据…...

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言:数据字典的工程价值 在现代化全栈开发中,数据字典作为业务实体与数据存储的映射桥梁,直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…...

道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金

道可云元宇宙每日简报(2025年2月26日)讯,今日元宇宙新鲜事有: 上海青浦发布国际产业协作元宇宙平台 近日,“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台&#xff0c…...

[2024年下半年架构师考试真题之论文]

2024论文真题试题一(架构) 论面向服务的架构设计 Web service 是一种通过互联网协议(如 HTTP)来提供服务的软件系统,它允许不同的应用程序之间进行交互,而无需考虑它们所使用的操作系统、编程语言或硬件平台。其本质是将应用程序的功能以服务的形式暴露出来,使得其他应…...

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示,登录阿里云百炼人工智能业务控制台,创建智能体应用,智能体应用是一个agent,即提供个人或者企业的代理或中间件组件应用,对接阿里云大模型公共平台,为个人或者企业用户提供大模型应…...

【操作系统】处理机调度

处理机调度 一、调度的概念、层次1.1 三个层次1.2 七状态模型 二、调度算法的评价指标2.1 CPU利用率2.2 系统吞吐率2.3 周转时间2.4 等待时间2.5 响应时间 三、进程调度(低级调度)的时机3.1 需要进程调度的情况3.2 不能进程调度的情况3.3 闲逛进程 四、进…...

mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)

目录 mysql服务层 介绍 服务管理和公共组件 备份 NOSQL,SQL接口 介绍 nosql Parser模块(语法分析器) 介绍 词法分析 语法分析 示例 预处理器 引入 介绍 优化器 介绍 优化的必要性 基于成本的优化器 缓存 介绍 弊端 mysql服务层 介绍 数据库服务层是整个…...

将DeepSeek接入vscode的N种方法

接入deepseek方法一:cline 步骤1:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 步骤2:搜索 cline,找到插件后点击安装。 步骤3:在大模型下拉菜单中找到deep seek,然后下面的输入框输入你在deepseek申请的api key,就可以用了 让deepseek给我写了一首关于天气的…...

【算法与数据结构】Dijkstra算法求单源最短路径问题

目录 Dijkstra算法 算法简介: 该算法的核心思想: 算法特点: 算法示例演示: 算法实现: 邻接矩阵存图 邻接表存图: 时间复杂度分析: Dijkstra算法 算法简介: Dijkstra算法&am…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...