支持集群实例的 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 configsgeneral 部分中添加一个新的通用字符串配置选项到 sahara,该选项将允许为当前集群指定自己的 NTP 服务器。此配置选项可以在所有插件中支持,并允许使用指定的 NTP 服务器在所有集群实例上安装 NTP。作为选项,我们可以至少为 fake 插件允许禁用 NTP。因此,根据插件选项,我们将拥有

  1. NTP_ENABLED:默认值为 True,此选项需要允许在集群实例上禁用 ntp

  2. NTP_URL:默认值为一个空字符串。因此,如果用户输入此选项为空字符串,我们将使用 sahara.conf 中的默认 ntp 服务器。否则,将使用用户输入。

作为第三步,我们应该为 sahara.conf 提供新的配置,以便指定当前 sahara 安装上的默认 NTP 服务器。这很有用,因为不同地区的默认 NTP 服务器可能不同。它还允许使用专门为当前实验室和当前 sahara 安装安装的 NTP 服务器。

第二步需要为所有插件提供通用选项,以避免所有插件的代码重复。所有选项都可以添加到 plugins/provisioning.py 中。

替代方案

我们可以将 ntp_urlntp_enabled 存储为集群列,这看起来像一个漫长的合并过程:sahara 侧代码 -> python-saharaclient -> (漫长的故事) horizon 支持。

数据模型影响

我们不需要额外的迁移,我们将把有关 NTP 服务器的信息存储在 cluster configsgeneral 部分中。

将 NTP 服务器存储在数据库中的单独列中实际上没有用处,因为我们可以将此信息存储在集群配置中。

REST API 影响

其他最终用户影响

用户将能够为当前集群和当前 sahara 安装指定自己的 NTP 服务器。

部署者影响

开发者影响

Sahara-image-elements impact

需要在所有镜像上预安装 NTP。

Sahara-dashboard / Horizon 影响

由于 Sahara 已经能够暴露集群模板创建期间的所有常规配置选项,因此我们不需要在 Horizon 侧进行额外的修改。

实现

负责人

主要负责人

vgridnev

其他贡献者

sreshetniak

工作项

提议的更改将包含以下步骤

  1. sahara-image-elements 中安装镜像上的 NTP。

  2. 添加在集群实例上安装 NTP 的能力,并添加所需的配置选项。

  3. 添加功能的文档。

依赖项

取决于 Openstack 的要求

测试

该功能也将包含集成测试。

文档影响

需要记录该功能和所有将用于 NTP 配置的配置选项。

参考资料

[1] http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/install_cdh_enable_ntp.html