Loading... 本篇接上回[用Ceph实现K8s集群数据持久化 #1](https://0x.c4a1.net/index.php/archives/46/)。 # 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问题](https://c4a15wh.cn/index.php/archives/48/#platform.linux_distribution%E9%97%AE%E9%A2%98)。 #### 警告 此处输入的**“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文本显示问题](https://c4a15wh.cn/index.php/archives/48/#ceph-deploy%E6%96%87%E6%9C%AC%E6%98%BE%E7%A4%BA%E9%97%AE%E9%A2%98)。 在列表里找到您希望让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问题](https://c4a15wh.cn/index.php/archives/48/#%E6%AE%8B%E7%95%99Block%E9%97%AE%E9%A2%98)。 #### 警告 在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> ``` **答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么** 答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么 **答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么** 答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么 **答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么** 答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么 **答应我,千万不要在生产环境执行它,除非你非常清楚你在做什么** 最后修改:2025 年 01 月 15 日 © 允许规范转载 赞 如果这对你有用,我乐意之至。