这篇文章上次修改于 696 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
前言
前面我们提到过采用Ceph作为持久化存储实现,本篇将讲述Ceph的部署和Ceph-CSI在Kubernetes集群以DaemonSet形式的部署太长了留到下一篇再讲。
本篇中提到的任何IP均可在前述的部署环境机器表中找到对应机器。
实操
噩耗
如果您跟笔者一样不幸地选择了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》对Ceph集群进行初始化,本篇不再赘述重复内容。
安装完之后,您可以直接跳到使用ceph-deploy设置CephFS,无需查看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的部署基本告一段落。
没有评论