master节点k8s部署]33.ceph分布式存储(四)

总结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插件来管理。

三种存储方式的回顾:

RADOSReliable Autonomic Distributed Object Store )是 Ceph 的底层存储系统。OSDCeph 中的一个核心组件,代表 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 的一个组件,它通过标准的对象存储接口(如 S3Swift )提供对 RADOS 对象的访问。

对象存储的元数据可以是自定义的键值对,用户可以根据自己的需求附加任意的元数据。例如,可以为对象添加属性(如文件类型、创建时间、标签、所有者、访问权限等),这些元数据与对象一起存储,并且可以在对象检索时一起获取。这里的元数据与cephFS的元数据不同,cephFS的元数据是固定的、结构化的,适用于文件系统操作。它包含了文件的路径、大小、权限、时间戳等信息,文件系统的元数据字段是预定义的,用于管理文件系统的层次关系和文件属性。

相关推荐
节点。csn25 分钟前
Hadoop yarn安装
大数据·hadoop·分布式
NiNg_1_2342 小时前
基于Hadoop的数据清洗
大数据·hadoop·分布式
隔着天花板看星星3 小时前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
探索云原生5 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳5 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
jwolf27 小时前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现
nangonghen7 小时前
在华为云通过operator部署Doris v2.1集群
kubernetes·华为云·doris·operator
技术路上的苦行僧7 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
龙哥·三年风水7 小时前
workman服务端开发模式-应用开发-后端api推送修改二
分布式·gateway·php
小小工匠8 小时前
分布式协同 - 分布式事务_2PC & 3PC解决方案
分布式·分布式事务·2pc·3pc