支持节点历史¶
https://storyboard.openstack.org/#!/story/2002980
本规范提出为节点增加历史记录支持,这对于识别问题非常有用。
问题描述¶
目前 ironic 使用一个 last_error 字段来记录操作失败时的错误信息,该字段很容易被覆盖。为了追溯根本原因,我们必须在云中的某个地方搜索 conductor 主机上的日志。为了使裸机管理更轻松,拥有一个历史记录会很有帮助,特别是节点的错误和状态转换。
该提案是引入一个新的表来存储这些事件,并提供 API 支持来检索它们。
提议的变更¶
引入名为 node_history 的新表和一个 db 对象 NodeHistory,有关模式定义,请参见 数据模型影响。
实现 API 层以支持节点历史记录查询。节点历史记录应该只允许查询。
在此提案中只会记录两种类型的事件
状态转换
所有内容都将进入 last_error,这也涵盖节点维护状态更改。
根据未来需求可以扩展范围,但不在本规范中包含。
引入一个周期性任务来删除超出指定最大数量的节点历史记录条目,该数量将由配置选项进行配置。
添加一个 history 模块来提供历史记录接口抽象,并提供 none 和 database 两种实现。
备选方案¶
还存在其他解决方案,例如使用 LOG 收集器和聚合器,但它们需要更多的集成,并且不直接由 ironic 支持。
数据模型影响¶
将添加一个具有以下模式的新数据库表
op.create_table('node_history',
sa.Column('created_at', sa.DateTime(), nullable=True),
sa.Column('updated_at', sa.DateTime(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('uuid', sa.String(length=36), nullable=False),
sa.Column('conductor', sa.String(length=255), nullable=True),
sa.Column('event', sa.Text(), nullable=True),
sa.Column('node_id', sa.Integer(), nullable=True),
sa.Column('user'), sa.String(length=32), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('uuid', name='uniq_history0uuid'),
sa.ForeignKeyConstraint(['node_id'], ['nodes.id'], ),
mysql_ENGINE='InnoDB',
mysql_DEFAULT_CHARSET='UTF8')
sa.Index('node_id', 'node_id')
event 是一个字符串,传达了节点上发生的事情,内容将被截断为 1000 个字符。
conductor 是记录条目的 conductor 的主机名。
user 是来自上下文的操作请求者,对于 Identify 服务,它是一个固定长度的字符串。
状态机影响¶
无
REST API 影响¶
将添加以下端点以支持查询节点历史记录,并进行微版本控制。使用早期微版本的客户端将收到 404 错误。
GET /v1/{node_ident}/history
检索为此节点记录的所有事件的列表。默认情况下,返回
uuid、event和created_at。event将被截断为 255 个字符,以提供简要信息。如果查询字符串中将detail设置为 True,则将返回详细的历史记录条目。对于正常请求,返回 200。
GET /v1/{node_ident}/history/{history_uuid}
获取事件的详细信息。
对于正常请求,返回 200。
客户端 (CLI) 影响¶
“openstack baremetal” CLI¶
OSC 将被增强以支持以下操作
openstack baremetal node history list:列出此节点保存的所有事件openstack baremetal node history show <uuid>:显示特定的节点事件
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
无
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
节点事件可能会占用数据库中相当大的数据量,具体取决于裸机规模和活动。在这种情况下,应评估此功能的配置选项。
性能影响¶
新的周期性任务和数据库访问将使用一些资源,但应该微不足道。
其他部署者影响¶
添加以下配置选项以更改此功能的行为
[conductor]node_history_backend:可以是none和database。none什么也不做,有效地禁用此功能,这是默认值。[conductor]node_history_max_entries:ironic 应该保留多少个事件。达到最大条目数时,将删除最旧的事件。默认值为 300,最小值是 1。[conductor]node_history_cleanup_interval:清理周期性任务应该安排的间隔(以秒为单位)。默认情况下为一天。设置为 0 将禁用周期性清理。[conductor]node_history_cleanup_batch_num:一次清理操作中将删除的最大条目数。
开发人员影响¶
一旦本规范实施,可以添加其他事件。
实现¶
负责人¶
- 主要负责人
<kaifeng, kaifeng.w@gmail.com>
- 其他贡献者
<None>
工作项¶
实施建议的工作
数据库支持
历史模块和两种后端,即 none 和 database
在适当的代码路径上记录历史记录
API 支持
CLI 支持
文档
依赖项¶
无
测试¶
该功能将通过单元测试覆盖。
升级和向后兼容性¶
默认情况下禁用此功能。
文档影响¶
将更新文档。
参考资料¶
无