在 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 | storage: |
部署后用 Rook 工具箱检查健康:
1 | kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph 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 工具箱。