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

Rook部署——k8s集群中使用ceph

比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。

目录

前言

一、为什么选 Rook?

二、Rook 低层原理(必须理解的组件)

1. CRD(CustomResourceDefinition)——抽象出“Ceph 资源”

2. Rook Operator(核心自动化大脑)

3. Ceph Daemons(真正干活的)

三、Rook 架构图

四、 Rook 需要哪些 YAML(这是最重要的部分)

1. 部署 Rook 控制面(CRD + Operator)

2. 部署 Ceph 集群(跟硬盘有关)

3. 可选的(按需创建)

五、各个yaml的作用

六、操作命令

总结


前言

想在k8s集群中使用ceph,应该怎么做呢?使用Rook


一、为什么选 Rook?

裸 Ceph 是给 2010 年代裸机/虚拟机环境设计的,Rook 是给 2020 年代 Kubernetes 时代而生的 Ceph。Rook 不是存储系统,它只是 Ceph 的自动化运维系统(Operator)。

Rook 只需要你:写 yaml 、 Apply、 让 Operator 自动 reconcile。然后所有组件自动出现、自动扩容、自动修复。

它的唯一作用:让 Ceph 能以 Kubernetes 原生方式运行、扩容、自愈,硬盘自动接管

Ceph = 真正存储
Rook = Ceph 的大脑 + 自动驾驶仪
K8s = 环境 + 编排

二、Rook 低层原理(必须理解的组件)

1. CRD(CustomResourceDefinition)——抽象出“Ceph 资源”

Rook 把 Ceph 的东西全部抽象成 Kubernetes API 对象:

Ceph 组件Rook 的 CRD
整个 Ceph 集群CephCluster
存储池CephBlockPool
文件系统 CephFSCephFilesystem
OSD 存储设备CephCluster.storage.devices
Mgr / MonCephCluster.mgr / mon
RBD StorageClassStorageClass
RGW/对象存储CephObjectStore

Rook 让 Kubernetes 本身能够理解“Ceph 这个东西”。

2. Rook Operator(核心自动化大脑)

Operator 是一个永远处于 “observing → reconciling → fixing” 的控制回路:

CRD YAML 变化 → Operator 看到了 ↓ Operator 生成 Ceph 配置 / 命令 ↓ Operator 创建相应的 Pod、OSD、mon、mgr ↓ 确保状态达到你 YAML 要的样子

它会一直监控

  • Ceph 守护进程是否运行

  • MON quorum 是否健康

  • OSD 是否 down / out

  • 新硬盘是否出现

  • 节点是否加入/退出集群

你只写 YAML → 其它全部 Operator 负责。这就是 Kubernetes 的operator 模式

3. Ceph Daemons(真正干活的)

在容器里跑真正的 Ceph 服务:

组件作用
ceph-mon整个集群的脑,维护 map
ceph-mgrDashboard、Prometheus、Orchestrator 模块
ceph-osd管 HDD/SSD(你的 8T/2T)
ceph-mdsCephFS 的 namespace server
ceph-rgwS3 网关(可选)

Rook 帮你管理它们,但它们本身就是原生 Ceph。

三、Rook 架构图

CRD:让 Kubernetes“知道”什么是 Ceph(像提供新 API)

Operator:看 YAML → 生成 Pod → 控制 Ceph(自动化运维系统)

Ceph 容器:真正的存储系统

四、 Rook 需要哪些 YAML(这是最重要的部分)

1. 部署 Rook 控制面(CRD + Operator)

这一步是所有集群通用的,不涉及磁盘。

通常有三个文件(只需 apply 一次):

文件作用
crds.yaml定义 CephCluster / CephBlockPool / CephFilesystem 等 CRD
common.yamlRBAC、namespace、service accounts
operator.yamlOperator 主体,负责启动大脑

📌执行这 3 个文件后,集群不包含任何 Ceph,只是“准备好 Ceph 的大脑”

2.部署 Ceph 集群(跟硬盘有关)

这是最核心的cluster.yaml。这个文件明确告诉 Rook:

  • Ceph 要在哪里跑

  • 要启用哪些模块

  • 如何使用你的硬盘

  • 有几个 MON

  • 是否开启 dashboard

  • 是否使用 SSD 作为 WAL/DB

📌这个 YAML = 整个 Ceph 的定义
OSD 出现与否、设备如何使用,都在这里。

3. 可选的(按需创建)

YAML作用
CephFilesystem创建 CephFS,自动部署 MDS
CephBlockPool创建 RBD 池
StorageClass给 K8s PVC 提供 Ceph RBD/FS 卷
CephObjectStoreS3 服务
CephObjectStoreUser创建 S3 用户

未来最常用的是:

  • CephFS(共享文件存储)

  • RBD(持久化块存储)

五、各个yaml的作用

YAML属于 Rook 哪一层?它控制什么?什么时候 apply?
crds.yamlk8s API定义 Ceph 的所有资源类型第一次部署 Rook 时
common.yamlRBAC权限、ServiceAccount、Namespace第一次部署 Rook 时
operator.yamlRook 大脑Operator 的 Pod & Controller第一次部署 Rook 时
cluster.yaml你的集群定义MON/OSD/MGR、磁盘分配、网络有 HDD 时执行
filesystem.yamlCephFS创建 MDS + Pool + FSCeph 集群 ready 后
block-pool.yamlRBDRBD 池(给 PVC 用)需要块存储时
storageclass.yamlK8s SCPVC 自动绑定 Ceph做持久化卷时
objectstore.yamlRGWSwift/S3 接口做 S3 时

注意:cluster.yaml优先级最高。crds.yaml、common.yaml、operator.yaml只负责“让 Rook 自己跑起来”。Ceph 集群的实际配置永远以cluster.yaml 为准。所以首次run的时候可以直接用官方的模板

六、操作命令

# 安装调试工具(非必须但推荐) sudo apt install -y lvm2 ceph-common jq #下载适合k8s1.21的版本,主要是用examples cd /home/ubuntu git clone --single-branch --branch v1.11.9 https://github.com/rook/rook.git cd rook/deploy/examples # 部署 CRDs + common + operator(上一步已cd,这一步用的是需要用examples里面的yaml) kubectl create namespace rook-ceph kubectl apply -f crds.yaml -f common.yaml -f operator.yaml # 验证,有点儿耐心,等一下,拉取镜像需要时间。这一步之后,集群里已经“认识 Ceph 这个东西”了。 kubectl -n rook-ceph get pods #准备好适合自己的cluster.yaml kubectl apply -f cluster.yaml #这个镜像总是无法自动拉取,不清楚为什么,可以先手动拉一下 sudo docker pull rook/ceph:v1.11.9 #这次应该能看到:rook-ceph-mon-* rook-ceph-mgr-* ,耐心等一等 kubectl -n rook-ceph get pods # 验证 kubectl -n rook-ceph get pods -o wide # 看看dashboard,UI页面 kubectl -n rook-ceph get svc | grep dashboard kubectl -n rook-ceph get pod -l app=rook-ceph-mgr -o wide #让系统自动分配一个 30000-32767 端口 kubectl -n rook-ceph patch svc rook-ceph-mgr-dashboard -p '{"spec":{"type":"NodePort"}}' #查看一下分到了哪个端口,进行ip+端口访问即可 kubectl -n rook-ceph get svc rook-ceph-mgr-dashboard

总结

重点还是搞清楚yaml,基本上就不会有什么问题。后续我会再整理cluster.yaml的详细内容分析,彻底吃透它。

http://www.cnnetsun.cn/news/26541.html

相关文章:

  • yadm 完整使用指南:从入门到精通掌握点文件管理
  • 基于Web的大学生体测管理系统设计与实现中期(1)
  • 代码随想录算法训练营第四十三天 | 98. 所有可达路径
  • GBase 8a数据库集群硬件部署安装建议
  • GBase数据库护航国家管网SCADA系统四年无中断平稳运行
  • 一文搞定 AI 智能体架构设计的9大核心技术
  • 计算机毕业设计springboot基于JAVA的校园图书馆管理系统的设计与实现 基于Spring Boot框架的校园图书馆信息化管理系统开发与应用研究 利用Spring Boot与Java技术构建的高
  • 数据结构==LRU Cache ==
  • AMD ROCm平台上的YOLOv8目标检测:从入门到精通的5步优化指南
  • 如何让GPT-5.2成为你职场上的得力助手?这5大功能必看!
  • 如何快速掌握YOLOv12:实时目标检测的完整实践指南
  • PINNs-Torch:用PyTorch轻松实现物理信息神经网络
  • JavaScript学习笔记:5.函数
  • Apache Kvrocks数据库部署实战:从零到一的完整搭建教程
  • 16、远程系统管理与安全防护指南
  • 施耐德BMENOC0321C:高性能模块化驱动控制器(增强通信版)
  • 金融人转AI:从入门到上手,我的“证书认证+技能”学习路线分享
  • 模块化多电平变换器MMC(20子模块、21电平,工作条件220kV(AC)/400kV(DC)...
  • 生态共舞!恭喜10家企业荣获“2025龙蜥社区最佳联合解决方案奖”
  • Java常见开发框架大比拼:Jeesite 、jeecgBoot、smartAdmin、ruoyi
  • IDEA(2020版)实现HttpServletRequest对象
  • 跨平台开发框架选型指南:Uniapp、React Native、Flutter
  • 数字孪生软件开发公司
  • springboot基于vue的校园报修管理系统设计与实现_t45k51ip
  • 嵌入式彩屏单色字体点阵的存储结构设计
  • 《Medical Vision Generalist: Unifying Medical Imaging Tasks in Context》(医学视觉通才:在上下文中统一医学成像任务)的
  • 西安电子科技大学专属信纸模板:3分钟打造专业学术形象
  • 【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
  • 富有的哈佛人 —— 储蓄:财富积累的第一块基石
  • 终极指南:快速掌握eventpp事件处理库的8种集成方法