ironic 服务上的 SIGHUP

https://bugs.launchpad.net/ironic/+bug/1585595

守护进程通常使用 SIGHUP 信号来通过重新加载配置文件来重新配置服务器(如 Wikipedia 中所述)。本规范描述了将此功能添加到 ironic-conductor 和 ironic-api 服务中。

问题描述

向 ironic(ironic-api 和 ironic-conductor)服务发送 SIGHUP 信号(例如,通过 kill -s 1 <process-id>)将导致服务重启。

守护进程通常使用 SIGHUP 信号来通过重新加载配置文件来重新配置服务器(如 Wikipedia 中所述)。本规范描述了 ironic 将如何支持 SIGHUP,以便在运行时可以重新加载选定的配置选项。

例如,这在 滚动升级 期间很有用。在取消固定(重置 pin_release_version 配置选项)之后,可以使用 SIGHUP 来使用更新后的选项值重启服务。

另一个例子是,操作员可以更轻松地启用或禁用调试日志记录,而无需停止和(重新)启动服务。

请注意,SIGHUP 不受 Windows 支持。

提议的变更

我们将利用这些库中的代码

  • oslo.service 库为服务提供处理此信号的支持。我们将更改 ironic 服务,以便它们使用 restart_method='mutate' 启动。当库代码处理 SIGHUP 信号时,它会获取可变配置选项的任何更改。

  • oslo.config 库 添加了对 mutable 配置选项的支持。只有可变配置选项才能重新加载。在 ironic.conf.sample 文件中,mutable 选项的描述中添加了一个 mutable 选项说明(“注意:此选项可以在不重启的情况下更改。”)。它会记录任何更改的可变配置选项。它还会记录任何更改的不可变选项的警告。

有了这些更改,当发生 SIGHUP 时,服务将使用可变选项的值重新加载。对于对不可变选项的更改,将记录警告。

可变配置选项

可用的可变配置选项是

  • 来自其他库的选项。到目前为止,ironic 服务使用的唯一可变选项来自 oslo.log 库

    • [DEFAULT]/debug

    • [DEFAULT]/log_config_append

  • [DEFAULT]/pin_release_version

其他 ironic 配置选项可以在 未来变为可变;此类更改应具有相应的发行说明。我们的信念是,大部分(如果不是全部)配置选项都应该变为可变。但是,这超出了本规范的范围——本规范的目的是为使其成为可能奠定基础,并使用少量选项。在提及 ironic 支持 SIGHUP 时,操作员可能会(错误地)认为这适用于所有配置选项,因此我们应该及时提供其他配置选项。

可变配置选项的值不应被缓存;或者至少,如果被缓存,则必须在发生 SIGHUP 时更新该值。

备选方案

更改所需的配置选项值,停止服务,然后重新启动它。

数据模型影响

无。

状态机影响

无。

REST API 影响

无。

客户端 (CLI) 影响

无。

“ironic” CLI

无。

“openstack baremetal” CLI

无。

RPC API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

Ramdisk 影响

无。

安全影响

无。

其他最终用户影响

操作员将能够更改某些配置选项并发出 SIGHUP,以使用更改后的选项值重启 ironic 服务。

可扩展性影响

无。

性能影响

无。

其他部署者影响

这可用于滚动升级等。

开发人员影响

无。

实现

负责人

主要负责人:rloo (Ruby Loo)

工作项

  • 更改我们的服务,以便它们使用 restart_method='mutate' 启动

  • 更改所需的配置选项,使其变为可变

  • 确保可变选项不被缓存,或者如果被缓存,则确保在发生 SIGHUP 时适当地更新它们

依赖项

无。

测试

如果在例如 multinode grenade 测试中停止并重启服务,我们可以更改它并发出 SIGHUP。

升级和向后兼容性

更改可变配置选项的值现在将在发出 SIGHUP 时生效。我们需要这来支持滚动升级。

文档影响

SIGHUP 的使用(在 [DEFAULT]/pin_release_version 的上下文中)将在滚动升级过程文档中记录。

参考资料