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

张开发
2026/4/11 5:34:13 15 分钟阅读

分享文章

从零到一:基于Rook Operator的Ceph集群云原生部署与Kubernetes存储集成全攻略
1. 为什么选择RookCephKubernetes存储方案第一次接触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 ACTIONadd|change, KERNELsd[a-z], ATTR{queue/scheduler}deadline | sudo tee /etc/udev/rules.d/60-ceph-scheduler.rules3. 手把手部署Rook Operator3.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运行起来后别急着部署集群先检查这两个地方确认Pod日志没有permission denied错误运行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: - discard4.2 CephFS的权限管理陷阱很多人直接在PV里写secretRef结果权限混乱。正确的做法是先创建独立的Ceph用户ceph auth get-or-create client.k8s mon allow r mds allow rw path/ osd allow rw poolcephfs-data将密钥存入Secretkubectl -n rook-ceph create secret generic cephfs-secret \ --from-literaladminIDk8s \ --from-literaladminKeyAQD...在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-secret5. 生产环境运维实战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: warning5.2 磁盘故障处理流程当收到OSD告警时按这个SOP操作确认故障磁盘位置kubectl -n rook-ceph exec -it rook-ceph-tools -- ceph osd tree安全移除故障OSDkubectl -n rook-ceph exec -it rook-ceph-tools -- ceph osd out osd.XX物理更换磁盘后Rook会自动识别并重建OSD检查恢复进度watch -n 5 kubectl -n rook-ceph exec -it rook-ceph-tools -- ceph -s6. 性能调优实战记录去年优化某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

更多文章