云原生存储:Rook+Ceph 在 K8s 中的分布式存储方案
·
以下是关于 Rook+Ceph 在 Kubernetes 中实现分布式存储的完整解析:
一、核心架构解析
-
Ceph 分布式存储层
- 提供对象存储(RADOSGW)、块存储(RBD)、文件系统(CephFS)
- 数据分布模型:CRUSH 算法自动管理数据副本分布
$$ \text{OSD_map} \xrightarrow{\text{CRUSH}} \text{物理存储位置} $$
-
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:动态创建块存储
-
创建 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 -
PVC 申请存储:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-pvc spec: storageClassName: rook-ceph-block accessModes: [ReadWriteOnce] resources: requests: storage: 20Gi
四、性能优化策略
-
OSD 调优
- 启用 Bluestore 压缩:
spec: storage: config: osd: "bluestore_compression_mode=aggressive" - 调整日志级别:`$ \text{debug_osd} = 1/5 $
- 启用 Bluestore 压缩:
-
网络优化
- 分离公共网络与集群网络:
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 分布 |
六、生产环境建议
-
硬件规划
- OSD 节点:SSD 推荐每 OSD 分配 10GB RAM
- 网络带宽:建议 10Gbps+ 专用网络
-
监控方案
- 集成 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} $
- OSD 延迟:
- 集成 Prometheus+Grafana:
注:升级时务必遵循 官方升级矩阵,避免版本不兼容问题。
通过此方案,K8s 可获得企业级分布式存储能力,实现数据持久化与高可用,适用于数据库、AI 训练等关键业务场景。
更多推荐
所有评论(0)