TripleO Ceph 客户端

https://blueprints.launchpad.net/tripleo/+spec/tripleo-ceph-client

用于 TripleO 集成 Ceph 集群的本地 Ansible 角色。

问题描述

从 Octopus 版本开始,Ceph 拥有自己的 day1 工具 cephadm [1] 和自己的 day2 工具 orchestrator [2],它们将取代 ceph-ansible [3]。虽然 ceph-ansible 具有配置 Ceph 客户端所需的功能,例如将配置文件和密钥环分发到非 Ceph 集群成员的节点,但 cephadm 和 orchestrator 都不会管理 Ceph 客户端配置。

目标是在 TripleO 中创建一些新的 Ansible 角色,以执行 Ceph 客户端(Nova、Cinder、Glance、Manila)配置,这在 TripleO 中尤其重要,以支持 Ceph 集群由外部管理、不由 undercloud 控制的部署场景,但 OpenStack 服务的配置仍然是 TripleO 的责任。

提议的变更

概述

在 tripleo-ansible 中引入一个新的角色,用于 Ceph 客户端配置。

新角色将

  • 将 OpenStack 服务配置为外部 Ceph 集群的客户端(在共置的情况下,Ceph 集群在逻辑上仍然是外部的)

  • 为 RBD 和 CephFS 的 OpenStack 客户端(Nova、Cinder、Glance、Manila)提供 Ceph 配置文件和 cephx 密钥

  • 完全支持多客户端,例如,一个 OpenStack 部署可以使用多个 Ceph 集群,例如多后端 Glance

  • 快速配置客户端,例如,在一个地方生成密钥并有效地复制它

  • 这是一个独立的角色,可用于配置 OpenStack 以连接到由外部管理的 Ceph 集群

  • 不破坏现有的 CephExternalMultiConfig 支持,该支持用于在 DCN 环境(在 DCN 站点上部署仪表板不在本次提案的范围内)中配置 OpenStack 以使用多个 Ceph 集群。

替代方案

未来版本的 cephadm 可能会添加客户端配置支持,但即使今天可用,也有一些原因说明我们无法按原样使用此功能

  • 它假定 cephadm 工具已配置为具有外部 Ceph 集群的管理员权限,而当我们不管理 Ceph 时,我们没有此权限;

  • 它还假定每个客户端节点都已配置到外部 Ceph orchestrator 目录中,以便每个 Ceph MON 都可以通过 SSH 登录到客户端节点(overcloud 节点);

  • 虽然它提供了复制配置文件和 cephx 密钥环到远程客户端节点的必要功能,但它无法配置例如 Nova 的 libvirtd secret 用于 qemu-kvm,这仅在客户端是 OpenStack 时才相关的任务;

安全影响

没有直接源自创建新 Ansible 角色的决定。但是,密钥环本身的分配应使用 TripleO 服务实现,例如现有的 CephClient 服务,以便密钥环仅部署到实际需要它们的节点。

升级影响

目标是保留并重用当前用于驱动 ceph-ansible 的任何现有 Heat 参数;从操作员的角度来看,配置 Ceph 客户端的问题没有改变,不应该需要更改现有的参数,只是实现方式会改变。

性能影响

Proposed Change 部分所述,此角色的目的是正确配置客户端,并允许 OpenStack 服务连接到内部或外部 Ceph 集群,以及 DCN 环境中的多个 Ceph 集群。由于许多 OpenStack 服务(Nova、Cinder、Glance、Manila)都需要配置文件和密钥才能与 Ceph 集群正确交互,因此至少应执行两个操作

  • 在一个地方生成密钥

  • 有效地复制生成的密钥

ceph_client 角色应该非常小,并且在性能方面可以首先通过在中心位置创建密钥来改进。然后,生成的密钥只需要分发到 Ceph 集群的节点以及 Ceph 集群配置文件。将此角色添加到 tripleo-ansible 可以避免从纯部署的角度来看添加额外的调用;事实上,不会触发额外的 Ansible playbook,并且我们预计性能会得到改善,因为这里没有涉及额外的层。

开发人员影响

Ceph 的部署方式可能会改变任何维护 TripleO 代码以供使用 Ceph 的 OpenStack 服务的人员。理论上,不应该有任何变化,因为 CephClient 服务仍然会在相同的位置配置 Ceph 配置和 Ceph 密钥文件。这些开发人员只需要在模板稳定时切换到新的模板。

实现

新角色应由 TripleO 服务启用,就像 CephClient 服务今天一样。根据部署时选择的环境文件,此类服务的实际实现可以基于 ceph-ansible 或新角色。

当 Ceph 集群不是外部的,该角色还会创建池和 cephx 密钥环到 Ceph 集群中;这些步骤将在 Ceph 是外部时跳过,正是因为我们没有更改集群配置的管理员权限。

TripleO Heat 模板

依赖 ceph-ansible 的现有实现将保留在树中至少一个弃用周期。通过重用现有的 Heat 输入参数,我们应该能够仅通过切换部署时使用的环境文件,以透明的方式使用 ceph-ansible 或新角色来完成客户端配置。当前使用 environments/ceph-ansible/ceph-ansible-external.yaml 的 TripleO 用户,以便他们的 Overcloud 使用现有的 Ceph 集群,应该能够将相同的模板应用于新的模板来配置 Ceph 客户端,例如 environments/ceph-client.yaml。这将导致新的 tripleo-ansible/roles/ceph_client 角色被执行。

负责人

  • fmount

  • fultonj

  • gfidente

  • jmolmo

工作项

建议的时间表

  • OpenStack W: 将 tripleo-ansible/roles/ceph_client 作为实验性启动,然后在 001/004 场景中将其设置为默认值。我们预计它将在 W 周期内变得稳定。

依赖项

ceph_client 角色将添加到 tripleo-ansible 中,并允许配置 OpenStack 服务作为外部或 TripleO 管理的 Ceph 集群的客户端;tripleo-ansible 项目没有添加新的依赖项。ceph_client 角色将与 External Ceph、由 ceph-ansible 部署的 Internal Ceph 以及 [4] 中描述的 Ceph 部署一起工作。

测试

应该能够重新配置现有的已经使用 Ceph 部署的 CI 场景之一,以使用新的 ceph_client 角色,使其在代码稳定之前不进行投票。然后将另一个现有的 CI 场景切换到它。

文档影响

不需要文档更改。

参考资料