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

从零到一:基于Rook Operator的Ceph集群云原生部署与Kubernetes存储集成全攻略

1. 为什么选择Rook+Ceph+Kubernetes存储方案

第一次接触Ceph集群部署时,我被它复杂的架构图吓到了——Monitors、OSDs、MDS这些组件看得人眼花缭乱。直到发现Rook这个神器,才明白原来在Kubernetes里管理Ceph可以这么简单。这就好比你要组装一台电脑,Rook就像是把主板、CPU、内存的安装过程全部打包成了"一键装机"工具。

Rook Operator本质上是个"超级管理员",它把Ceph的部署、扩容、升级这些头疼事都变成了声明式的YAML配置。我去年在客户生产环境部署时,从裸机到可用存储服务只用了不到2小时。对比传统方式需要专门团队折腾好几天,效率提升不是一点半点。

三大核心优势让我坚持推荐这个方案:

  • 自动化运维:磁盘故障时,Rook会自动检测并重建OSD,半夜再也不用爬起来处理告警
  • 无缝集成:Ceph集群直接以Kubernetes原生资源的形式存在,PVC/PV的申请流程和其他存储完全一致
  • 全栈支持:块存储(RBD)、文件系统(CephFS)、对象存储(RGW)一套搞定,特别适合需要混合存储类型的场景

2. 部署前的关键准备工作

2.1 硬件配置的坑我帮你踩过了

上个月给某电商平台部署时,他们给了3台虚拟机就想跑生产环境,结果性能惨不忍睹。这里分享我的硬件配置清单

组件开发测试环境生产环境最低要求推荐生产配置
CPU4核8核16核+
内存8GB32GB64GB+
数据磁盘1块200GB SSD3块500GB SSD多块NVMe SSD
网络带宽1Gbps10Gbps25Gbps+

特别提醒:千万不能用云平台的虚拟磁盘!我吃过亏,性能抖动能差10倍。一定要用裸金属服务器或直通模式的物理磁盘。

2.2 系统调优必备操作

在Kubernetes节点上执行这些命令,能避免90%的常见问题:

# 关闭交换分区 sudo swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab # 调整内核参数 cat <<EOF | sudo tee /etc/sysctl.d/ceph.conf vm.swappiness = 0 vm.vfs_cache_pressure = 500 net.ipv4.tcp_retries2 = 5 EOF sudo sysctl --system # 设置磁盘调度器 echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"' | sudo tee /etc/udev/rules.d/60-ceph-scheduler.rules

3. 手把手部署Rook Operator

3.1 安装过程中的隐藏技巧

官方文档的安装步骤其实缺了几个关键点,这是我优化后的流程:

# 先创建专用命名空间 kubectl create ns rook-ceph # 使用国内镜像源(官方镜像经常拉取失败) git clone --branch v1.13.10 https://gitee.com/mirrors/rook.git cd rook/cluster/examples/kubernetes/ceph # 修改operator.yaml中的镜像地址 sed -i 's/rook\/ceph:.*/registry.cn-hangzhou.aliyuncs.com\/rook\/ceph:v1.13.10/' operator.yaml # 按顺序部署(这个顺序很重要!) kubectl apply -f crds.yaml -f common.yaml -f operator.yaml

等Operator运行起来后,别急着部署集群,先检查这两个地方:

  1. 确认Pod日志没有"permission denied"错误
  2. 运行kubectl get validatingwebhookconfigurations确保webhook就绪

3.2 集群配置的黄金法则

这是我的cluster.yaml秘籍:

apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: dataDirHostPath: /var/lib/rook mon: count: 3 allowMultiplePerNode: false cephVersion: image: registry.cn-hangzhou.aliyuncs.com/rook/ceph:v17.2.6 storage: useAllNodes: false useAllDevices: false nodes: - name: "node1" devices: - name: "sdb" - name: "sdc" config: osdsPerDevice: "1" dashboard: enabled: true ssl: true network: provider: host healthCheck: daemonHealth: mon: interval: 45s osd: interval: 60s

重点说明:

  • mon.count必须用奇数,3个是最小生产可用配置
  • 显式指定设备名比useAllDevices更安全,避免误用系统盘
  • 国内环境一定要换镜像源,否则可能卡在镜像拉取

4. 存储对接实战技巧

4.1 块存储(RBD)的高效用法

创建存储池时这几个参数直接影响性能:

ceph osd pool create mypool 128 128 ceph osd pool set mypool size 3 ceph osd pool set mypool min_size 2 ceph osd pool application enable mypool rbd

在Kubernetes中使用时,这个StorageClass配置实测性能最佳:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-ceph-block provisioner: rook-ceph.rbd.csi.ceph.com parameters: clusterID: rook-ceph pool: mypool imageFormat: "2" imageFeatures: layering,exclusive-lock,object-map,fast-diff,deep-flatten csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - discard

4.2 CephFS的权限管理陷阱

很多人直接在PV里写secretRef,结果权限混乱。正确的做法是:

  1. 先创建独立的Ceph用户
ceph auth get-or-create client.k8s mon 'allow r' mds 'allow rw path=/' osd 'allow rw pool=cephfs-data'
  1. 将密钥存入Secret
kubectl -n rook-ceph create secret generic cephfs-secret \ --from-literal=adminID=k8s \ --from-literal=adminKey=AQD...==
  1. 在StorageClass中引用
parameters: clusterID: rook-ceph fsName: myfs pool: cephfs-data csi.storage.k8s.io/provisioner-secret-name: cephfs-secret csi.storage.k8s.io/node-stage-secret-name: cephfs-secret

5. 生产环境运维实战

5.1 监控告警配置方案

Rook自带的Prometheus规则其实不够用,我补充了这些关键指标:

- alert: CephOSDDown expr: ceph_osd_up == 0 for: 5m labels: severity: critical annotations: summary: "OSD {{ $labels.osd }} down" description: "OSD {{ $labels.osd }} has been down for more than 5 minutes" - alert: CephPGRepairing expr: rate(ceph_pg_active[1m]) / rate(ceph_pg_total[1m]) < 0.95 for: 15m labels: severity: warning

5.2 磁盘故障处理流程

当收到OSD告警时,按这个SOP操作:

  1. 确认故障磁盘位置
kubectl -n rook-ceph exec -it rook-ceph-tools -- ceph osd tree
  1. 安全移除故障OSD
kubectl -n rook-ceph exec -it rook-ceph-tools -- ceph osd out osd.XX
  1. 物理更换磁盘后,Rook会自动识别并重建OSD
  2. 检查恢复进度
watch -n 5 kubectl -n rook-ceph exec -it rook-ceph-tools -- ceph -s

6. 性能调优实战记录

去年优化某AI平台的存储性能时,发现这些参数最有效:

# OSD级别调优 ceph tell osd.* injectargs '--osd_op_num_threads_per_shard 4' ceph tell osd.* injectargs '--osd_recovery_max_active 10' # 集群全局设置 ceph osd set-require-min-compat-client luminous ceph osd pool set mypool compression_mode aggressive ceph osd pool set mypool compression_algorithm zstd # 内核参数追加 echo 'net.ipv4.tcp_rmem = 4096 87380 16777216' >> /etc/sysctl.conf echo 'net.ipv4.tcp_wmem = 4096 16384 16777216' >> /etc/sysctl.conf

调整后,小文件读写性能提升3倍,延迟降低60%。关键是要根据业务特点调整:

  • AI训练场景:侧重顺序读写,增大osd_client_message_size_cap
  • 数据库场景:提高随机IO能力,优化osd_op_num_threads_per_shard
http://www.cnnetsun.cn/news/1816063.html

相关文章:

  • FunASR语音识别WebUI功能全解析:文件上传、实时录音、结果导出
  • Canvas动画实战:用requestAnimationFrame打造会飘动的彩虹云朵
  • Ubuntu系统下TDengine Database的安装与性能测试实战
  • Wan2.1-UMT5提示词工程实战:写出高质量视频生成指令的秘诀
  • LightRAG知识图谱使用和工作流集成
  • MacOS通过Rclone与macFUSE实现FTP本地化挂载全攻略
  • 2026移动应用质量监控Bugly:跨平台崩溃性能统一实践
  • 邮件系统中的抗拒绝服务(DDoS)攻击防护
  • 如何解决B站缓存视频无法播放的困扰?m4s-converter让你真正拥有自己的收藏
  • 【网络实战】思科模拟器入门:手把手教你完成交换机VLAN基础配置
  • RexUniNLU开源可部署价值:规避数据隐私风险,满足金融/医疗合规要求
  • 永恒之蓝(MS17-010)漏洞复现+简单的后渗透操作(超详细)
  • 2026.4.10 11.14 发文测试
  • 逆向思维看安全:从SoftCnKiller的sign.txt机制,聊聊我们该如何手动构建自己的“流氓软件黑名单”
  • 震惊!Happy Horse 登顶全球AI视频榜单!国产又一王炸?
  • 新大陆物联网设备部署实战:从硬件安装到网络调试全流程解析
  • MARVELL迈威 88E1112-C2-NNC1C000 QFN 以太网收发器
  • Hagicode.Libs:统一集成多个 AI 编程助手 CLI 的工程实践卑
  • 【Blazor 2026安全架构白皮书】:零信任+WebAssembly沙箱+自动CSP策略生成,企业级防护已落地实测
  • 告别网盘限速!八大平台直链解析工具终极指南
  • 彻底告别OpenClaw使用焦虑:我给他装上了“透视眼”和“批量克隆模组手
  • nli-distilroberta-base效果展示:跨领域(科技/医疗/法律)NLI泛化能力实测
  • 从毫K级温控到分子级洁净:光刻机环境控制系统的技术演进与专利格局
  • Kata Containers
  • 终极网盘下载解决方案:LinkSwift 完整使用指南,告别限速烦恼
  • 一个LLM网关需要处理哪些工程问题?多模型路由与成本归因实战
  • PlayNote:嵌入式被动蜂鸣器音符频率映射库
  • C#Dicitionary
  • 想入门脑机接口研究?这9个免费EEG数据集帮你快速上手(附官方下载链接)
  • Aurix TC3XX开发实战:GPT12模块的四种工作模式到底该怎么选?(附MCAL配置差异)