1. Ceph RBD与Kubernetes集成概述
在云原生环境中,持久化存储一直是容器编排系统面临的核心挑战之一。Ceph RBD(RADOS Block Device)作为Ceph存储集群提供的块存储服务,通过与Kubernetes CSI(Container Storage Interface)驱动集成,能够为容器化应用提供高性能、高可靠的块存储解决方案。这种集成方式特别适合需要独占式存储访问的应用场景,如数据库、消息队列等有状态服务。
我在多个生产环境中的实践表明,Ceph RBD与Kubernetes的集成方案具有以下显著优势:
- 数据持久性:即使Pod被重新调度,存储卷中的数据也能完好保留
- 性能隔离:每个RBD镜像都是独立的存储实体,避免I/O干扰
- 动态扩容:支持存储卷的在线扩容,满足业务增长需求
- 快照与克隆:基于RBD特性可实现高效的数据备份和快速部署
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Ceph集群端准备工作
2.1 存储池创建与配置
在Ceph集群中,我们需要为Kubernetes创建专用的存储池。存储池的PG(Placement Group)数量设置至关重要,它直接影响数据分布的均衡性和集群性能。根据官方推荐公式:
code复制PG总数 = (OSD数量 × 100) / 副本数
假设我们使用3个OSD节点,采用默认的3副本配置,则单个存储池的PG数量建议为:
code复制(3 × 100) / 3 = 100
考虑到未来扩展性,我们选择32个PG(最接近100的2的幂次方),这也是为什么示例中使用32 PG的原因。实际操作命令如下:
bash复制# 创建存储池
ceph osd pool create meta_rbd_k8s 32 32
# 启用RBD应用特性
ceph osd pool application enable meta_rbd_k8s rbd
# 初始化存储池
rbd pool init -p meta_rbd_k8s
注意:生产环境中建议根据实际数据量和性能需求调整PG数量。PG过少会导致数据分布不均,过多则会增加集群管理开销。
2.2 访问用户创建与权限配置
安全访问是生产环境中的关键考量。我们需要为Kubernetes创建专用的客户端用户,并严格控制其权限范围。以下是创建client.k8s用户的命令:
bash复制ceph auth get-or-create client.k8s \
mon 'allow r,profile rbd' \
mds 'allow rw' \
osd 'allow rw pool=cephfs.meta_fs.meta, allow rw pool=cephfs.meta_fs.data,profile rbd pool=meta_rbd_k8s' \
mgr 'profile rbd pool=meta_rbd_k8s' \
> /etc/ceph/ceph.client.k8s.keyring
这个命令创建了一个具有以下权限的用户:
- 监控器(mon):允许读取操作和RBD profile权限
- 元数据服务器(mds):允许读写操作(为同时支持CephFS做准备)
- OSD:限制只能访问指定的存储池
- 管理器(mgr):授予RBD管理权限
实
