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 的上下文中)将在滚动升级过程文档中记录。