尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Ceph test_orchestrator 模块实战指南:用模拟数据驱动 ceph orch 编排器开发与集成测试
存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载test_orchestrator 是 Ceph Managermgr内置的测试专用编排器Orchestrator实现专门服务于开发环境与集成测试场景。它本身不做任何实际工作而是通过加载 JSON 模拟数据dummy data来向ceph orch命令体系提供可预测的 inventory、service 与 daemon 视图从而在没有真实编排后端如 cephadm、Rook的情况下验证 CLI 解析、命令分发与状态展示逻辑。读完本文你将掌握 test_orchestrator 的启用、状态检查与模拟数据导入方法并能基于源码理解其内部数据模型与回退探测机制。一、test_orchestrator 是什么从源码注释看test_orchestrator 的定位非常明确module.pyThis is an orchestrator implementation used for internal testing. Its meant for development environments and integration testing. It does not actually do anything. The implementation is similar to the Rook orchestrator, but simpler.也就是说它不创建、不删除、不编排任何真实服务——几乎所有写操作都只做参数校验后返回空字符串或done用于内部测试——供开发者在不搭建真实集群编排环境的前提下测试ceph orch命令链路的正确性实现方式与 Rook 编排器类似但更简单——类名为TestOrchestrator同时继承MgrModule与orchestrator.Orchestrator接口基类。在 CMakeLists.txt 中它被明确归类为# tests (for testing purpose only)分组与selftest等模块并列安装时随其余 mgr 模块一起被复制到${CEPH_INSTALL_DATADIR}/mgr目录。二、激活 test_orchestrator 模块原文档给出的激活步骤只有两条命令但理解其背后机制有助于排查问题$ ceph mgr module enable test_orchestrator $ ceph orch set backend test_orchestrator第一条命令在 mgr 中启用该模块使TestOrchestrator实例被加载并开始serve()其内部仅是一个等待shutdown事件的空循环见 module.py。第二条命令把当前集群的编排后端切换为test_orchestrator。orch set backend命令在 orchestrator/module.py 中实现。切换后ceph orch *系列命令orch ls、orch ps、orch host ls、orch device ls等都会将请求转发到TestOrchestrator实例。需要注意若未设置任何后端ceph orch命令会报错No orchestrator configured (try ceph orch set backend)该行为在 test_orchestrator.py 的test_handle_command中有明确测试。因此ceph orch set backend test_orchestrator是让 CLI 链路跑通的必要条件。三、检查编排器状态启用并切换后端后可通过以下命令确认编排器工作正常ceph orch statusceph orch status对应OrchestratorCli._status见 orchestrator/module.py它会调用后端编排器的available()方法。TestOrchestrator.available()恒返回(True, , {})module.py表示始终可用因此该命令应当输出正常的可用状态。这一恒真返回也是刻意为之test_orchestrator 的存在意义就是让上层 CLI 永远可以走通而把关注点放在命令本身的正确性上。四、导入模拟数据核心操作test_orchestrator 最核心的用法是从 JSON 文件加载模拟数据$ ceph test_orchestrator load_data -i ./dummy_data.json该命令在源码中的实现是TestOrchestrator._load_datamodule.py注册名为test_orchestrator load_data权限为w命令通过-iinbuf读取文件内容json.loads(inbuf)解析 JSON失败时返回retval-errno.EINVAL并附带错误信息Invalid JSON file: ...解析成功后调用_init_data(data)将数据填充进模块内部状态。_init_datamodule.py把 JSON 中的三类数据分别反序列化为对应的编排器资源对象JSON 键反序列化目标类对应orch命令inventoryorchestrator.InventoryHostceph orch host ls/ceph orch device lsservicesorchestrator.ServiceDescriptionceph orch lsdaemonsorchestrator.DaemonDescriptionceph orch ps例如导入后执行ceph orch ls会展示 services 中定义的 mds/mgr/nfs/iscsi 服务执行ceph orch ps会展示 daemons 中定义的守护进程ceph orch host ls与ceph orch device ls则分别展示 inventory 中的主机与磁盘设备。五、dummy_data.json 数据格式详解仓库自带的 dummy_data.json 是编写自定义模拟数据的最佳模板。它包含三个顶层键5.1 inventory主机与设备清单每台主机包含name、addr、labels与devices数组典型结构{ name: mgr0, addr: mgr0, labels: [], devices: [ { available: true, human_readable_type: ssd, path: /dev/vdb, rejected_reasons: [], sys_api: { human_readable_size: 10.00 GB, rotational: 0, size: 10737418240, scheduler_mode: mq-deadline, vendor: 0x1af4 } } ] }其中available表示设备是否可用于创建 OSDrejected_reasons记录不可用原因如示例中的locked。示例数据模拟了两台主机mgr0与osd0每台各带 4 块磁盘1 块 SSD 2 块 HDD 可用1 块系统盘被标记为 locked 不可用。5.2 services服务描述每个服务包含service_type、service_name、service_id、placement与status字段{ placement: { hosts: [ {hostname: mgr0, name: , network: }, {hostname: osd0, name: , network: } ] }, service_id: xx, service_name: mds.xx, service_type: mds, status: { container_image_name: quay.io/ceph-ci/ceph:main, created: 2020-04-16T03:39:39.512721, last_refresh: 2020-04-16T06:51:42.412980, running: 2, size: 2 } }示例数据覆盖了mds、mgr、nfs、iscsi四种服务类型其中 iscsi 服务还带有api_user、api_password、pool等附加字段可用于测试不同服务类型的展示差异。5.3 daemons守护进程描述每个守护进程包含daemon_type、daemon_id、hostname、status、status_desc、container_id、version等字段{ container_id: 87d84858109d, daemon_id: xx.mgr0.nkchxn, daemon_type: mds, hostname: mgr0, status: 1, status_desc: running, version: 16.0.0-827-g61ad12e }示例数据覆盖了mds、mgr、nfs、iscsi守护进程daemon 名称采用类型.主机.随机后缀的命名规律如xx.mgr0.nkchxn、iscsi.osd0.abc123。这些字段与orchestrator.DaemonDescription、ServiceDescription、InventoryHost的 JSON 序列化格式一一对应其反序列化与校验逻辑在 orchestrator/_interface.py 的Orchestrator基类配套资源类中定义。六、未加载数据时的回退探测机制如果没有调用load_data导入数据test_orchestrator 会自动回退到对当前主机本地进程与磁盘的探测这也是它能在零配置下直接工作的原因inventory 回退get_inventorymodule.py在内部_inventory为空时会调用ceph-volume inventory --format json收集本机磁盘设备把本机作为名为localhost的主机返回。daemons 回退_get_ceph_daemonsmodule.py通过ps aux解析本机正在运行的 ceph 进程支持mds、osd、mon、rgw、mgr、nfs、iscsi等类型用正则提取 daemon 类型与 daemon ID兼容-i id、--idid、--id id三种写法构建DaemonDescription列表。services 回退describe_servicemodule.py在_services为空时根据回退得到的 daemons 按类型分组统计出各服务及其运行数量。hosts 回退get_hostsmodule.py在无模拟数据时返回[HostSpec(localhost)]。因此即使不导入任何数据ceph orch status、ceph orch ls、ceph orch ps等在开发机vstart 或 teuthology 环境上依然能返回有意义的结果。七、源码中的写操作语义与可测试性设计test_orchestrator 对所有编排写操作均不做真实动作只做参数校验或返回固定成功值这是其作为测试桩test stub的关键设计create_osds/apply_drivegroupsmodule.py仅调用drive_group.validate()并校验 placement 能否匹配主机匹配失败抛OrchestratorValidationError(failed to match)remove_daemons/remove_service/service_action/daemon_action统一返回doneapply_nfs/apply_iscsi/apply_mgr/apply_mon/apply_mds/add_daemon返回spec.one_line_str()即规格的单行摘要add_hostmodule.py内置了可注入异常的测试钩子——当主机名分别取raise_validation_error、raise_error、raise_bug、raise_not_implemented、raise_no_orchestrator、raise_import_error时会依次抛出OrchestratorValidationError、OrchestratorError、ZeroDivisionError、NotImplementedError、NoOrchestrator、ImportError。这使上层 CLI 的异常处理路径可以在不依赖真实后端的情况下被系统性地测试。与之配套orchestrator/tests/test_orchestrator.py 中通过_TestOrchestrator(, 0, 0)直接实例化本模块验证apply对 NFS 服务规格的返回结果test_apply见 test_orchestrator.py以及 inventory/daemon 资源的 JSON 往返序列化一致性test_inventory、test_daemon_description可作为理解其行为与二次开发的参考。八、典型使用流程小结综合以上内容在开发环境中最常用的完整流程为# 1. 启用模块并切换后端 ceph mgr module enable test_orchestrator ceph orch set backend test_orchestrator # 2. 确认编排器状态 ceph orch status # 3. 可选导入自定义模拟数据覆盖默认的本机探测结果 ceph test_orchestrator load_data -i ./dummy_data.json # 4. 使用 ceph orch 系列命令查看模拟的服务/守护进程/主机/设备 ceph orch ls ceph orch ps ceph orch host ls ceph orch device ls九、适用场景与限制test_orchestrator 适用于以下场景CI/集成测试在 teuthology 等测试框架中用固定的模拟数据验证ceph orch命令输出格式与 CLI 解析逻辑保证测试可复现mgr 模块开发开发与编排器交互的 mgr 功能如 dashboard、prometheus 模块时用 test_orchestrator 充当稳定的数据源CLI 行为验证验证orch set backend、orch status等控制面命令在无真实后端时的行为与错误处理。其限制同样明显它不执行任何真实的部署、调度或管理动作无法用于验证容器部署、网络配置、OSD 创建等真实编排能力此类验证必须使用 cephadm 或 Rook 等真实后端。此外未导入数据时的回退探测仅反映本机进程与磁盘不代表集群真实拓扑。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph Orchestrator CLI 完全指南用 ceph orch 统一管理 Rook 与 Cephadm 编排器Ceph Orchestrator CLI 完全指南用 ceph orch 统一管理 Rook 与 Cephadm 编排器 本指南基于 Ceph 仓库中的官方存储分布式文件系统对象存储后端高可用Ceph mgr rook 编排器模块在 Kubernetes 中借助 Rook 统一管理 Ceph 集群Ceph mgr rook 编排器模块在 Kubernetes 中借助 Rook 统一管理 Ceph 集群 本指南讲解 Ceph 的 rook mgr 模块存储分布式文件系统对象存储后端高可用Ceph MGR RGW 模块实战指南用 ceph rgw realm/zone 命令一键编排多站点部署Ceph MGR RGW 模块实战指南用 ceph rgw realm/zone 命令一键编排多站点部署 导读 本文围绕 Ceph Manager 守护进程内存储分布式文件系统对象存储后端高可用上一篇gdsdecompGodot游戏逆向工程的终极解决方案下一篇UnityExplorer自由视角相机实用指南突破游戏视角限制的高效方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

南航双中台实践:业务中台与数据中台如何驱动数字化转型

南航双中台实践:业务中台与数据中台如何驱动数字化转型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 15:45:10
ESP8266、ESP32、ESP8266-12F 到底怎么选?一文讲透模组选型

ESP8266、ESP32、ESP8266-12F 到底怎么选?一文讲透模组选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 15:45:10
PCB电流采样电阻布局:三种开尔文接法实现0.1%精度

PCB电流采样电阻布局:三种开尔文接法实现0.1%精度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 15:45:10
MORE NEWS

更多资讯

📰

Apache Thrift 的 Common Lisp 客户端/服务端开发完全指南:从 IDL 翻译到 RPC 实战

Apache Thrift 的 Common Lisp 客户端/服务端开发完全指南:从 IDL 翻译到 RPC 实战 【免费下载链接】thrift Apache Thrift 项目地址: https://gitcode.com/gh_mirrors/thrift2/thrift 导读 本文基于 Apache Thrift 仓库中 lib/cl/README.md 官方文档&#…

📰

Genex词法分析器深度解析:状态机如何精准切分复杂规则文本

Genex词法分析器深度解析:状态机如何精准切分复杂规则文本 【免费下载链接】genex-cj 生成表达式(Generate Expression,简称:Genex或GE)是一款用于按照指定语法规则随机或固定生成数据的功能库。主要适用于依赖规则数据…

📰

PaddleHub 语言模型(Language Model)模块实战指南:词嵌入、语义匹配与预训练语义模型全解析

人工智能大模型微调模型推理服务 【免费下载链接】PaddleFormers PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers 点击查看 免费下载 本指…

📰

openFrameworks 图像抠色实战:用像素级遍历实现蓝幕(Chroma Key)算法

图形学音视频 【免费下载链接】openFrameworks openFrameworks is a community-developed cross platform toolkit for creative coding in C. 项目地址: https://gitcode.com/gh_mirrors/op/openFrameworks 点击查看 免费下载 导读 本篇技术指南以 openFramework…

📰

tchMaterial-parser:一键批量下载电子课本PDF

tchMaterial-parser:一键批量下载电子课本PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: https:…

📰

输入的“字符串”实际上是一个由 ASCII 字符组成的十六进制字符串,且 LabVIEW 在这里使用了小端字节序(Little-Endian)转换或者按字节/半字反转的逻辑

一、 关键解析逻辑纠正 输入的“字符串”实际上是一个由 ASCII 字符组成的十六进制字符串,且 LabVIEW 在这里使用了小端字节序(Little-Endian)转换或者按字节/半字反转的逻辑: **14 偏移量,长度 2**: 截取到 ASCII 字符串 "6345"。 字节反转(由于每 2 个字符…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬