以下是关于 Rook+Ceph 在 Kubernetes 中实现分布式存储的完整解析:


一、核心架构解析

  1. Ceph 分布式存储层

    • 提供对象存储(RADOSGW)、块存储(RBD)、文件系统(CephFS)
    • 数据分布模型:CRUSH 算法自动管理数据副本分布
      $$ \text{OSD_map} \xrightarrow{\text{CRUSH}} \text{物理存储位置} $$
  2. Rook 编排层

    • 通过 Operator 将 Ceph 组件容器化(Monitors, OSDs, MGRs)
    • 关键自定义资源(CRD):
      apiVersion: ceph.rook.io/v1
      kind: CephCluster
      spec:
        dataDirHostPath: /var/lib/rook
        storage:
          useAllNodes: true
          useAllDevices: true
      


二、部署流程

步骤 1:安装 Rook Operator
kubectl apply -f https://github.com/rook/rook/releases/latest/download/commone.yaml
kubectl apply -f https://github.com/rook/rook/releases/latest/download/operator.yaml

步骤 2:创建 Ceph 集群
# cluster.yaml
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v16.2
  dataDirHostPath: /var/lib/rook
  mon:
    count: 3
  storage:
    storageClassDeviceSets:
      - name: set1
        count: 3
        portable: false
        volumeClaimTemplates:
          - spec:
              resources:
                requests:
                  storage: 10Gi

步骤 3:验证集群状态
rook ceph status        # 查看 Ceph 健康状态
kubectl get cephcluster # 检查 CRD 状态


三、存储供给实战

场景 1:动态创建块存储
  1. 创建 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: replicapool
    

  2. PVC 申请存储:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mysql-pvc
    spec:
      storageClassName: rook-ceph-block
      accessModes: [ReadWriteOnce]
      resources:
        requests:
          storage: 20Gi
    


四、性能优化策略

  1. OSD 调优

    • 启用 Bluestore 压缩:
      spec:
        storage:
          config:
            osd: "bluestore_compression_mode=aggressive"
      

    • 调整日志级别:`$ \text{debug_osd} = 1/5 $
  2. 网络优化

    • 分离公共网络与集群网络:
      network:
        provider: host
        selectors:
          public: network=ceph-public
          cluster: network=ceph-cluster
      


五、故障处理指南

故障现象 排查命令 解决方案
OSD 启动失败 rook ceph osd status 检查设备权限或 dataDirHostPath
PVC 处于 Pending 状态 kubectl describe pvc <name> 验证 StorageClass 配置
Ceph 状态 HEALTH_WARN ceph -s 检查 mon quorum 或 PG 分布

六、生产环境建议

  1. 硬件规划

    • OSD 节点:SSD 推荐每 OSD 分配 10GB RAM
    • 网络带宽:建议 10Gbps+ 专用网络
  2. 监控方案

    • 集成 Prometheus+Grafana:
      kubectl apply -f cluster/monitoring/monitoring.yaml
      

    • 关键指标:
      • OSD 延迟:$ \text{ceph\_osd\_op\_r\_latency} $
      • PG 状态:$ \text{ceph\_pg\_active} / \text{ceph\_pg\_total} $

:升级时务必遵循 官方升级矩阵,避免版本不兼容问题。

通过此方案,K8s 可获得企业级分布式存储能力,实现数据持久化与高可用,适用于数据库、AI 训练等关键业务场景。

更多推荐