禁用 Undercloud 中的 Swift¶
本提案的目标是向社区介绍禁用 TripleO Undercloud 中的 Swift 的想法。 在此提案中,我们打算提供一个关于如何实现此目标的概述。
问题描述¶
Swift 用于存储与部署相关的对象,这些对象完全在 Undercloud 上管理。 过去,有一个 API / UI 用于与部署工具交互; 但是,随着 UI 的弃用和 Mistral 的移除,情况不再如此。 Undercloud 被假定为一个单节点,用于部署 OpenStack 云,并且需要用户登录到该节点才能运行命令。 由于我们不再尝试将 Undercloud 成为分布式系统,因此不需要可 API 访问的分布式存储服务。 Swift 在其当前状态下,利用率不足,并带来不必要的运营和资源开销。
提议的变更¶
概述¶
从 Undercloud 中移除 Swift。
为了移除 Swift,我们将首先删除所有 tripleoclient Swift 交互。 这些交互主要涉及存储和检索 YAML 文件,这些文件为用户提供当前部署状态的上下文。 为了确保我们不会破坏部署期望,我们将所有内容推送到本地文件系统,并在尽可能的情况下保留所有文件属性。 我们需要与 tripleo-ansible 协调,以确保所有直接的 Swift 客户端和模块交互都是可选的。
一旦我们能够删除 tripleoclient Swift 交互,我们将移动到禁用 tripleo-common 中的 Swift 交互。 这些交互与在 tripleoclient 中找到的交互类似,但 tripleo-common 具有一定的复杂性; 我们需要确保我们不会破坏我们使用 puppet 部署方法创建的期望,这些方法有一些 Swift 假设。
替代方案¶
保持一切不变。
安全影响¶
禁用 Swift 不应带来显著的安全隐患。 可以认为禁用 Swift 可能会使部署更安全,它会减少攻击面; 但是,考虑到 Undercloud 上的 Swift 仅由 director 使用,我认为任何好处都微不足道。
升级影响¶
不会有升级影响; 此更改对最终用户来说是透明的。
其他最终用户影响¶
无。
性能影响¶
禁用 Swift 可能会使某些客户端交互更快; 但是,收益应该可以忽略不计。 也就是说,禁用 Swift 将移除 Undercloud 上的一个服务,这将使设置更快并减少运行 Undercloud 所需的资源。
其他部署者影响¶
在运营方面,我们应该看到改进,因为它不再需要探索 Swift 容器,并下载文件来调试部署的不同部分。 存储在 Swift 中的所有与部署相关的归档文件都将存在于 Undercloud 上,使用本地文件系统,并且应该易于交互。
开发人员影响¶
没有,如果有的话,禁用 Swift 应该使 TripleO 开发人员的生活更轻松。
实现¶
删除 Swift 客户端交互将直接以尽可能少的评审次数处理; 希望能够将此更改回溯到稳定版本,如果认为它有价值的话。
所有存储在 Swift 中的对象都将存储在 /var/lib/tripleo/{named_artifact_directories} 中。 这将允许我们在各种库中实现所有相同的核心逻辑,而无需使用 API 调用来存储对象。
在使我们能够消除 swift 而不会对内部 API 产生重大影响方面,我们将首先尝试用本地文件系统调用替换 tripleo-common 中的 swift 对象函数。 通过使用现有函数并替换后端,我们将确保 API 兼容性并减少创建回归的可能性。
注意
我们需要与各个团队合作,以确保我们正确地移植了假定的功能。 虽然本规范不会深入探讨移植假定功能的具体实施细节,但我们应该对确保现有功能被适当地移植负责。
负责人¶
- 主要负责人
cloudnull
其他贡献者
emilien
ekultails
工作项¶
此处列出的工作项目是高级别的,不打算提供具体的实施细节或时间表。
枚举所有 Swift 交互
在 Undercloud 上创建一个用于存放文件的空间
此位置将在本地文件系统上,并将创建为 git 归档; git 用于更轻松的调试、快速回滚以及提供简单的版本控制。
创建一个禁用 Undercloud 上 Swift 的选项。
将客户端交互转换为使用本地文件系统
确保所有 tripleo-ansible Swift 客户端调用都是可选的
将 tripleo-common Swift 交互转换为使用本地文件系统
禁用 Undercloud 上的 Swift
依赖项¶
在 Undercloud 上禁用 Swift 之前,我们需要确保部署方法已更改为 Metalsmith。
测试¶
Swift 测试需要更新为使用本地文件系统,但是将重用现有的测试和测试结构。
文档影响¶
我们的文档中有几个关于 Swift 的引用,我们需要更新这些引用。