云原生存储 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. 适用场景
  1. 有状态应用:MySQL、PostgreSQL 等数据库
  2. AI/ML 训练:共享存储加速模型读取
  3. 日志持久化:ELK 日志长期存储
  4. 云原生应用:微服务配置中心

注意事项

  • 生产环境建议至少 3 个 Monitor 节点
  • OSD 磁盘需为裸设备(无分区/文件系统)
  • 网络延迟需满足 $ \text{RTT} < 5\text{ms} $
  • 定期检查 CRUSH Map 的数据分布均衡性

该方案通过 Kubernetes 原生方式实现企业级存储,兼具 Ceph 的高可靠性与 Rook 的自动化管理能力,适合需要大规模持久化存储的云原生环境。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐