云原生存储 Rook+Ceph:K8s 集群持久化存储
·
云原生存储 Rook+Ceph:Kubernetes 集群持久化存储方案
1. 核心概念
- Rook:Kubernetes 原生存储编排器,自动化部署和管理存储系统
- Ceph:分布式存储系统,提供块存储、文件存储和对象存储服务
- 持久化存储:解决容器重启后数据丢失问题,满足数据库、日志等场景需求
数学关系表达式:
设集群规模为 $n$ 个节点,Ceph 的数据冗余策略可表示为:
$$ \text{存储效率} = \frac{\text{原始数据量}}{\text{副本数} \times n} $$
2. 架构优势
graph LR
A[Kubernetes Pod] -->|PVC| B[Rook Operator]
B --> C[Ceph Monitor]
B --> D[Ceph OSD]
D --> E[物理磁盘]
- 自愈能力:自动检测故障并重建副本
- 弹性扩展:通过 CRD 动态调整存储池
- 统一管理:通过 kubectl 管理存储资源
3. 部署流程
# rook-ceph-operator.yaml
apiVersion: v1
kind: Namespace
metadata:
name: rook-ceph
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-ceph-operator
namespace: rook-ceph
spec:
replicas: 1
template:
spec:
containers:
- name: operator
image: rook/ceph:v1.8.10
4. 存储配置示例
创建存储类(StorageClass):
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
imageFeatures: layering
reclaimPolicy: Retain
申请持久卷声明(PVC):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
5. 性能优化策略
- 数据分布:OSD 数量满足 $ \text{OSD}_{\min} = \lceil \frac{\text{总存储量}}{ \text{单盘容量} \times 0.8 } \rceil $
- 网络分离:集群流量与存储流量分网段传输
- 缓存分层:SSD 作为缓存池加速 HDD 存储
6. 监控与运维
- 指标监控:
- 集群健康状态:
ceph -s - 空间利用率:$ \text{使用率} = \frac{\text{已用空间}}{\text{总空间}} \times 100% $
- 集群健康状态:
- 故障处理:
- OSD 自动恢复
- 数据平衡调整
7. 适用场景
- 有状态应用:MySQL、PostgreSQL 等数据库
- AI/ML 训练:共享存储加速模型读取
- 日志持久化:ELK 日志长期存储
- 云原生应用:微服务配置中心
注意事项:
- 生产环境建议至少 3 个 Monitor 节点
- OSD 磁盘需为裸设备(无分区/文件系统)
- 网络延迟需满足 $ \text{RTT} < 5\text{ms} $
- 定期检查 CRUSH Map 的数据分布均衡性
该方案通过 Kubernetes 原生方式实现企业级存储,兼具 Ceph 的高可靠性与 Rook 的自动化管理能力,适合需要大规模持久化存储的云原生环境。
更多推荐


所有评论(0)