[单master节点k8s部署]30.ceph分布式存储(一)

ceph是一种分布式存储系统,包括块存储、对象存储和文件系统。

块存储(RBD)

块是一个字节序列,通常包含512个字节。基于块的存储接口是一种数据存储方式,通过将数据划分为块,并通过特定的接口来访问和管理这些数据块,进行高效的数据存储。常见的存储接口包括SCSI、iSCSI和NVMe等。

基于块的存储接口是旋转介质(硬盘、CD等)存储数据最常见的方法。

RADOS:即 Reliable Autonomic Distributed Object Store,是 Ceph 的底层存储系统,提供可靠的对象存储功能。而这里的块存储RBD的意思是RADOS block device。

对象存储

Ceph 的对象存储是基于 RADOS(Reliable Autonomic Distributed Object Store),允许用户通过 RESTful API 访问对象。Ceph 通过 RADOS Gateway 提供兼容 S3 和 Swift 的对象存储接口。
虽然ceph是使用块存储将数据存储在固定大小的块结构中,但是ceph的对象存储允许将数据以对象的形式存储,本质上还是块存储。每个对象包含实际数据及其相关元数据,通常通过唯一的标识符进行访问。对象存储通过 RESTful API(如 S3、Swift)进行访问,适合大规模的非结构化数据存储。在访问对象存储时,不需要通过文件系统查询地址,而是直接使用对象的标识符进行访问。
通过 Ceph 对象网关(radosgw),Ceph 提供了对象存储的功能。对象网关使得用户能够通过 HTTP 接口与 Ceph 存储集群交互,以对象的形式进行数据存储和管理。对象存储允许用户通过唯一标识符(ID)访问对象,而不是使用传统的文件路径。
通过 Ceph 对象网关,Ceph 实现了块存储和对象存储的结合,使用户能够灵活地在不同存储需求之间进行选择。用户可以选择高性能的块存储,也可以选择支持高并发访问和共享的对象存储,而不需要关注底层的存储实现细节。

文件系统(cephfs)

Ceph 文件系统使用与 Ceph 块设备相同的 Ceph 存储集群系统。
用户可以在块设备上创建 xfs 文件系统,也可以创建 ext4 等其他文件系统,Ceph 集群实现 了自己的文件系统来组织管理集群的存储空间,用户可以直接将 Ceph 集群的文件系统挂载 到用户机上使用。
虽然通过组织块设备的存储接口,可以实现高效的数据存取,但是这样组成的文件系统无法进行多处挂载和同时读写,因此有了CephFS文件系统。
Ceph 文件系统(CephFS) 是一个符合 POSIX 标准的文件系统,使用 Ceph 存储集群来存储数据。CephFS 允许多个客户端同时挂载并访问相同的文件系统,这使得它在文件共享和协作应用中表现出色。

Ceph核心组件

OSD

OSD(Object Storage Daemon) 是 Ceph 中负责存储数据的守护进程,每个 OSD 管理一个存储设备(如硬盘或 SSD)并处理数据的读写请求。它执行数据复制、恢复和再平衡操作,同时监控自身健康状态并与其他 OSD 交换心跳信息,以确保集群的稳定性和冗余性。此外,OSD 采用数据条带化存储技术,将数据分割成多个小块并分散存储在不同的 OSD 上,从而提升存储性能和容错能力,确保在部分节点故障时依然可以可靠地访问数据。

在条带化存储中,数据被分割成多个小块(或称为条带),并将这些条带分散存储在不同的 OSD(Object Storage Daemon)上。例如,假设有一个大文件,如果将它分成 4 个部分(条带),这 4 个部分可能分别存储在 4 个不同的 OSD 上。这样做的好处是提高了数据访问的并行性。例如,当一个客户端请求读取这个大文件时,可以同时从多个 OSD 中获取各个部分的数据,从而加快读取速度。

由于数据被分散存储,多个 OSD 可以同时处理 I/O 请求,因此整体的读写性能得到了提升。尤其在大文件存储或高负载情况下,这种并行访问能显著减少延迟。

Monitor(MON)

Ceph Monitor 负责维护集群的全局状态,包括 OSD 节点的状态、认证信息和集群配置。MON 的主要职责是保证 Ceph 集群的正常运行,跟踪集群中的OSD状态,管理集群配置和状态变化,维护CRUSH映射,并为 OSD 和客户端提供集群状态的最新视图。

MDS(Metadata Server)

MDS 是 Ceph 文件系统(CephFS)的元数据服务器,用于管理文件系统中的元数据(如文件名、目录结构、文件权限等)。MDS 管理CephFS的文件和目录结构,允许 CephFS 提供高效的 POSIX 文件系统访问。多个 MDS 可以并行工作,以提高大规模文件系统的元数据性能。

Ceph 对象网关(RADOS Gateway,RGW)

Ceph对象用于访问Ceph的对象存储,RGW 使 Ceph 支持与 Amazon S3 和 OpenStack Swift 兼容的对象存储 API,适合基于 HTTP 的对象存储访问。

CRUSH(Controlled Replication Under Scalable Hashing)算法

CRUSH 是 Ceph 中用于决定数据如何分布在 OSD 上的算法。与传统的中心化映射不同,CRUSH 算法通过分布式的哈希机制将数据智能分布到 OSD 中,使 Ceph 具备高可扩展性和灵活的数据再平衡能力。

  • RADOS 是 Ceph 存储系统的核心,所有的存储操作最终都在 RADOS 中进行。无论是对象存储、块存储还是文件系统,都依赖 RADOS。
  • OSD 负责具体的对象数据存储,是 RADOS 的核心执行单元。
  • MON 维护集群的全局状态并确保集群的一致性。
  • MDS 则负责 CephFS 的元数据管理,专为文件系统提供服务。
  • RGW 提供对象存储接口,允许用户通过 HTTP 协议操作 Ceph 中的对象。
  • CRUSH 算法确保数据分布在 OSD 上时的高可用性和冗余性。
下面是在Kubernetes集群上使用DaemonSet部署Ceph的详细步骤: 1. 创建Ceph集群配置文件 在Kubernetes Master节点上创建一个ceph.conf文件,并将其保存到 /etc/ceph 目录下。该文件应该包含Ceph集群的配置信息和认证密钥。以下是一个示例配置文件: ``` [global] fsid = {cluster-id} mon_initial_members = {mon-host-1}, {mon-host-2}, {mon-host-3} mon_host = {mon-host-1-ip}, {mon-host-2-ip}, {mon-host-3-ip} auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx ``` 2. 创建Ceph密钥文件 在Kubernetes Master节点上创建一个ceph.client.admin.keyring文件,并将其保存到 /etc/ceph 目录下。该文件包含Ceph集群管理用户的认证密钥。以下是一个示例文件: ``` [client.admin] key = {admin-key} ``` 3. 创建Ceph镜像 在Docker Hub上获取Ceph镜像,并将其下载到Kubernetes Master节点上。可以使用以下命令来获取镜像: ``` docker pull ceph/daemon:v3.2.3 ``` 4. 创建Ceph存储卷 在Kubernetes集群中创建一个存储卷,用于Ceph daemon的持久化存储。可以使用以下命令来创建存储卷: ``` kubectl create -f ceph-volume.yaml ``` 其中,ceph-volume.yaml文件包含以下内容: ``` apiVersion: v1 kind: PersistentVolume metadata: name: ceph-volume spec: capacity: storage: 100Gi accessModes: - ReadWriteOnce rbd: monitors: - {mon-host-1-ip}:6789 - {mon-host-2-ip}:6789 - {mon-host-3-ip}:6789 pool: rbd image: ceph-volume user: admin secretRef: name: ceph-client-secret fsType: ext4 ``` 其中,{mon-host-1-ip}、{mon-host-2-ip}、{mon-host-3-ip}是Ceph集群中的Monitor节点IP地址,{ceph-client-secret}是在第5步中创建的Secret对象的名称。 5. 创建Ceph认证密钥Secret对象 在Kubernetes集群中创建一个Secret对象,用于存储Ceph集群认证密钥。可以使用以下命令来创建Secret对象: ``` kubectl create secret generic ceph-client-secret --from-file=/etc/ceph/ceph.client.admin.keyring ``` 其中,/etc/ceph/ceph.client.admin.keyring是在第2步中创建的Ceph客户端认证密钥文件路径。 6. 创建Ceph DaemonSet 在Kubernetes集群中创建一个DaemonSet对象,用于部署Ceph daemon。可以使用以下命令来创建DaemonSet对象: ``` kubectl create -f ceph-daemonset.yaml ``` 其中,ceph-daemonset.yaml文件包含以下内容: ``` apiVersion: apps/v1beta2 kind: DaemonSet metadata: name: ceph-daemonset namespace: ceph spec: selector: matchLabels: app: ceph template: metadata: labels: app: ceph spec: containers: - name: ceph-daemon image: ceph/daemon:v3.2.3 volumeMounts: - name: ceph-volume mountPath: /var/lib/ceph/osd - name: ceph-conf mountPath: /etc/ceph volumes: - name: ceph-volume persistentVolumeClaim: claimName: ceph-volume-claim - name: ceph-conf configMap: name: ceph-conf ``` 其中,ceph-volume-claim是在第4步中创建的存储卷声明的名称,ceph-conf是在Ceph集群配置文件和认证密钥文件的配置映射。 7. 验证Ceph DaemonSet 使用以下命令验证Ceph daemon是否已成功部署: ``` kubectl get pods -n ceph ``` 如果一切正常,应该看到一个名为ceph-daemonset-<node-name>的Pod正在运行。 以上就是在Kubernetes集群上使用DaemonSet部署Ceph的详细步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值