# ceph_deployer **Repository Path**: ngcb/ceph_deployer ## Basic Information - **Project Name**: ceph_deployer - **Description**: ceph_deployer - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-20 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ceph Deployer Ceph 集群一键部署 TUI 工具:通过全屏 TUI 引导用户完成 mon 初始化 → 推送到所有节点 → mgr 启动 → OSD 创建 → 存储池 → libvirt 密钥的 12 步部署流程。在 node1 上以 root 身份运行一次即可完成整个集群部署。 存储网络 CIDR、节点 IP、网卡名等均通过 TUI 配置,不绑定任何特定网段;SSH 也通过存储网与各节点通信。 ## 特性 - **全屏 TUI**(textual):分步表单输入(SSH 凭据 / 节点清单 / 磁盘选择 / 存储池配置) - **自动 SSH 推送**:用 paramiko 把 ceph.conf / keyring / monmap 推到其余节点,无需手工复制粘贴 - **磁盘自动扫描 + 三种模式**:ssh 到每台 host 跑 `lsblk`,UI 上勾选 OSD 盘并选择磁盘模式 - `hdd`(纯 HDD,无 db 分区) - `ssd_hdd`(SSD 做 db 卷,HDD 做 data,使用 `cephdb` VG) - `nvme`(纯 NVMe,无 db 分区) - **幂等部署**:VG/LV/Pool/libvirt secret 已存在时自动跳过;`/etc/hosts` 覆盖前自动备份 - **实时日志 + 步骤进度**:12 个步骤独立追踪,失败不中断(可继续后续步骤以便排查) - **完成汇总**:展示 `ceph -s` / `ceph osd tree` / `ceph osd pool ls detail` - **配置可保存**:`~/.ceph_deployer.json`,下次启动可加载 ## 节点拓扑假设 | 角色 | 数量 | 用途 | | --- | --- | --- | | mon | 3 | node1 / node2 / node3(同时跑 mgr) | | host | 3 | host1 / host2 / host3(跑 OSD) | 所有节点应位于同一存储网段(CIDR 在 TUI 中配置),存储网卡名按节点单独指定。 ## 安装 ### 方式 1:直接跑 Python 脚本(需要 py3.12+) ```bash git clone <本仓库> cd ceph_deployer pip install -r requirements.txt sudo python3 ceph_deployer.py # 必须在 node1 上以 root 运行 ``` ### 方式 2:PyInstaller 打成单文件二进制 ```bash ./build.sh ./dist/ceph-deployer # Linux .\dist\ceph-deployer.exe # Windows ``` ## 使用流程 1. **欢迎屏**:选择「新建配置」或「加载已有」 2. **配置屏**(4 个 Tab): - **SSH 凭据**:用户名 / 密码(所有节点统一)/ 端口 / 本机主机名(必须是 mon 角色)/ 是否自动 sudo 提权(兼容 NOPASSWD 和需要密码两种情况) - **集群 & 网络**:域名 / public network / UFW 放行段 / 集群 MTU(默认 1500,jumbo frame 用 9000)/ [osd] 段调优模式(auto/on/off,仅 NVMe 场景生效) - **节点清单**:`mon,node1,node1.example.com,10.0.0.2,bond1,,` 一行一个节点 - **存储池 & OSD**:pool 名 / pg num(支持根据 OSD 总数算推荐值,按钮或 Ctrl+P 一键应用,可手动改)/ db LV 大小(仅 ssd_hdd 模式使用) 3. **磁盘扫描屏**:自动 ssh 到每台 host 跑 `lsblk`,选择磁盘模式、勾选 OSD 盘、填写 VG 设备(仅 ssd_hdd 模式) 4. **部署进度屏**:12 步骤实时日志 + 进度条,失败步骤标红但不中断 5. **汇总屏**:集群健康 / OSD 树 / Pool / 步骤结果 ## 12 个部署步骤 1. UFW 放行存储网 CIDR(所有节点) 2. 存储网 rmem/wmem 内核参数(所有节点,分别检查 rmem_max / wmem_max) 3. 写入 `/etc/hosts`(所有节点,覆盖前自动备份为 `/etc/hosts.bak.ceph_deployer.<时间戳>`) 4. 在 node1 初始化第一个 mon(`ceph-mon@`),等待 `ceph -s` 可用 5. 把 ceph.conf / admin keyring / bootstrap-osd keyring / monmap / mon keyring 推到其余节点 6. 在其余 mon 节点上启动 `ceph-mon@`,并等待所有 mon 加入 quorum(最多 120s) 7. 在 node1 启动 `ceph-mgr@`,等待 mgr active(最多 60s) 8. 在其余 mon 节点上启动 mgr(mgr 高可用 standby) 9. 在每台 host 上创建 OSD,根据磁盘模式自动选择命令: - `ssd_hdd`:`pvcreate` → `vgcreate cephdb` → `lvcreate -L 64GiB -n dbsdX cephdb` → `ceph-volume lvm create --data /dev/sdX --block.db cephdb/dbsdX` - `hdd`:`ceph-volume lvm create --data /dev/sdX` - `nvme`:`ceph-volume lvm create --data /dev/nvme0nX` - VG/LV 已存在时自动跳过,幂等 10. 创建 `libvirt-pool`(已存在则跳过)+ 关闭 pg_autoscale + `rbd pool init` + `client.libvirt` 凭据 + libvirt secret(已存在则只 `secret-set-value`) 11. `ceph mon enable-msgr2` / `auth_allow_insecure_global_id_reclaim false` / `mgr module enable prometheus` 12. 汇总 `ceph -s` 部署开始前还会执行 preflight 检查:必须 root 运行 + 必要命令存在(ceph / ceph-volume / ceph-authtool / monmaptool / systemctl / vgcreate / lvcreate / virsh / sysctl)。 ## 节点清单格式 每行一个节点,逗号分隔: ``` role,name,fqdn,ip,storage_nic,disk_mode,vg_device,osd_disks ``` 字段说明: - `role`:`mon` 或 `host` - `disk_mode`:`hdd` | `ssd_hdd` | `nvme`(仅 host 节点有效,默认 `ssd_hdd`) - `vg_device`:仅 `ssd_hdd` 模式需要(如 `/dev/sdb`) - `osd_disks`:用空格分隔多个 `/dev/sdX` 或 `/dev/nvme0nX` 示例: ``` mon,node1,node1.example.com,10.0.0.2,bond1,,, mon,node2,node2.example.com,10.0.0.3,bond1,,, mon,node3,node3.example.com,10.0.0.4,bond1,,, # ssd_hdd 模式: SSD 做 db 卷 (/dev/sdb 是 SSD), HDD 做数据盘 host,host1,host1.example.com,10.0.0.5,bond1,ssd_hdd,/dev/sdb,/dev/sdc /dev/sdd /dev/sde # 纯 HDD 模式: 无 db, 全部盘做数据 host,host2,host2.example.com,10.0.0.6,bond1,hdd,,/dev/sdc /dev/sdd /dev/sde # 纯 NVMe 模式: 无 db, 全部 NVMe 盘做数据 host,host3,host3.example.com,10.0.0.7,bond1,nvme,,/dev/nvme0n1 /dev/nvme0n2 ``` `ssd_hdd` 模式下 DB LV 名称按字母顺序自动生成(`dbsdXX`、`dbsdYY` ...,按 OSD 盘在 `osd_disks` 列表中的顺序)。 ## 文件 - `ceph_deployer.py` — 单文件主程序 - `requirements.txt` — 运行时依赖 - `build.sh` — PyInstaller 打包脚本 - `LICENSE` — Apache-2.0 许可证 - `~/.ceph_deployer.json` — 配置文件(运行后自动生成) ## 非交互式部署(CI/测试) ```bash python3 ceph_deployer.py --headless ``` 会读取 `~/.ceph_deployer.json` 并直接执行所有步骤。适合在已有的 TUI 配置基础上做无人值守部署。 ## 注意事项 - 必须在 **node1** 上以 root 身份运行(脚本会在本机跑 mon 初始化 + 大量 ceph 命令,preflight 会强制校验) - SSH 密码在内存中以明文保存(dataclass),打包分发时注意安全 - 部署过程中**不要关闭终端**;如需中止按 `Ctrl+C`,会停止后续步骤但已完成的不可回滚 - 失败步骤会标红但不会自动回滚;建议失败后手工检查 ceph 状态 - 远端 SSH 命令流式输出使用双线程并发读 stdout/stderr,避免长输出命令(如 `ceph-volume lvm create`)死锁 ## 已知限制 - TUI 暂不支持「步骤级跳过」,失败的步骤只能继续执行后续步骤 - 暂不支持 IPv6 / 多 public network 场景 - `ssd_hdd` 模式下 DB LV 命名按 OSD 盘在 `osd_disks` 中的顺序取字母表(a/b/c/d...),单节点最多 26 个 OSD;`hdd` / `nvme` 模式无此限制 ## License 本项目采用 [Apache License 2.0](LICENSE) 授权。 ``` Copyright 2026 WorkBuddy Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ```