ETSI NFV-SOL VNF 修复

本文档描述了在 v2 Tacker 中如何修复 VNF。

注意

本文档的内容已确认使用以下 VNF 包有效。

概述

下图显示了 VNF 修复的概述。

  1. 请求修复 VNF

    用户通过请求 heal VNF,使用 tacker-client 请求 tacker-server 修复 VNF 或所有 VNF。

  2. 调用 OpenStack Heat API

    收到 tacker-client 的请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会再次根据实例化参数的内容重定向到适当的基础设施驱动程序(在本例中为 OpenStack 基础设施驱动程序)。然后,OpenStack 基础设施驱动程序调用 OpenStack Heat API。

  3. 重新创建虚拟机

    OpenStack Heat 根据 API 调用重新创建虚拟机。

../../../../_images/heal1.svg

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

执行 ETSI NFV-SOL VNF 部署为带有 LCM 操作用户数据的虚拟机 过程中的“实例化 VNF”步骤。换句话说,不执行“终止 VNF”之后的步骤。

修复目标 VNF 实例

假设存在以下 VNF 实例,将修复此实例。

$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
  -f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo

结果

[
  {
    "id": "VDU1-ed781426-c59d-4c32-8bc3-e26144167220",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "ed781426-c59d-4c32-8bc3-e26144167220",
    "vnfcState": "STARTED"
  },
  {
    "id": "VDU2-30402dfa-e125-4f8c-a1d1-2a8df3e01987",
    "vduId": "VDU2",
    "vnfcResourceInfoId": "30402dfa-e125-4f8c-a1d1-2a8df3e01987",
    "vnfcState": "STARTED"
  }
]

VNF 修复流程

如前提条件中所述,在修复之前必须实例化 VNF。

CLI 命令的详细信息在 v2 Tacker 的 VNF 生命周期管理 中描述。

VNF 修复主要有两种方法。

  • 修复整个 VNF

  • 使用 VNFC 实例指定修复

注意

VNFC 是“VNF 组件”,一个 VNFC 基本对应于 VNF 中的一个 VDU。有关 VNFC 的更多信息,请参阅 NFV-SOL002 v3.3.1

客户端可以在 API 请求中使用两个参数来指定修复的目标资源。

  • vnfcInstanceId 是一个列表,指示请求进行修复操作的 VNFC 实例。

  • all 指示网络资源和存储资源是否包含在修复目标中。这在 additionalParams 的属性中设置。

通过这些参数的组合,Tacker 支持以下修复模式。

  • 模式 A。vnfcInstanceId 包含在请求中。

    • 模式 A-1。all = false 包含在请求中,或者all 未包含在请求中。

      • 仅修复指定的 VNFC 实例。

    • 模式 A-2。all = true 包含在请求中。

      • 修复指定的 VNFC 实例和存储资源。

  • 模式 B。vnfcInstanceId 不包含在请求中。

    • 模式 B-1。all = false 包含在请求中,或者all 未包含在请求中。

      • 修复 VNF 实例中包含的所有 VNFC 实例。

    • 模式 B-2。all = true 包含在请求中。

      • 修复 VNF 实例中包含的所有资源。它包括 VNFC 实例、网络资源和存储资源,但不包括外部虚拟网络。

如何使用 VNFC 实例指定修复

Healing target VNF instance 中的“已实例化的 Vnf 信息”中提取 vnfcInfo 的 id。这是 VNFC 实例 ID。

本手册展示了将 VDU1 作为 VNFC 进行修复的示例。在本手册中,VDU1-ed781426-c59d-4c32-8bc3-e26144167220 对应于 VDU1 的 vnfcInstanceId

当使用 VNFC 实例指定修复时,将从 Tacker 到 Heat 执行以下 API。有关 Heat API 的详细信息,请参阅 Heat API 参考

  • 堆栈资源标记为不健康

  • 堆栈更新

执行 Heat CLI 命令,并在修复之前和之后检查 VDU1 的 id 和状态。这是为了确认在修复之前和之后某些资源的 id 发生了变化,并且重新创建已成功完成。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考

注意

请注意,Tacker 管理的 ‘vnfcInstanceId’ 和 Heat 管理的 ‘physical_resource_id’ 是不同的。

模式 A-1

  • vnfcInstanceId 包含在请求中

  • all = false 包含在请求中,或者all 未包含在请求中

修复前 VDU1 信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | ed781426-c59d-4c32-8bc3-e26144167220 |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+

VDU1 的修复执行

$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID \
  --additional-param-file param_file --os-tacker-api-version 2

结果

Heal request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

注意

可以在 ‘–vnfc-instance’ 选项中指定多个 VNFC 实例 ID。

修复后 VDU1 信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 83b5c3e0-8dc1-40c8-9aa8-976c43991971 |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+

注意

OS::Nova::Server 的 ‘physical_resource_id’ 从修复前的 ID 发生了变化。OS::Cinder::Volume 的 ‘physical_resource_id’ 从修复前的 ID 没有发生变化。‘resource_status’ 变为 CREATE_COMPLETE。

模式 A-2

  • vnfcInstanceId 包含在请求中

  • all = true 包含在请求中

修复前 VDU1 信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 3395b07e-8c2e-4fb8-a652-f180d03ab284 |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+

VDU1 的修复执行

$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID \
  --additional-param-file param_file --os-tacker-api-version 2

结果

Heal request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

注意

可以在 ‘–vnfc-instance’ 选项中指定多个 VNFC 实例 ID。

修复后 VDU1 信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | e0ca3bf7-7c3e-477d-8682-81f444f4ab6a |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | bd876ebe-dd91-44d1-830f-99ebd526b854 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+

注意

OS::Nova::Server 和 OS::Cinder::Volume 的 ‘physical_resource_id’ 从修复前的 ID 发生了变化。‘resource_status’ 变为 CREATE_COMPLETE。

如何修复整个 VNF

当修复整个 VNF 并且不包含all = true 时,将从 Tacker 到 Heat 执行以下 API。有关 Heat API 的详细信息,请参阅 Heat API 参考

  • 堆栈资源标记为不健康

  • 堆栈更新

当修复整个 VNF 并且包含all = true 时,将从 Tacker 到 Heat 执行以下 API。有关 Heat API 的详细信息,请参阅 Heat API 参考

  • 堆栈删除

  • 堆栈创建

执行 Heat CLI 命令,并在修复之前和之后检查 id 或状态。这是为了确认在修复之前和之后某些资源的 id 发生了变化,并且重新创建已成功完成。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考

模式 B-1

  • vnfcInstanceId 不包含在请求中

  • all = false 包含在请求中,或者all 未包含在请求中

修复前堆栈信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | e0ca3bf7-7c3e-477d-8682-81f444f4ab6a |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 30402dfa-e125-4f8c-a1d1-2a8df3e01987 |
| resource_name        | VDU2                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | bd876ebe-dd91-44d1-830f-99ebd526b854 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 379db550-6dad-4e3b-aadb-55dfc4d4c832 |
| resource_name        | VDU2-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_CP_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | cbaf5040-2c4a-4498-a59c-9e6842feb920 |
| resource_name        | VDU1_CP3                             |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Neutron::Port                    |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_CP_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 267161b4-f942-47ce-9aec-c2f5644330f7 |
| resource_name        | VDU2_CP3                             |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Neutron::Port                    |
+----------------------+--------------------------------------+

修复执行

$ openstack vnflcm heal VNF_INSTANCE_ID \
  --additional-param-file param_file --os-tacker-api-version 2

结果

Heal request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

修复后堆栈信息

$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 918bd443-a764-4f35-96a8-aaebc3a4a05b |
| resource_name        | VDU1                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_SERVER_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 535d16c6-efd4-435a-af7c-d2caca556b4b |
| resource_name        | VDU2                                 |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Nova::Server                     |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | bd876ebe-dd91-44d1-830f-99ebd526b854 |
| resource_name        | VDU1-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_VOLUME_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 379db550-6dad-4e3b-aadb-55dfc4d4c832 |
| resource_name        | VDU2-VirtualStorage                  |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Cinder::Volume                   |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU1_CP_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | cbaf5040-2c4a-4498-a59c-9e6842feb920 |
| resource_name        | VDU1_CP3                             |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Neutron::Port                    |
+----------------------+--------------------------------------+
$ openstack stack resource show HEAT_STACK_ID VDU2_CP_NAME \
  -c physical_resource_id -c resource_name -c resource_status -c resource_type

结果

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| physical_resource_id | 267161b4-f942-47ce-9aec-c2f5644330f7 |
| resource_name        | VDU2_CP3                             |
| resource_status      | CREATE_COMPLETE                      |
| resource_type        | OS::Neutron::Port                    |
+----------------------+--------------------------------------+

注意

OS::Nova::Server 的 ‘physical_resource_id’ 从修复前的 ID 发生了变化。OS::Cinder::Volume 和 OS::Neutron::Port 的 ‘physical_resource_id’ 从修复前的 ID 没有发生变化。‘resource_status’ 变为 CREATE_COMPLETE。

模式 B-2

  • vnfcInstanceId 不包含在请求中

  • all = true 包含在请求中

修复前堆栈信息

$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'

结果

+--------------------------------------+------------------------------------------+-----------------+
| ID                                   | Stack Name                               | Stack Status    |
+--------------------------------------+------------------------------------------+-----------------+
| cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | CREATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+

执行整个 VNF 的修复

$ openstack vnflcm heal VNF_INSTANCE_ID \
  --additional-param-file param_file --os-tacker-api-version 2

结果

Heal request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

修复后堆栈信息

$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'

结果

+--------------------------------------+------------------------------------------+-----------------+
| ID                                   | Stack Name                               | Stack Status    |
+--------------------------------------+------------------------------------------+-----------------+
| 7a53b676-aa9c-4c7d-a8a7-1311646ec7e2 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | CREATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+

注意

‘ID’ 从修复前的 ID 发生了变化。‘Stack Status’ 变为 CREATE_COMPLETE。