总结ceph分布式存储(三)中提到的三种方法:
1.创建rbda,并且在创建pv的时候配置该rbda,以下代码仅展示关键信息。
[root@xianchaomaster1 ~]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-pv
...
rbd:
monitors:
- '192.168.40.201:6789'
- '192.168.40.200:6789'
- '192.168.40.202:6789'
pool: k8stest
image: rbda
user: admin
Ceph RBD 块存储的局限性是它不支持跨节点的共享挂载。ReadWriteOnce
模式只能让 Pod 在同一个节点上共享存储,不能跨节点使用。
2.使用rbd provisioner自动分配rbda
方法1中的rbda是在ceph集群中创建的,比较麻烦。当前的方法部署了rbd provisioner,可以自动建立和管理rbda。以下代码只展示关键信息:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rbd-provisioner
...
env:
- name: PROVISIONER_NAME
value: ceph.com/rbd
serviceAccount: rbd-provisioner
storageclass与provisioner绑定,这里绑定了provisioner(第五行),并且配置了ceph 的资源池pool的名字。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: k8s-rbd
provisioner: ceph.com/rbd
parameters:
monitors: 192.168.40.201:6789
adminId: admin
adminSecretName: ceph-secret-1
pool: k8stest1
userId: admin
userSecretName: ceph-secret-1
fsType: xfs
imageFormat: "2"
imageFeatures: "layering"
虽然方法2比方法1更方便,但是本质上都是通过创建rbda来持久化存储,不能支持共享存取。
3.k8s挂载cephFS
cephFS和rbda是两种不一样的ceph存储格式,rbd是块存储,而cephFS是文件系统。
cephFS也是用rbd(RADOS Block Device)存储,存储在ceph的数据池中,但是cephFS还有一个元数据池metadata,用来维护cephFS的目录结构,这些元数据也是以 RADOS 对象 的形式存储的。
这种将cephFS挂载的方法不涉及rbd的创建,使用 CephFS 的场景 下,数据是通过 Ceph 提供的 文件系统接口 进行读写,而不是通过 块存储接口。因此,CephFS 挂载过程中并不涉及 RBD 的创建,CephFS 和 RBD 是两种独立的存储方式。
apiVersion: v1
kind: PersistentVolume
metadata:
name: cephfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
cephfs:
monitors: # Ceph 集群的 monitor 地址
- 192.168.40.201:6789
path: /lucky # 挂载的路径是 CephFS 中的 /lucky 目录
user: admin
secretRef:
name: cephfs-secret
persistentVolumeReclaimPolicy: Recycle
4.cephFS自动管理
cephFS也可以像2中一样配置一个provisioner,从而可以和storageclass绑定,进行自动管理。这里可以通过ceph CSI插件来管理。
三种存储方式的回顾:
RADOS(Reliable Autonomic Distributed Object Store)是 Ceph 的底层存储系统。OSD 是 Ceph 中的一个核心组件,代表 Object Storage Daemon(对象存储守护进程)。它是 Ceph 集群中的数据存储单元,负责存储数据、处理数据的复制、恢复、回填、重新平衡等操作,并向集群报告存储状态。每个 OSD 守护进程运行在一个物理或虚拟磁盘上,是 Ceph 集群中实际存储数据的实体。
一个典型的ceph系统会包含大量的OSD,集群中的数据会自动分布在这些 OSD 上,确保数据的高可用性和容错性。但是OSD也不是存储数据本身,他负责管理一个内存设备(硬盘或是SSD)。
这里要澄清的是,RADOS对象是存储在 Ceph 中的基本数据单元,你将数据写入 Ceph 集群时,数据会被拆分成多个 RADOS 对象,并通过 RADOS 系统 分布存储在多个 OSD 上。
RBD技术:
RBD块存储技术是基于RADOS存储系统的存储技术,RBD 将数据存储在 RADOS 对象中,并提供块设备接口,将这些对象抽象为虚拟的块设备(类似于硬盘)。
cephFS技术:
CephFS 是 Ceph 提供的分布式文件系统,它也是建立在 RADOS 对象存储系统之上的。CephFS 将数据存储在 RADOS 对象 中,但它提供的是 文件系统语义,包括文件、目录、权限、文件系统层次结构等。CephFS 的用户可以通过标准的文件系统接口(如 POSIX 文件系统接口)来访问数据,类似于使用本地的文件系统(如 ext4、XFS 等)。
可以说,RBD是在RADOS上提供了接口技术,从而让RADOS对象看起来像一个独立的存储设备,符合RBD的全称 RADOS block device,变成了一个单独的块。而cephFS可以看作在RADOS上提供了一个文件系统,这个文件系统本身(metadata)也是按照RADOS对象来存储的。
对象存储:
对象存储 直接通过一个唯一的对象 ID 来存储和检索数据,没有传统的文件系统层次结构。在 Ceph 中,对象存储 由 RADOS Gateway(RGW) 提供。RGW 是 Ceph 的一个组件,它通过标准的对象存储接口(如 S3 和 Swift)提供对 RADOS 对象的访问。
对象存储的元数据可以是自定义的键值对,用户可以根据自己的需求附加任意的元数据。例如,可以为对象添加属性(如文件类型、创建时间、标签、所有者、访问权限等),这些元数据与对象一起存储,并且可以在对象检索时一起获取。这里的元数据与cephFS的元数据不同,cephFS的元数据是固定的、结构化的,适用于文件系统操作。它包含了文件的路径、大小、权限、时间戳等信息,文件系统的元数据字段是预定义的,用于管理文件系统的层次关系和文件属性。