Ironic 执行 `clean` 操作时的详细流程

116 阅读2分钟

OpenStack Ironic 的 clean 操作是一个复杂的过程,它用于在节点从一个工作负载转移到另一个工作负载时,确保节点处于干净、一致的状态。以下是 Ironic 在执行 clean 操作时的详细流程:

1. 状态变迁

  • manageable 状态开始:节点必须处于 manageable 状态才能开始手动清理。
  • 进入 cleaning 状态:当调用 clean API 时,节点的状态会从 manageable 转变为 cleaning

2. 清理步骤的获取

  • 自动清理:如果启用了自动清理(automated_clean),Ironic 会从节点的驱动程序中收集清理步骤,这些步骤来自 Power、Deploy、Management、BIOS 和 RAID 接口。
  • 手动清理:如果手动指定清理步骤,则需要通过 API 或 CLI 提供一个有序的清理步骤列表。

3. 清理步骤的执行

  • 清理步骤的排序:清理步骤按优先级排序,数字越大优先级越高。
  • 执行清理步骤:Ironic 会依次执行这些清理步骤。如果某个步骤失败,节点将进入 clean failed 状态。

4. 清理步骤示例

  • 擦除设备元数据erase_devices_metadata 是一个常见的清理步骤,用于擦除磁盘上的元数据。
  • 擦除设备erase_devices 步骤用于擦除整个磁盘。

5. 清理网络

  • 清理网络的配置:如果使用 Neutron DHCP 提供者(默认设置),需要配置一个清理网络,该网络用于启动清理时的 ramdisk。

6. 手动清理与自动清理

  • 手动清理:通过 CLI 或 API 指定清理步骤来执行手动清理。
  • 自动清理:自动清理会在节点从 activeavailable 或从 manageableavailable 时自动触发。

7. 清理步骤的优先级和跳过

  • 优先级设置:可以通过 conductor.clean_step_priority_override 配置选项来设置清理步骤的优先级。
  • 跳过清理步骤:将清理步骤的优先级设置为 0 或 None 可以跳过该步骤。

8. 节点状态的最终变迁

  • 清理完成:清理完成后,节点的状态会从 cleaning 转变为 available
  • 清理失败:如果清理过程中出现错误,节点会进入 clean failed 状态。

示例命令

以下是一个通过 CLI 执行手动清理的示例命令:

openstack baremetal node clean <node> --clean-steps '[{"interface": "deploy", "step": "erase_devices_metadata"}]'

通过以上步骤,Ironic 能够确保节点在重新分配给新的工作负载之前处于干净、一致的状态。