Node servicing

概述

为了更好地使操作员能够修改现有节点,Ironic 引入了节点服务模型,您可以使用类似于部署步骤或通过 Cleaning 子系统进行手动清理的步骤,将处于 active 状态的节点进行操作。

有关清理的更多信息,请参阅 节点清理

主要区别

服务步骤不包含自动执行模型,这是标准部署和“自动化”清理工作流程固有的。这可能会在未来的某个时候发生变化。

这也意味着,虽然可以提供优先级值,但目前未使用它。

与清理和部署的相似之处

与 Clean 和 Deploy 步骤类似,在调用时,操作员可以通过查看 driver_internal_info 字段来验证当前正在运行的步骤,查找 service_steps 字段。当前正在执行的步骤可以使用裸机节点的 service_step 字段查看,该字段是顶层字段。

服务步骤在驱动程序接口方法上使用装饰器进行内部装饰。这意味着服务步骤不会自动公开可以在任何时候执行的 clean 和 deploy 步骤。Ironic 开发团队对装饰的方法采取了谨慎和有意的做法。此外,某些清理和部署步骤明确针对在特定模式下运行而设计,不适合在原始工作流程之外触发。

可用步骤

执行服务步骤

为了使手动清理正常工作,您可能需要配置一个 服务网络

通过 API 启动手动服务

仅当节点处于 active 置备状态时,才能执行服务。从 API 版本 1.87 及更高版本开始,启动它的 REST API 请求可用

PUT /v1/nodes/<node_ident>/states/provision

(更多信息请参见 此处。)

此 API 允许操作员通过 ‘target’: ‘service’ 将节点直接从 active 置备状态置于 servicing 置备状态。PUT 还会要求指定 ‘service_steps’ 参数。这是一个有序的步骤列表。一个步骤由字典 (JSON) 表示,形式如下

{
    "interface": "<interface>",
    "step": "<name of step>",
    "args": {"<arg1>": "<value1>", ..., "<argn>": <valuen>}
}

对于所有步骤,‘interface’ 和 ‘step’ 键是必需的。如果服务步骤方法接受关键字参数,则可以指定 ‘args’ 键。它是一个关键字变量参数的字典,每个关键字参数条目为 <name>: <value>。

如果任何步骤缺少必需的关键字参数,则不会执行服务,并且节点将置于 service failed 置备状态,并显示适当的错误消息。

如果在服务过程中,服务步骤确定关键字参数不正确,则将执行所有先前的步骤,然后将节点置于 service failed 置备状态,并显示适当的错误消息。

此 API 请求体的示例

{
  "target":"service",
  "sevice_steps": [{
    "interface": "raid",
    "step": "apply_configuration",
    "args": {"create_nonroot_volumes": True}
  },
  {
    "interface": "vendor",
    "step": "send_raw",
    "args": {"raw_bytes": "0x00 0x00 0x00 0x00"}
  }]
}

在上面的示例中,节点的 RAID 接口将应用设置的 RAID 配置,然后将调用供应商接口的 send_raw 步骤,以将原始命令发送到 BMC。请注意,send_raw 仅适用于 ipmi 硬件类型。

或者,您可以指定 runbook 代替 service_steps

{
  "target":"service",
  "runbook": "<runbook_name_or_uuid>"
}

指定的 runbook 必须与节点的某个特性匹配才能使用。

通过“openstack baremetal” CLI 启动服务

从 Bare Metal API 版本 1.87 开始,服务可通过 baremetal node service 命令使用。

必须指定 --service-steps 参数。它的值是以下之一

  • JSON 字符串

  • 指向 JSON 文件的路径,其内容传递给 API

  • ‘-’,从 stdin 读取。这允许将服务步骤管道输入。在 Unix 实用程序中使用 ‘-’ 表示 stdin 很常见。

使用 JSON 字符串执行此操作的示例

baremetal node service <node> \
    --service-steps '[{"interface": "deploy", "step": "example_task"}]'

或使用文件

baremetal node service <node> \
    --service-steps my-service-steps.txt

或使用 stdin

cat my-clean-steps.txt | baremetal node service <node> \
    --service-steps -

使用 Runbook 进行服务

与手动清理类似,您可以使用 runbook 进行节点服务。Runbook 通过特性与节点关联,提供预定义的服务步骤列表。

要使用 runbook 进行服务

baremetal node service <node> –runbook <runbook_name_or_uuid>

在使用它进行服务之前,请确保 runbook 与节点的某个特性匹配。有关 runbook API 用法的更多信息,请参阅 清理和服务的 Runbook

Ironic 中的可用步骤

ipmi 硬件类型

vendor.send_raw

此步骤在 IPMI 驱动程序 文档中介绍,除了部署步骤之外,还可以将其用作服务步骤。

redfish 硬件类型

bios.apply_configuration

此步骤在 BIOS 配置 配置文档中介绍,因为它最初是作为清理步骤开始的。它是一个标准化的跨接口名称。

management.update_firmware

此步骤在 Redfish 驱动程序 中介绍,旨在通过 BMC 促进固件更新。

raid.apply_configuration

此步骤在 Redfish 驱动程序 中介绍,旨在促进应用 raid 配置。

raid.delete_configuration

此步骤在 Redfish 驱动程序 中介绍,旨在删除配置。

Agent

raid.apply_configuration

这是 Agent 的标准化 RAID 传递接口,可以像其他 RAID 接口一样利用它。

Ironic-Python-Agent 中的可用步骤

注意

一旦 Agent 合并了支持将步骤暴露给 ironic 部署,将填充 Agent 可用的步骤。

服务网络

如果您使用的是 Neutron DHCP 提供程序(默认),您还需要确保已配置服务网络。此网络将用于在带内服务操作的 ramdisk 启动。