OpenStack Ironic 的 clean 操作是一个复杂的过程,它用于在节点从一个工作负载转移到另一个工作负载时,确保节点处于干净、一致的状态。以下是 Ironic 在执行 clean 操作时的详细流程:
1. 状态变迁
- 从
manageable状态开始:节点必须处于manageable状态才能开始手动清理。 - 进入
cleaning状态:当调用cleanAPI 时,节点的状态会从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 指定清理步骤来执行手动清理。
- 自动清理:自动清理会在节点从
active到available或从manageable到available时自动触发。
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 能够确保节点在重新分配给新的工作负载之前处于干净、一致的状态。