支持集群实例的 NTP 服务¶
https://blueprints.launchpad.net/sahara/+spec/support-ntp
Sahara 可以支持集群实例的 NTP(网络时间协议)。NTP 的目的是同步所有集群实例上的时间。它对 Cloudera、HDP 集群上的多个服务很有用(请参阅 [1])。
问题描述¶
由于 HDP 和 Cloudera 集群需要,Sahara 应该支持在集群实例上配置 NTP。
提议的变更¶
首先,建议通过 sahara-image-elements 在所有镜像上预安装 ntp 守护进程。对于干净的镜像,将完全不配置 ntp。 同样,也可以防止在长期运行的集群的实例上安装 ntp。
作为第二步,我们应该在 cluster configs 的 general 部分中添加一个新的通用字符串配置选项到 sahara,该选项将允许为当前集群指定自己的 NTP 服务器。此配置选项可以在所有插件中支持,并允许使用指定的 NTP 服务器在所有集群实例上安装 NTP。作为选项,我们可以至少为 fake 插件允许禁用 NTP。因此,根据插件选项,我们将拥有
NTP_ENABLED:默认值为 True,此选项需要允许在集群实例上禁用 ntpNTP_URL:默认值为一个空字符串。因此,如果用户输入此选项为空字符串,我们将使用sahara.conf中的默认 ntp 服务器。否则,将使用用户输入。
作为第三步,我们应该为 sahara.conf 提供新的配置,以便指定当前 sahara 安装上的默认 NTP 服务器。这很有用,因为不同地区的默认 NTP 服务器可能不同。它还允许使用专门为当前实验室和当前 sahara 安装安装的 NTP 服务器。
第二步需要为所有插件提供通用选项,以避免所有插件的代码重复。所有选项都可以添加到 plugins/provisioning.py 中。
替代方案¶
我们可以将 ntp_url 和 ntp_enabled 存储为集群列,这看起来像一个漫长的合并过程:sahara 侧代码 -> python-saharaclient -> (漫长的故事) horizon 支持。
数据模型影响¶
我们不需要额外的迁移,我们将把有关 NTP 服务器的信息存储在 cluster configs 的 general 部分中。
将 NTP 服务器存储在数据库中的单独列中实际上没有用处,因为我们可以将此信息存储在集群配置中。
REST API 影响¶
无
其他最终用户影响¶
用户将能够为当前集群和当前 sahara 安装指定自己的 NTP 服务器。
部署者影响¶
无
开发者影响¶
无
Sahara-image-elements impact¶
需要在所有镜像上预安装 NTP。
Sahara-dashboard / Horizon 影响¶
由于 Sahara 已经能够暴露集群模板创建期间的所有常规配置选项,因此我们不需要在 Horizon 侧进行额外的修改。
实现¶
负责人¶
- 主要负责人
vgridnev
- 其他贡献者
sreshetniak
工作项¶
提议的更改将包含以下步骤
在
sahara-image-elements中安装镜像上的 NTP。添加在集群实例上安装 NTP 的能力,并添加所需的配置选项。
添加功能的文档。
依赖项¶
取决于 Openstack 的要求
测试¶
该功能也将包含集成测试。
文档影响¶
需要记录该功能和所有将用于 NTP 配置的配置选项。