使用部署步骤和模板

概述

节点部署由 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(即 directansible 以及任何衍生版本)的所有部署接口都公开以下部署步骤

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>
}

部署模板包含一个或多个这样的步骤。 interfacestep 的每个组合只能在部署模板中指定一次。

匹配部署模板

在部署期间,如果节点 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 中禁用超线程。

我们现在有了一种方法,可以通过选择不同的计算规格,利用单个裸机节点在部署期间动态配置,来创建具有不同配置的计算实例。