在 K8s 中部署 Rook-Ceph 分布式存储与常见运维(OSD down、存储池)
2026-08-11 09:37:39 # 存储

Rook 是把 Ceph 跑在 Kubernetes 上的 Operator,让 K8s 原生获得一套分布式、自修复的块/文件/对象存储。但 Ceph 本身运维复杂,Rook 只是降低了部署门槛,并没有消除排障难度。

一、Rook-Ceph 架构速览

  • Operator:管理 CephCluster 生命周期;
  • CephCluster / CephBlockPool / CephFilesystem:自定义资源,声明式定义集群与存储池;
  • OSD(Object Storage Daemon):真正存数据的守护进程,每个磁盘一个 OSD
  • MON / MGR:集群元数据与监控。

通过 RBD + CSI 对外提供块存储,对接 K8s 的 StorageClass。

二、部署要点

cluster.yaml 里关键项:

1
2
3
4
5
storage:
useAllNodes: true
useAllDevices: true
config:
osdsPerDevice: 1

部署后用 Rook 工具箱检查健康:

1
2
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph status
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd status

三、常见运维问题

1. OSD 频繁 down / 集群 HEALTH_WARN

1
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd tree

常见根因:

  • 磁盘故障 / SMART 报错:换盘后 OSD 自动重建(靠副本/EC 冗余);
  • 节点重启后 OSD 没起来:检查 OSD Pod 与对应裸盘(/dev/sdX)是否还在;
  • 容量将满ceph osd df 看使用率,超过 full ratio(默认 95%)会拒绝写入,需扩容或清理。

2. 存储池(Pool)与 PG 数不合理

PG(Placement Group)数太少会导致数据分布不均、恢复慢。新建池时注意 PG 数按 OSD 数量规划(pg_autoscale_mode 可自动扩)。

3. 块存储供给失败

PVC Pending 时看 Rook 的 ceph-csi-rbd provisioner 日志,多半是 CephBlockPool 未就绪、或 clusterID 指向错误。

4. 节点维护(drain)

维护前务必先 kubectl drain 并确认 OSD 能安全迁移;粗暴关机可能造成短时间降级,靠 Ceph 冗余自愈。

小结

Rook 把 Ceph 变成 K8s 原生存储,但 OSD down、容量将满、PG 规划、供给失败仍是高频问题。健康看 ceph status,排障靠 rook-ceph-tools 工具箱。