使用部署步骤和模板¶
概述¶
节点部署由 Bare Metal 服务执行,以准备节点供工作负载使用。使用的确切工作流程取决于多种因素,包括节点的硬件类型和分配的接口。
部署步骤¶
Bare Metal 服务通过从分配给节点的驱动程序的 Power、Deploy、Management、BIOS 和 RAID 接口收集要对节点执行的部署步骤列表来实现部署。这些步骤然后按优先级排序,并在节点移动到 deploying 状态时在节点上执行。
当尝试移动到 active 状态(即硬件已准备好供工作负载使用)时,节点会移动到 deploying 状态。要充分了解所有进入部署的状态转换,请参阅 Bare Metal 状态机。
Bare Metal 服务在 Rocky 版本中添加了对部署步骤的支持。
执行顺序¶
部署步骤按从高到低的优先级排序,其中较大的整数表示较高的优先级。如果不同接口上的部署步骤使用相同的优先级,则使用以下解析顺序:Power、Management、Deploy、BIOS 和 RAID 接口。
Agent 步骤¶
基于 ironic-python-agent(即 direct、ansible 以及任何衍生版本)的所有部署接口都公开以下部署步骤
deploy.deploy(优先级 100)在此步骤中,节点使用配置镜像启动。
deploy.write_image(优先级 80)通过带外 (
ansible) 或带内 (direct) 步骤,将镜像下载并写入节点。deploy.tear_down_agent(优先级 40)在此步骤中,配置镜像被关闭。
deploy.switch_to_tenant_network(优先级 30)在此步骤中,节点的网络从配置网络切换到租户网络。
deploy.boot_instance(优先级 20)在此步骤中,节点启动到用户镜像。
此外,direct 部署接口还有
deploy.prepare_instance_boot(优先级 60)在此步骤中,配置启动设备并安装引导加载程序。
注意
对于
ansible部署接口,这些步骤在deploy.write_image中完成。
因此,可以为自定义部署步骤使用以下优先级范围
- > 100
在部署之前运行的带外步骤。
- 81 到 99
在写入镜像之前运行的带内部署步骤。
- 61 到 79
在写入镜像后但安装引导加载程序之前运行的带内部署步骤。
- 41 到 59
在写入镜像并安装引导加载程序后运行的带内步骤。
- 21 到 39
在关闭配置镜像后运行的带外步骤。
- 1 到 19
在用户实例已经运行时运行的任何步骤。
带内步骤¶
ramdisk 可以提供更多部署步骤,请参阅 IPA 硬件管理器文档 以获取列表。
请求步骤¶
从 Bare Metal API 版本 1.69 开始,用户可以在调用部署或重建时选择性地提供节点部署的部署步骤。重叠的步骤将优先于 Agent 步骤 和 部署模板 步骤。
使用“baremetal”客户端,可以通过 --deploy-steps 参数传递部署步骤。 --deploy-steps 参数可以是以下之一
JSON 字符串
指向 JSON 文件的路径,其内容传递给 API
'-',从 stdin 读取。这允许将部署步骤管道传输到 API。
通过传递 JSON 字符串的示例
baremetal node deploy <node> \
--deploy-steps '[{"interface": "bios", "step": "apply_configuration", "args": {"settings": [{"name": "LogicalProc", "value": "Enabled"}]}, "priority": 150}]'
JSON 格式的部署步骤参数的描述在 部署步骤格式 部分中。
注意
从 ironicclient 4.6.0 开始,您可以为 --deploy-steps 提供 YAML 文件。
排除默认步骤¶
从 Xena 版本开始,您可以使用新的 自定义 agent 部署 接口来排除默认步骤 write_image 并跳过 prepare_instance_boot 步骤中的引导加载程序安装。
编写部署步骤¶
请参阅 开发部署和清理步骤。
常见问题解答¶
正在运行哪个部署步骤?¶
要检查节点正在执行或尝试执行但失败的部署步骤,请运行以下命令;它将在节点的 driver_internal_info 字段中返回值
baremetal node show <node> -f value -c driver_internal_info
deploy_steps 字段将包含所有剩余步骤及其优先级列表,并且列出的第一个步骤是当前正在进行或节点在进入 deploy failed 状态之前失败的步骤。
故障排除¶
如果节点部署失败,则该节点将被置于 deploy failed 状态,直到该节点被取消配置。取消配置的节点在清理过程成功执行后移动到 available 状态。
确定部署步骤失败原因的策略包括检查 ironic conductor 日志、检查存储在 ironic conductor 上的 ironic-python-agent 日志,或对节点执行常规硬件故障排除。
部署模板¶
从 Stein 版本开始,Bare Metal API 版本 1.55,部署模板提供了一种定义一组一个或多个部署步骤的方法,这些步骤将以特定的参数和优先级执行。
每个部署模板都有一个名称,必须是有效的 trait。Traits 可以是标准 trait 或自定义 trait。标准 trait 列在 os_traits 库 中。自定义 trait 必须满足以下要求
并在其前加上
CUSTOM_仅包含大写字母 A 到 Z、数字 0 到 9 或下划线
长度不超过 255 个字符
部署步骤格式¶
在部署模板中,部署步骤的调用定义如下
{
"interface": "<name of the driver interface>",
"step": "<name of the step>",
"args": {
"<arg1>": "<value1>",
"<arg2>": "<value2>"
},
"priority": <priority of the step>
}
部署模板包含一个或多个这样的步骤。 interface 和 step 的每个组合只能在部署模板中指定一次。
匹配部署模板¶
在部署期间,如果节点 instance_info.traits 字段中的任何 trait 与部署模板的名称匹配,则该模板中的步骤将添加到节点要执行的步骤列表中。
当使用 Compute 服务时,实例的 flavor 属性或镜像属性中的任何 trait 都在部署期间存储在 instance_info.traits 中。有关在 Bare Metal 服务与 Compute 服务一起使用时如何使用 trait 进行调度的更多信息,请参阅 基于 trait 的调度。
请注意,节点与在部署期间匹配的任何模板之间没有持续关系。在部署时检查匹配的部署模板集。这些模板的任何后续更新或删除都不会反映在节点的配置中,除非重新部署或重建。同样,如果节点被重建并且自初始部署以来匹配的部署模板集已更改,则节点的最终配置可能与初始部署不同。
覆盖默认部署步骤¶
如果默认优先级为非零,则部署步骤默认启用。默认部署步骤可以在部署模板中被覆盖。如果步骤的优先级是正整数,则将以指定的优先级和参数执行该步骤。如果步骤的优先级为零,则该步骤将不会执行。
如果 deploy.deploy 步骤 包含在部署模板中,则只能分配优先级 0 以禁用它。
通过 API 创建部署模板¶
可以使用 Bare Metal API 创建部署模板
POST /v1/deploy_templates
以下是创建包含单个步骤的部署模板的请求正文示例
{
"name": "CUSTOM_HYPERTHREADING_ON",
"steps": [
{
"interface": "bios",
"step": "apply_configuration",
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"priority": 150
}
]
}
有关此 API 的更多信息,请参见 此处。
通过“baremetal”客户端创建部署模板¶
可以使用 baremetal deploy template create 命令创建部署模板,从 python-ironicclient 2.7.0 开始。
必须指定 --steps 参数。其值为以下之一
JSON 字符串
指向 JSON 文件的路径,其内容传递给 API
'-',从 stdin 读取。这允许将部署步骤管道传输到 API。
使用 JSON 字符串创建部署模板的示例
baremetal deploy template create \
CUSTOM_HYPERTHREADING_ON \
--steps '[{"interface": "bios", "step": "apply_configuration", "args": {"settings": [{"name": "LogicalProc", "value": "Enabled"}]}, "priority": 150}]'
或使用文件
baremetal deploy template create \
CUSTOM_HYPERTHREADING_ON \
---steps my-deploy-steps.txt
或使用 stdin
cat my-deploy-steps.txt | baremetal deploy template create \
CUSTOM_HYPERTHREADING_ON \
--steps -
使用 Compute 服务的示例¶
注意
在此示例中使用的部署步骤仅供参考。
在以下示例中,我们首先将 trait CUSTOM_HYPERTHREADING_ON 添加到由 <node> 表示的节点
baremetal node add trait <node> CUSTOM_HYPERTHREADING_ON
我们还在 Compute 服务中更新 flavor bm-hyperthreading-on,并具有以下属性
openstack flavor set --property trait:CUSTOM_HYPERTHREADING_ON=required bm-hyperthreading-on
使用此 flavor 创建 Compute 实例将确保该实例仅调度到具有 CUSTOM_HYPERTHREADING_ON trait 的 Bare Metal 节点。
然后,我们可以创建一个名为 CUSTOM_HYPERTHREADING_ON 的 Bare Metal 部署模板,并使用一个启用超线程的部署步骤
{
"name": "CUSTOM_HYPERTHREADING_ON",
"steps": [
{
"interface": "bios",
"step": "apply_configuration",
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"priority": 150
}
]
}
使用 bm-hyperthreading-on flavor 创建实例时,将执行部署模板 CUSTOM_HYPERTHREADING_ON 的部署步骤,从而在节点的 BIOS 配置中启用超线程。
为了使此示例更具动态性,让我们将第二个 trait CUSTOM_HYPERTHREADING_OFF 添加到节点
baremetal node add trait <node> CUSTOM_HYPERTHREADING_OFF
我们还可以更新第二个 flavor bm-hyperthreading-off,并具有以下属性
openstack flavor set --property trait:CUSTOM_HYPERTHREADING_OFF=required bm-hyperthreading-off
最后,我们创建一个名为 CUSTOM_HYPERTHREADING_OFF 的部署模板,并使用一个禁用超线程的部署步骤
{
"name": "CUSTOM_HYPERTHREADING_OFF",
"steps": [
{
"interface": "bios",
"step": "apply_configuration",
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Disabled"
}
]
},
"priority": 150
}
]
}
使用 bm-hyperthreading-off 实例创建实例将导致计划的节点在部署期间在 BIOS 中禁用超线程。
我们现在有了一种方法,可以通过选择不同的计算规格,利用单个裸机节点在部署期间动态配置,来创建具有不同配置的计算实例。