Loading... ## 前言 前面我们提到过采用Ceph作为持久化存储实现,本篇将讲述Ceph的部署~~和Ceph-CSI在Kubernetes集群以DaemonSet形式的部署~~太长了留到下一篇再讲。 本篇中提到的任何IP均可在前述的[部署环境机器表](https://0x.c4a1.net/index.php/archives/65/#%E5%AE%9E%E6%93%8D%E7%8E%AF%E5%A2%83%E5%A3%B0%E6%98%8E)中找到对应机器。 ## 实操 ### 噩耗 如果您跟笔者一样不幸地选择了Ubuntu 22.04作为承载业务的发行版,那么您可能无法通过同在Ubuntu 20.04上相似的手段对Ceph进行部署。  由于社区已经停止维护ceph-deploy,我们已经没有办法通过正常手段在ubuntu 22.04上安装ceph-deploy了,即使用pip强行安装也会因为软件源问题无法继续。 ### 使用ceph-deploy初始化Ceph [tip type="yellow"]社区已经停止维护ceph-deploy,笔者不建议您继续使用ceph-deploy部署Ceph。[/tip] 如果您使用ubuntu 20.04及更早的版本,您仍可以按照我之前写过的[《用 Ceph 实现 K8s 集群数据持久化 #2》](https://c4a15wh.cn/index.php/archives/47/)对Ceph集群进行初始化,本篇不再赘述重复内容。 安装完之后,您可以直接跳到[使用ceph-deploy设置CephFS](https://c4a15wh.cn/index.php/archives/68/#%E7%94%A8ceph-deploy%E8%AE%BE%E7%BD%AECephFS),无需查看cephadm的相关内容。 ### 使用cephadm初始化Ceph 旧事物终究是要被新事物所取代的,所以我们还是得站起来向前看才是。 #### 初始化软件环境 相较于ceph-deploy,cephadm采用了容器的形式部署Ceph,所以我们需要先初始化一下软件环境: ``` # 安装基础软件 sudo apt update sudo apt install docker.io cephadm ceph-common ntp -y # 同步时间 sudo systemctl start ntp sudo hwclock --systohc ``` #### 部署单点Ceph服务 抽一个看着顺眼的节点先一步安装Ceph,笔者此处选择ap-zj-storage-1。关于本篇实践涉及的节点组,本篇开头有说明,此处不再赘述。 找个地方放Ceph的文件: ``` sudo mkdir -p /etc/ceph sudo cd /etc/ceph ``` 由于Ceph具有可拓展性,所以此处我们可以先在一个节点上进行安装,然后拓展到其它节点。 我们先初始化一个节点上的monitor和manager组件: ``` # 192.168.100.11 <=> ap-zj-storage-1 sudo cephadm bootstrap --mon-ip 192.168.100.11 ``` 等待片刻,cephadm会拉取Ceph的Docker镜像并完成相关部署。 之后,cephadm会生成全局唯一的集群Ceph SSH Key以便管理,如未通过参数指定,公钥默认位于: ``` /etc/ceph/ceph.pub ``` 将ceph.pub同步到其他节点的authorized_keys,**必须保证cephadm能通过ssh控制另一台机器**。 #### 将单点集群拓展至多点 此时单点服务已经安装完成,应尽快拓展集群至其他节点,同步完SSH Key之后您可以直接使用ceph-common拓展集群节点: ``` sudo ceph orch host add ap-zj-storage-0 ``` 然后对monitor组件进行扩容: ``` # 确认monitor的数量为节点数量,本篇部署的Ceph集群共有两个节点,所以monitor数量定为2 sudo ceph orch apply mon 2 # 解除系统对monitor的自动平衡 sudo ceph orch apply mon --unmanaged # 手动确认monitor部署在Ceph中的具体节点 sudo ceph orch apply mon "ap-zj-storage-1,ap-zj-storage-0" ``` 然后就等吧,cephadm会逐步向各个节点分派组件,这可能需要5-10分钟。 完成之后,集群已经正确运行了Monitor和Manager组件,但是OSD组件仍然需要我们手动初始化。 #### 确认组件的运行状态 在开始之前,您需要检查Ceph集群的健康状态: ``` sudo ceph -s ``` 如果您和笔者一样遇到了下列错误: ``` clock skew detected on mon.xxx ``` 您需要检查ntp服务是否正常运行,以及再次同步系统时钟。 一般来说,此时集群应该仍处于 HEALTH_WARN 状态,这个状态应该是由于OSD数量不达标造成的,我们接下来就会部署OSD组件。 #### 部署OSD组件 首先查看一下可以作为OSD的组件: ``` sudo ceph orch device ls ``` 笔者执行此命令的输出是: ``` ceph orch device ls HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS ap-zj-storage-0 /dev/sdb ssd QEMU_HARDDISK_drive-scsi2 1099G Yes 2m ago ap-zj-storage-0 /dev/sdc ssd QEMU_HARDDISK_drive-scsi1 1099G Yes 2m ago ap-zj-storage-1 /dev/sdb ssd QEMU_HARDDISK_drive-scsi2 1099G Yes 2m ago ap-zj-storage-1 /dev/sdc ssd QEMU_HARDDISK_drive-scsi1 1099G Yes 2m ago ``` 着重确认AVAILABLE这栏的数据为 Yes,如果可用性不对劲,需要关注REASONS一栏查找原因。 确认设备无误后,如果你想将所有磁盘都设为OSD,其实你可以当个懒人,让Ceph帮你操心这些事情: ``` sudo ceph orch apply osd --all-available-devices ``` 这样Ceph就会将所有AVAILABLE=Yes的磁盘都设为OSD了,这同样需要等待5-10分钟,让系统自动操作。 当然,也有人想手动指定设备为OSD。如果你前面让Ceph帮你干了,那这边可不要再执行了: ``` sudo wipefs -af <DEVICE> sudo ceph orch device zap <NODE> <DEVICE> --force sudo ceph orch device ls # 记得确认可用性 sudo ceph orch daemon add osd <NODE>:<DEVICE> ``` #### 确认OSD正常运行 运行下列命令确认OSD正常运行: ``` sudo ceph osd tree ``` 笔者的输出是: ``` ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 4.00000 root default -3 2.00000 host ap-zj-storage-0 0 ssd 1.00000 osd.0 up 1.00000 1.00000 2 ssd 1.00000 osd.2 up 1.00000 1.00000 -5 2.00000 host ap-zj-storage-1 1 ssd 1.00000 osd.1 up 1.00000 1.00000 3 ssd 1.00000 osd.3 up 1.00000 1.00000 ``` 至此,Ceph的初始化就完成了。 ### 用cephadm设置CephFS #### 创建CephFS对象 先初始化一下FS对象: ``` sudo ceph fs volume create zj_k8s_cephfs ``` 此处没有指定OSD Pool对象,一般Ceph会自动创建,无需过多干预(干预了也会被自动balance掉...就没必要了吧)。 然后需要给FS对象创建MDS。 #### 创建元数据服务器(MDS) 元数据服务器,即英文文献里的MetaData Server,简称MDS。由于CephFS是POSIX兼容的**文件系统**,在跨设备的集群化数据存储中,需要一个存储文件信息和提供指引的“向导”,这个“向导”就是MDS。MDS的性能将**一定程度上决定**CephFS系统整体的IO性能。 此处为了后续启动CephFS,我们需要先行创建MDS: ``` # 设置副本数量,部署服务 sudo ceph orch apply mds zj_k8s_cephfs --placement="2 ap-zj-storage-0 ap-zj-storage-1" ``` 大多数情况下,设置该项后系统都会自动部署,需要等待一会。 如果等待后运行**ceph orch ls**后还是没看到MDS服务,则需要手动部署: ``` sudo ceph orch daemon add mds <FS Name> <MDS Node> ``` 至此,Ceph集群内关于CephFS的部署基本告一段落,下面是ceph-deploy的部署方式,用cephadm部署的话可以不看。 ### 用ceph-deploy设置CephFS [tip type="yellow"]社区已经停止维护ceph-deploy,笔者此处不建议您继续使用ceph-deploy部署Ceph。[/tip] #### 创建MDS ``` sudo ceph-deploy mds create <Node0> <Node1> <Node2> ``` #### 创建OSD Pool ``` # 创建CephFS存储数据的OSD Pool sudo ceph osd pool create <FS Data OSD Pool> 32 # 创建CephMDS存储元数据的OSD Pool sudo ceph osd pool create <MetaData OSD Pool> 32 ``` #### 创建FS对象 ``` ceph fs new <FS Name> <MetaData OSD Pool> <FS Data OSD Pool> ``` 至此,Ceph集群内关于CephFS的部署基本告一段落。 ## 最后修改:2025 年 01 月 15 日 © 允许规范转载 赞 如果这对你有用,我乐意之至。