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

news/2024/12/22 1:47:41/

Ceph配置

Ceph集群通常是一个独立的存储集群,可以部署在 Kubernetes 集群之外。Ceph 提供分布式存储服务,能够通过 RADOS、CephFS、RBD(块存储)、和 RGW(对象存储)等方式与 Kubernetes 集成。即使 Ceph 部署在 Kubernetes 外部,它依然可以通过存储插件(如 Rook 或 CSI)来为 Kubernetes 提供存储服务。这种架构允许 Ceph 集群和 Kubernetes 集群独立扩展,且 Ceph 可以被多个 Kubernetes 集群或者其他系统(如 OpenStack)同时使用。

教程中配置ceph集群有三个节点,分别是master节点,monitor节点和OSD(object storage deamon)节点。

master节点主要用于管理 Ceph 集群,可以作为管理员机器来执行 Ceph 的命令行工具(如 ceph CLI)和集群的配置操作。这台机器一般会安装 Ceph 部署工具(如 ceph-deploy),但它通常不需要承担存储和监控的职责。事实上master节点不是必须的,可以在ceph集群的任意节点安装ceph CLI,但为了方便管理和保持隔离,通常会保留一个专门的管理节点。

Ceph Monitor (MON) 节点负责管理集群的健康状态,保存集群的元数据(比如集群成员、映射关系、状态信息等)。Monitor 节点会参与选举,决定集群是否可以正常操作。

OSD(Object Storage Daemon)是 Ceph 集群中存储数据的主要组成部分。每一个 OSD 实际上代表一个存储硬盘或者存储分区,负责读写数据、复制数据和心跳检测。

事实上一个高可用的ceph集群需要至少三个monitor和 OSD节点来保证数据复制和高可用性。Monitor节点可以完成仲裁,而越多的OSD节点可以保证冗余和高效的数据存取。

[root@master1-admin ~]# yum install python-setuptools ceph-deploy -y #在 master1-admin、node1-monitor 和 node2-osd 节点安装 ceph
[root@master1-admin]# yum install ceph ceph-radosgw -y
[root@node1-monitor ~]# yum install ceph ceph-radosgw -y
[root@node2-osd ~]# yum install ceph ceph-radosgw -y

ceph-deploy:是 Ceph 的部署工具,用于从管理节点(通常是 admin 节点)管理和部署 Ceph 集群。它允许你从一个节点管理整个 Ceph 集群,包括创建 OSD、Monitor 节点等。

在 master节点安装了ceph-deploy,并且在所有节点安装cephceph-rados gateway。

配置master

创建一个目录,用于保存ceph-deploy生成的配置文件信息:
在目录中执行命令生成一个master节点,一个monitor节点和一个osd节点

[root@master1-admin ceph ~]# cd /etc/ceph
[root@master1-admin ceph]# ceph-deploy new master1-admin node1-monitor node2-
osd
[root@master1-admin ceph]# ls
#生成了如下配置文件
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring

修改ceph.conf配置文件:

[global]
fsid = af5cd413-1c53-4035-90c6-95368eef5c78
mon_initial_members = node1-monitor
mon_host = 192.168.40.201
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
osd_pool_default_size = 2
mon clock drift allowed = 0.500
mon clock drift warn backoff = 10
把 osd_pool_default_size = 2 加入[global]段,这样只有 2 个 osd 也能达到 active+clean 状态。
mon clock drift allowed #监视器间允许的时钟漂移量默认值 0.05
mon clock drift warn backoff #时钟偏移警告的退避指数。默认值 5
ceph 对每个 mon 之间的时间同步延时默认要求在 0.05s 之间,这个时间有的时候太短
了。所以这里将这两个参数设置为0.5和10。

配置monitor

在master节点初始化monitor:

[root@master1-admin]# ceph-deploy mon create-initial

收集所有密钥: 

配置OSD

 在master节点上将三个节点的目录配置为OSD的存储目录。

[root@ master1-admin ceph]# cd /etc/ceph/
[root@master1-admin ceph]# ceph-deploy osd prepare master1-admin:/dev/sdb 
[root@master1-admin ceph]# ceph-deploy osd prepare node1-monitor:/dev/sdb 
[root@master1-admin ceph]# ceph-deploy osd prepare node2-osd:/dev/sdb

运行成功后激活OSD,并查看状态:

[root@master1-admin ceph]# ceph-deploy osd activate master1-admin:/dev/sdb1
[root@master1-admin ceph]# ceph-deploy osd activate node1-monitor:/dev/sdb1
[root@master1-admin ceph]# ceph-deploy osd activate node2-osd:/dev/sdb1
[root@ master1-admin ceph]# ceph-deploy osd list master1-admin node1-monitor
node2-osd

激活成功的状态: 

创建文件系统 

在指定这些节点上创建 MDS 服务,帮助管理文件系统的元数据。

mds 是 Ceph 文件系统 (CephFS) 中的 元数据服务器(Metadata Server,MDS)。在 CephFS 中,元数据服务器负责管理和存储文件系统的元数据,例如目录结构、文件权限和其他与文件系统操作相关的信息。元数据与实际文件数据分开存储和管理,因此 MDS 主要处理与文件系统操作相关的请求,例如列出目录、查找文件、创建和删除文件等。

通常是 1 到 2 个活动 MDS 节点就可以处理大量的文件系统请求。大多数情况下,不需要每个 OSD 节点都运行 MDS 服务。 

[root@ master1-admin ceph]# ceph-deploy mds create master1-admin node1-monitor
node2-osd

上面的命令会在 master1-adminnode1-monitornode2-osd 这三个节点上各创建一个 MDS 实例。也就是说,最终你会有 3 个 MDS 实例,每个节点一个。 

首先在master节点上通过osd创建池,每一个池包含26个PG。这里的池不一定在master节点上。创建数据池时,Ceph 会使用 CRUSH 算法自动决定数据的分布,而无需手动指定要在哪些 OSD 上创建池。Ceph 会根据池的配置和 OSD 的状态自动选择合适的 OSD 来存储数据。

[root@master1-admin ceph]# ceph osd pool create cephfs_data 26
pool 'cephfs_data' created
[root@master1-admin ceph]# ceph osd pool create cephfs_metadata 26
pool 'cephfs_metadata' created

PG(Placement Group) 是 Ceph 用来分配和管理数据的单位。每个池中的对象会被分配到一个 PG 中,PG 再被分配到 OSD 上。PG 数量的选择对集群性能和数据均衡性有很大影响。

创建一个文件系统fs,名称叫做xianchao,其中元数据池是ceph_metadata,数据池是ceph_data。随后列举文件系统,发现我们刚才创建的这个文件系统。

[root@master1-admin ceph]# ceph fs new xianchao cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
[root@master1-admin ceph]# ceph fs ls
name: xianchao, metadata pool: cephfs_metadata, data pools: [cephfs_data]

CephFS 允许你在创建文件系统时配置多个数据池。每个数据池可以用于存储不同类型的数据,以满足不同的需求。例如,你可以创建一个池用于存储用户数据,另一个池用于存储日志或临时文件。CephFS 必须有一个元数据池,用于存储文件系统的元数据,如文件名、目录结构、权限等。这是管理文件系统结构和操作的关键。

[root@ master1-admin ceph]# ceph mds stat # 查看 mds 节点状态
xianchao:1 {0=master1-admin=up:active} 2 up:standby

0=master1-admin 指的是 master1-admin 节点正在运行一个 MDS 实例,标识符为 0。
up:standby 表示当前有一个 MDS 处于**待命(standby)**状态,作为活跃 MDS 的备份。如果当前活跃的 MDS 出现问题,这个 standby MDS 将自动接管,保持文件系统的高可用性。

查看ceph健康状态:

[root@master1-admin ceph]# ceph -s
cluster cd296a0b-1f61-4b9f-8cc3-0a57dfab00eb
health HEALTH_OK
monmap e1: 3 mons at {master1-admin=192.168.40.200:6789/0,node1-monitor=192.168.40.201:6789/0,node2-osd=192.168.40.202:6789/0}
election epoch 4, quorum 0,1,2 master1-admin,node1-monitor,node2-osd
fsmap e7: 1/1/1 up {0=node2-osd=up:active}, 2 up:standby
osdmap e20: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v51: 116 pgs, 3 pools, 2068 bytes data, 20 objects
323 MB used, 164 GB / 164 GB avail
116 active+clean

MGR

Mgr 是 Ceph 集群的管理守护进程,它负责收集和报告集群状态、性能指标,并提供集群管理接口。模块化架构使得 Mgr 可以扩展和自定义,管理员可以根据需求加载不同的管理模块。

K8S挂载Ceph

kubernetes 要想使用 ceph,需要在 k8s 的每个 node 节点安装 ceph-common,把 ceph节点上的 ceph.repo 文件拷贝到 k8s 各个节点/etc/yum.repos.d/目录下,然后在 k8s 的各个节点 yum install ceph-common -y
部署Ceph的网段需要和K8s在一个网段,保证可以通信。
[root@master1-admin ~]# scp /etc/yum.repos.d/ceph.repo master:/etc/yum.repos.d/
[root@master1-admin ~]# scp /etc/yum.repos.d/ceph.repo node1:/etc/yum.repos.d/
[root@master]yum install ceph-common -y
[root@mnode1]yum install ceph-common -y

创建ceph rbd

ceph 配置文件拷贝到 k8s 的控制节点和工作节点
[root@master1-admin ~]# scp /etc/ceph/* master:/etc/ceph/
[root@master1-admin ~]# scp /etc/ceph/* node1:/etc/ceph/
[root@master1-admin ~]# ceph osd pool create k8srbd1 56
pool 'k8srbd' created
[root@master1-admin ~]# rbd create rbda -s 1024 -p k8srbd1
[root@master1-admin ~]# rbd feature disable k8srbd1/rbda object-map fast-diff 
deep-flatten

创建了一个资源池叫做k8srbd1,并创建了块存储rbda,大小为 1024MB,并存储在 k8srbd1 池中。

禁用了RBD映像的几个功能。RBD 是块设备的类型,而 rbda 是该类型的一个具体实例。你可以创建多个 RBD 镜像,比如 rbdarbdb,它们都是 RBD 的具体表现。

值得注意的是,在ceph中创建文件系统的时需要先创建metadata和data,然后创建文件系统,指定metadata和data,metadata 会由MDS管理。

ceph osd pool create cephfs_metadata 128
ceph osd pool create cephfs_data 128
ceph fs new mycephfs cephfs_metadata cephfs_data

而创建rbd的时候只需要按照上述方法创建就可以。

pod挂载ceph rbd

[root@xianchaomaster1 ~]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:name: testrbd
spec:containers:- image: nginxname: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: testrbdmountPath: /mntvolumes:- name: testrbdrbd:monitors:- '192.168.40.201:6789'- '192.168.40.200:6789'- '192.168.40.202:6789'pool: k8srbd1image: rbdafsType: xfsreadOnly: falseuser: adminkeyring: /etc/ceph/ceph.client.admin.keyring

因为上面我们将ceph的配置文件都复制到k8s节点,所以在目录下可以找到ceph 的keyring

这里的rbda只能被挂载到一个pod,如果需要在别的pod里面挂载rbd镜像,可以在资源池里面创建别的rbd镜像。


http://www.ppmy.cn/news/1536303.html

相关文章

【网络】用网线连接两台电脑实现远程桌面

目录 1. 准备工作1.1 硬件要求1.2 软件要求 2. 网络连接2.1 直接连接2.2 通过路由器连接 3. 配置IP地址3.1 设置IP地址3.2 检查连接 4. 启用远程桌面4.1 启用远程桌面4.2 添加用户4.3 防火墙设置 5. 远程连接5.1 使用远程桌面连接5.2 使用快捷方式 6. 常见问题解决7. 额外建议结…

JVM(Java Virtual Machine) 详解

1. JVM 内存区域划分 一个 Java 写的程序,跑起来就得到了一个 Java 进程(资源分配的基本单位) JVM 上面运行的字节码指令 1) 程序计数器(比较小的空间),保存了下一条要执行的指令的地址 这个不是 CPU 的…

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化,adb连接手机设备。 需要的工具java编辑器:jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步:安装sdk,里面包含建立工具bu…

信息学奥赛使用的编程IDE:Dev-C++ 安装指南

信息学奥赛(NOI)作为全国性的编程竞赛,要求参赛学生具备扎实的编程能力,而熟练使用适合的编程工具则是学习与竞赛的基础。在众多编程环境中,Dev-C IDE 因其简洁、轻量、支持C编程等特点,成为许多参赛者的常…

项目配置说明

文章目录 零、预安装0.1 在Ubuntu 系统中安装 git0.2 在Ubuntu 系统中安装 cmake 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 零、预安装 0.1 在Ubuntu 系统中安装 git 在 Ubuntu 桌面&…

ML 系列:【13 】— Logistic 回归(第 2 部分)

文章目录 一、说明二、挤压方法三、Logistic 回归中的损失函数四、后记 一、说明 ​ 在这篇文章中,我们将深入研究 squashing 方法,这是有符号距离方法(第 12节)的一种很有前途的替代方案。squashing 方法通过提供增强的对异常值…

【Web】复现n00bzCTF2024 web题解(全)

目录 File Sharing Portal 方法一: 方法二: Focus-on-yourSELF Passwordless File Sharing Portal 附件的Dockerfile给了这么一段 # Add the cron job to the crontab RUN mkdir /etc/cron.custom RUN echo "*/5 * * * * root rm -rf /app…

C++11--默认成员函数控制 模板的可变参数

默认成员函数 之前学习C类中,有6个默认成员函数: 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const 取地址重载 最重要的是前4个,默认成员函数就是我们不写编译器会生成一个默认的。在C11中新增了两个函数:移动构造函…