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的元数据是固定的、结构化的,适用于文件系统操作。它包含了文件的路径、大小、权限、时间戳等信息,文件系统的元数据字段是预定义的,用于管理文件系统的层次关系和文件属性。

相关推荐
可观测性用观测云4 小时前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
回家路上绕了弯4 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
蝎子莱莱爱打怪2 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
初次攀爬者5 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
阿里云云原生6 天前
Kubernetes 官方再出公告,强调立即迁移 Ingress NGINX
kubernetes
至此流年莫相忘6 天前
Kubernetes实战篇之配置与存储
云原生·容器·kubernetes
断手当码农6 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
至此流年莫相忘6 天前
Kubernetes实战篇之服务发现
容器·kubernetes·服务发现
初次攀爬者6 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端