这篇文章上次修改于 469 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

本篇接上回用Ceph实现K8s集群数据持久化 #1

Ceph集群部署

环境信息

本次部署以星河武汉金银潭集群为例,环境信息如下:

内网网段: 172.23.1.0/24
网关: 172.23.1.1 gateway
节点A1: 172.23.1.2 a1 Ubuntu-20.04-LTS SSD*1(/dev/nvme0n1)
节点A2: 172.23.1.3 a2 Ubuntu-20.04-LTS SSD*1(/dev/nvme0n1)
节点A3: 172.23.1.4 a3 Ubuntu-20.04-LTS SSD*1(/dev/nvme0n1)

Master节点: A1

注意: 本教程仅供参考,在进行任何操作前请结合实际情况思考,切莫照搬操作,否则可能造成生产环境灾难!

配置集群节点免密登录

在A1(Master节点)生成ssh key并copy到各个机器上:

ssh-keygen -o
ssh-copy-id -i ~/.ssh/id_rsa.pub root@a2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@a3

注意: 下述操作能且只能在Master节点进行

初始化Master节点

安装ceph-deploy

ceph-deploy是一个ceph的简易部署工具,能简化很多操作流程,您可以通过该命令安装它:

sudo apt install ceph-deploy -y

创建集群

在安装完ceph-deploy后,您需要创建一个文件夹用于存放ceph-deploy的临时文件。
我这里选的是/opt/ceph-deploy,对应操作如下:

mkdir /opt/ceph-deploy
chmod +775 /opt/ceph-deploy

然后运行ceph-deploy初始化集群

ceph-deploy new a1 a2 a3

此处部署的时候您可能会遇到一个Python错误,详见platform.linux_distribution问题

警告

此处输入的“a1 a2 a3”均为节点的hostname,在执行相关操作前,请确认您能通过集群内部DNS解析出这些hostname或者确认集群里每个节点的/etc/hosts设置中均有相关hostname解析配置,否则可能会导致严重问题。

启动集群

安装Ceph软件包(可选)

如果您此前已经通过apt安装ceph或者您希望采用自己的安装方式,则在已经顺利完成所有模块的安装的前提下,该步骤是可选的。
如果您希望使用ceph-deploy安装它,您可以在Master节点使用如下命令:

ceph-deploy install a1 a2 a3 // 请将该hostname替换成您自己的集群节点的hostname

启动Ceph Monitor

完成Ceph安装后,您需要先启动Ceph Monitor,它负责管理集群的状态和配置信息,因此需要先启动,您可以通过在Master节点执行以下命令启动它。

ceph-deploy mon create-initial // 初始化Monitor
ceph-deploy admin a1 // 此处因为A1是Master节点,所以让A1来当Monitor,选其他的也可以

启动Ceph Manager

Ceph Manager也是一个必须部署的组件,以下命令同样在Master节点执行:

ceph-deploy mgr create a1 // 同Monitor

进行完上述操作后,集群的核心服务就大部分启动完成了,但还需要构建OSD才能对外提供存储服务。

配置OSD卷

初始化磁盘

首先查看各个节点的磁盘:

ceph-deploy disk list a1 a2 a3 

此处可能会出现一个错误,解决方法详见ceph-deploy文本显示问题
在列表里找到您希望让Ceph独占的磁盘,记下它的路径。例如此处星河部署的是/dev/nvme0n1。然后用ceph-deploy将它擦除:

ceph-deploy disk zap a1 /dev/nvme0n1
ceph-deploy disk zap a2 /dev/nvme0n1
ceph-deploy disk zap a3 /dev/nvme0n1

如果擦除磁盘受阻,且之前有部署过一个Ceph集群,解决方法详见残留Block问题

警告

在Ceph Luminous版本及后续推出的版本中,设置目录作为Ceph OSD已经被放弃,请确认您使用的是一整块磁盘,而非一个小目录。

创建OSD卷

在擦除磁盘后,方可创建OSD卷:

ceph-deploy osd create a1 --data /dev/nvme0n1
ceph-deploy osd create a2 --data /dev/nvme0n1
ceph-deploy osd create a3 --data /dev/nvme0n1

至此,Ceph的核心部件全部部署完成,关于K8s方面的应用详见后文。

停!你不该再继续深入阅读了!
接下来的内容非常危险!请不要随意执行!

重开

如果你发觉你搞砸了一切,除了重装系统,你可以通过ceph-deploy来reset环境。

警告

这个reset是真正意义上的reset,会将你的系统里所有有关于ceph的内容全部抹掉,包括OSD、Monitor、Manager、Keys。
如果你执行了它,你所有在Ceph集群里的数据都将会被抹除,所以如果你闲着没事干,千万不要尝试执行这个命令,输入命令前仔细想想自己今天有没有喝酒,喝酒了就赶紧睡觉,不要碰生产环境哪怕一个字节。
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么

删除OSD

ceph osd tree
ceph osd out osd.x
ceph osd crush remove osd.x
ceph osd rm osd.x

抹除其他内容

ceph-deploy purge <NodeName>

2022.11.21补充:
请一并删除data:

ceph-deploy purgedata <NodeName>

答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么
答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么