Nautilus 中的新功能:Orchestrator

swagner

Ceph Nautilus 引入了一个新的 orchestrator 接口,该接口能够控制外部部署工具,例如 ceph-ansibleDeepSeaRook。其愿景是提供管理员、Ceph 和外部部署系统之间的桥梁。为了实现这一目标,orchestrator 接口使 Ceph 控制面板或 `ceph` 命令行工具能够访问不同部署工具提供的数据,从而能够在 Ceph 控制面板中启用基础设施管理功能。作为副作用,它将为不同的部署工具带来统一的安装体验。

请查看此小演示,展示 Rook orchestrator 部署 Ceph 服务

启用后,控制面板已经开始使用 orchestrator 接口来管理 iSCSI 目标和 NFS 共享。

从架构角度来看,orchestrator 接口是位于客户端(如控制面板和命令行界面)和 orchestrator 模块(如 Rook mgr 模块)之间的核心组件。例如,如果用户调用命令行界面来向集群添加新的 OSD,orchestrator 模块将指示外部 orchestrator 在给定主机上调用 ceph-volume。以下是 orchestrator 的架构视图,显示了不同组件如何相互交互

使用 Orchestrator

为了使用 orchestrator 接口,Ceph 集群需要使用受支持的 orchestrator 部署。要开始使用 orchestrator,只需要一个 mon 和一个 mgr 即可。

下一步是激活后端 orchestrator 模块

ceph mgr module enableceph orchestrator set backend

其中 `module` 是 `ansible`、`deepsea`、`rook` 或 `ssh`。

之后,orchestrator 模块本身需要正确配置。请参阅下面每个模块的详细信息。另请注意,orchestrator 模块可能仅实现以下命令的子集,并且命令的实现取决于 orchestrator 模块,并且在不同实现之间会有所不同。

然后,您可以使用 status 命令检查后端是否已正确配置,该命令显示当前的 orchestrator 模式和高级状态。

ceph orchestrator status

另一个有趣的命令是 `device ls`,它会打印一个发现的设备列表,按节点分组,并可选地过滤到特定节点

ceph orchestrator device ls

请参阅 官方文档,了解 orchestrator 命令行界面的更多示例。

Rook Orchestrator 模块

Rook 是一个开源的云原生存储编排器,用于 Kubernetes。Rook 遵循“operator”模型,其中在 Kubernetes 中定义一个 Custom Resource Definition (CRD) 对象来描述 Ceph 集群及其期望状态,并且正在运行一个 rook operator 守护程序,该守护程序在一个控制循环中比较当前集群状态与期望状态,并采取步骤使其收敛。描述 Ceph 期望状态的主要对象是 CephCluster CRD,它(除其他外)包括有关应由 OSD 消耗哪些设备、应运行多少个监视器以及应使用哪个版本的 Ceph 的信息。Rook 定义了其他几个 CRD 来描述 RBD 池、CephFS 文件系统等。

rook orchestrator 模块 是在 ceph-mgr 守护程序中运行的胶水,它通过修改 Kubernetes 中描述期望集群状态的 CephCluster(以及相关)对象来实现 Ceph 编排 API。由于 Rook 集群的 ceph-mgr 守护程序作为 Kubernetes pod 运行,rook 模块无需任何显式配置即可连接到 Kubernetes API。

例如,如果用户请求通过 CLI 创建新的 OSD,orchestrator 模块将通过调整 Rook 的 CephCluster CRD 对象来响应,以指定给定的设备包含 OSD,Rook 将通过调用适当的 ceph-volume 并启动 Kubernetes pod 来响应 ceph-osd 守护程序。

ceph orchestrator osd create ....

SSH Orchestrator 模块

SSH orchestrator 是一个 orchestrator 模块,它不依赖于单独的编排/部署系统,例如 Rook 或 Ansible,而是通过建立 SSH 连接并发出显式管理命令来管理集群中的节点。

该模块旨在成为旧的 ceph-deploy 工具的道德等价物(事实上,它使用相同的 remoto 库通过 SSH 连接在远程机器上执行代码),但侧重于二天操作。SSH orchestrator 将是安装 Ceph 集群而无需利用 Ansible 等部署框架的标准方法。

其想法是向管理器守护程序提供能够连接到集群中所有节点的 ssh 配置和密钥,以便执行任何管理操作,例如创建存储设备清单、部署和更换 OSD 或启动和停止 Ceph 守护程序。

此外,ssh orchestrator 将部署由 systemd 管理的容器镜像,以便允许独立升级共置服务。

这个 orchestrator 也很可能突出显示一个工具,该工具封装了所有必要的操作来管理当前主机上的基于容器镜像的服务部署,包括引导运行 MON 和 MGR 的最小集群的命令。

Ansible Orchestrator 模块

Ansible orchestrator 模块使用 ansible runner services 来执行 Ansible playbook,以满足支持的不同操作。当调用 orchestration API 时,ansible 模块将在 ansible runner 服务上排队一个任务,然后 ansible runner 服务将执行 ansible playbook 以完成工作。

DeepSea Orchestrator 模块

DeepSea 是一个 Salt 状态文件、runner 和模块的集合,用于部署和管理 Ceph。

该模块连接到 Salt REST API 以与 Salt master 通信。然后,它可以查询集群状态或发出命令。

现有集成

控制面板和 Rook 之间已经存在集成。请查看 Jeff Layton 的先前博客文章 使用 Rook 配置 NFS

未来

目前,orchestrator 专注于初始安装后的二天集群操作。在未来的版本中,计划添加对一天安装和设置操作的支持。

其次,libstoragemgmt 支持启用指定磁盘的识别和故障 LED。目前正在努力在 orchestrator 接口中支持这些功能。(指针?)

最后,控制面板集成方面的增强功能可能包括显示物理清单和部署服务等功能。