增强 NFV SOL_v3 LCM 操作

本规范支持符合 ETSI NFV SOL v3 的新型 VNF 生命周期管理 API。它添加了与操作实例化 VNF 实例(缩放、修复、修改和更改外部 VNF 连接)相关的 API 新版本。

问题描述

ETSI 规范在 NFV 架构框架内 [1] 描述了基于行业需求、SDN/NFV 供应商和电信运营商反馈的 NFV 开发和使用的主要方面。这些规范包括 REST API 和数据模型架构,这些架构被 NFV 用户和开发人员用于相关产品。

支持关键的 ETSI NFV 规范将显著减少 Tacker 集成到电信生产网络的工作量,并简化未来标准的进一步开发和支持。为了将 Tacker 集成到各种产品中,它应符合多个版本的 ETSI NFV SOL 规范。Tacker 已经支持 ETSI NFV SOL002 v2.6.1 [2] 和 SOL003 v2.6.1 [3] 中定义的 VNF 生命周期管理操作。此外,Xena 版本支持 ETSI NFV SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 中定义的部分 VNF 生命周期管理操作。支持的 API 的详细信息在 Tacker Xena 规范中描述 [6] [7]。Tacker 应该支持 ETSI NFV SOL002/003 v3.3.1 中定义的更多 VNF 生命周期管理操作。

提议的变更

由于 ETSI NFV SOL v3 中指定的 VNF 生命周期管理接口版本为“2.0.0”,因此 URI 中包含的 API 主要版本应设置为“v2”。支持 v2 API 涉及更改某些属性的数据类型以及添加或删除属性。为了避免对现有实现产生影响,与“v1”对应的 API 应该实现为独立于“v1”的过程。

此接口支持与获取生命周期管理操作信息相关的以下 API。

  • 缩放 VNF (POST /vnf_instances/{vnfInstanceId}/scale)

  • 修复 VNF (POST /vnf_instances/{vnfInstanceId}/heal)

  • 修改 VNF 信息 (PATCH /vnf_instances/{vnfInstanceId})

  • 更改外部 VNF 连接 (POST /vnf_instances/{vnfInstanceId}/change_ext_conn)

1) 缩放 VNF 的流程

../../_images/0139.png

该过程包括以下步骤,如图所示

先决条件:VNF 实例处于实例化状态。

  1. 客户端向 VNFM 发送缩放 VNF 实例的 POST 请求。

  2. VNFM 向端点(例如客户端)发送带有“STARTING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的开始。

  3. VNFM 和 NFVO 交换授权信息。

  4. VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。

  5. MgmtDriver 根据 MgmtDriver 脚本执行预操作。

  6. 要缩放的 VM 数量是通过将缩放 VNF 请求中包含的“number_of_steps”与 VNFD 中包含的“number_of_instances”相乘来计算的。

  7. 仅针对缩减,OpenstackDriver 会为删除的 VM 发送 Heat 标记堆栈不健康请求。

  8. OpenstackDriver 发送带有递增或递减目标 VM 的 AutoScalingGroup 的“desired_capacity”的 Heat stack-update 请求。

  9. MgmtDriver 根据 MgmtDriver 脚本执行后操作。

  10. VNFM 向端点(例如客户端)发送带有“COMPLETED”状态或“FAILED_TEMP”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的结果。

后置条件:VNF 实例仍处于实例化状态,并且 VNF 已被缩放。

注意

Scale API 版本 1 支持 *is_reverse* 选项。使用此选项的缩减操作从最后一个注册的 VM 删除 VNF。Scale API 版本 2 不支持此选项,因为它默认按此顺序删除 VM。

注意

Tacker 不支持 ETSI NFV SOL001 [8] 中定义的 *非均匀增量*。因此,可以设置与“number_of_instances”对应的 *均匀增量*,并且无论 scale_level 如何,“number_of_instances”都是相同的。

2) 修复 VNF 的流程

客户端可以使用 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 实例、网络资源和存储资源,但不包括外部虚拟网络。

模式 B-2 的修复操作可以通过组合终止 vnf 和实例化 vnf 来实现。

以下显示了模式 A-1、A-2 和 B-1 的序列。

../../_images/0224.png

该过程包括以下步骤,如图所示

先决条件:VNF 实例处于实例化状态。

  1. 客户端发送修复 VNF 实例的 POST 请求。

  2. VNFM 向端点(例如客户端)发送带有“STARTING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的开始。

  3. VNFM 和 NFVO 交换授权信息。

  4. VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。

  5. MgmtDriver 根据 MgmtDriver 脚本执行预操作。

  6. OpenstackDriver 根据修复请求参数向目标 VM 发送 Heat 标记堆栈不健康请求。

  7. OpenstackDriver 发送 Heat stack-update 请求以执行修复。当缩放多个 VM 时,stack-update 会针对每个 VM 重复执行。

  8. MgmtDriver 根据 MgmtDriver 脚本执行后操作。

  9. VNFM 向端点(例如客户端)发送带有“COMPLETED”状态或“FAILED_TEMP”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的结果。

后置条件:VNF 实例处于“INSTANTIATED”状态,并且已修复。

3) 修改 VNF 信息流程

../../_images/0313.png

先决条件:已创建表示 VNF 实例的资源。

  1. 客户端向 VNFM 发送修改 VNF 实例信息的 PATCH 请求。

  2. VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。

  3. VNFM 修改 VNF 实例的信息。

  4. VNFM 向端点(例如客户端)发送带有“COMPLETED”状态或“FAILED_TEMP”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的结果。

后置条件:成功完成,VNF 实例的信息已更新。

4) 更改外部 VNF 连接的流程

../../_images/049.png

该过程包括以下步骤,如图所示

先决条件:VNF 实例处于实例化状态。

  1. 客户端向 VNFM 发送更改外部 VNF 连接的 POST 请求。

  2. VNFM 向端点(例如客户端)发送带有“STARTING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的开始。

  3. VNFM 和 NFVO 交换授权信息。

  4. VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。

  5. MgmtDriver 根据 MgmtDriver 脚本执行预操作。

  6. OpenstackDriver 发送带有要更改的外部虚拟链路 (VL) 和外部连接点的 Heat stack-update 请求。

  7. MgmtDriver 根据 MgmtDriver 脚本执行后操作。

  8. VNFM 向端点(例如客户端)发送带有“COMPLETED”状态或“FAILED_TEMP”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的结果。

后置条件:VNF 实例仍处于实例化状态,并且已更改外部 VNF 连接。

本规范支持以下 VL 的更改。
  • port

  • 网络。

  • VL 中的 IP 地址/MAC 地址/允许的地址对。

本规范不支持 trunk-parent-port 和 trunk-sub-port。

数据模型影响

更改对数据模型没有影响。

由于 Xena 版本已经支持 SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 中定义的所有属性,因此不需要更改数据对象和数据库表。

REST API 影响

应在 API 验证中支持所有定义的属性。

  • 名称:缩放 VNF 实例
    描述:VNF 实例的缩减或缩放。
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale
    请求:

    数据类型

    基数

    描述

    ScaleVnfRequest

    1

    缩放 VNF 操作的参数。

    属性名称

    数据类型

    基数

    API v2 中支持

    API v1 中支持

    描述

    type

    Enum

    1

    指示请求的缩放操作类型。允许的值
    SCALE_OUT:添加额外的 VNFC 实例到 VNF 以增加容量。
    SCALE_IN:从 VNF 中删除 VNFC 实例以释放未使用的容量。

    aspectId

    IdentifierInVnfd

    1

    numberOfSteps

    Integer

    0..1

    additionalParams

    KeyValuePairs

    0..1

    >is_reverse

    布尔值

    0..1

    Tacker 原始属性

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

    请求已被接受进行处理。

    ProblemDetails

    0..1

    错误:404

    API 生产者未找到目标资源的当前表示形式,或不愿意公开该表示形式。

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何常见错误响应代码。

  • 名称:修复 VNF 实例
    描述:VNF 实例的修复。
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_instances/{vnfInstanceId}/heal
    请求:

    数据类型

    基数

    描述

    HealVnfRequest

    1

    修复 VNF 操作的参数。

    属性名称

    数据类型

    基数

    API v2 中支持

    API v1 中支持

    描述

    vnfcInstanceId

    标识符

    0..N

    此属性仅在 SOL 002 中定义。

    cause

    字符串

    0..1

    additionalParams

    KeyValuePairs

    0..1

    >all

    布尔值

    0..1

    Tacker 原始属性

    healScript

    字符串

    0..1

    此属性仅在 SOL 002 中定义。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

    请求已被接受进行处理。

    ProblemDetails

    0..1

    错误:404

    API 生产者未找到目标资源的当前表示形式,或不愿意公开该表示形式。

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何常见错误响应代码。

  • 名称:修改 VNF 信息
    描述:更新 VNF 实例的信息。
    方法类型: PATCH
    资源的 URL:vnflcm/v2/vnf_instances/{vnfInstanceId}
    请求:

    数据类型

    基数

    描述

    VnfInfoModificationRequest

    1

    VNF 修改的参数。

    属性名称

    数据类型

    基数

    API v2 中支持

    API v1 中支持

    描述

    vnfInstanceName

    字符串

    0..1

    vnfInstanceDescription

    字符串

    0..1

    vnfPkgId

    标识符

    1

    虽然此属性在 SOL 002/003 v2.6.1 中不可用,但 Tacker 在 v1 API 中支持它。请参阅注释。

    vnfdId

    标识符

    0..1

    vnfConfigurableProperties

    KeyValuePairs

    0..1

    metadata

    KeyValuePairs

    0..1

    extensions

    KeyValuePairs

    0..1

    vimConnectionInfo

    map(VimConnectionInfo)

    0..N

    此属性仅在 SOL 003 中定义。

    >vimId

    标识符

    0..1

    >vimType

    字符串

    1

    >interfaceInfo

    KeyValuePairs

    0..1

    >accessInfo

    KeyValuePairs

    0..1

    >extra

    KeyValuePairs

    0..1

    vnfcInfoModifications

    VnfcInfoModifications

    0..N

    此属性仅在 SOL 002 中定义。

    >id

    IdentifierInVnf

    1

    >vnfcConfigurableProperties

    KeyValuePairs

    1

    注意

    vnfPkgId 在 SOL 002/003 v2.6.1 中不可用。它在 v2.4.1 中可用。但是,Tacker 为了某些 NFV 相关设备,利用 v2.4.1 API 而支持它。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

    请求已被接受进行处理。

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何常见错误响应代码。

    注意

    由于当前的 Tacker 不支持 *http Etag*,因此不支持错误代码:412 前置条件失败。根据 ETSI NFV SOL 文档,尚未定义 Etag 的 API 请求/响应规范,并且使用 Etag 的事务尚未通过标准化定义。在 ETSI NFV 规范定义相关事务后,Tacker 将支持 Etag。

  • 名称:更改外部 VNF 连接
    描述:更改 VNF 实例的外部连接。
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_instances/{vnfInstanceId}/change_ext_conn
    请求:

    数据类型

    基数

    描述

    ChangeExtVnfConnectivityRequest

    1

    更改外部 VNF 连接的参数。

    属性名称

    数据类型

    基数

    API v2 中支持

    API v1 中支持

    描述

    extVirtualLinks

    ExtVirtualLinkData

    1..N

    >id

    标识符

    1

    >vimConnectionId

    标识符

    0..1

    >resourceProviderId

    标识符

    0..1

    >resourceId

    IdentifierInVim

    1

    >extCps

    VnfExtCpData

    1..N

    >>cpdId

    IdentifierInVnfd

    1

    >>cpConfig

    map(VnfExtCpConfig)

    1..N

    >>>parentCpConfigId

    IdentifierInVnf

    0..1

    >>>linkPortId

    标识符

    0..1

    >>>cpProtocolData

    CpProtocolData

    0..N

    >>>>layerProtocol

    Enum

    1

    允许的值:IP_OVER_ETHERNET。

    >>>>ipOverEthernet

    IpOverEthernetAddressData

    0..1

    >>>>>macAddress

    MacAddress

    0..1

    >>>>>segmentationId

    字符串

    0..1

    未定义

    API v2 中的新属性。

    >>>>>ipAddresses

    结构

    0..N

    >>>>>>type

    Enum

    1

    允许的值:IPV4、IPV6。

    >>>>>>fixedAddresses

    IpAddress

    0..N

    >>>>>>numDynamicAddresses

    Integer

    0..1

    >>>>>>addressRange

    结构

    0..1

    >>>>>>>minAddress

    IpAddress

    1

    >>>>>>>maxAddress

    IpAddress

    1

    >>>>>>subnetId

    IdentifierInVim

    0..1

    >extLinkPorts

    ExtLinkPortData

    0..N

    >>id

    标识符

    1

    >>resourceHandle

    ResourceHandle

    1

    >>>vimConnectionId

    标识符

    0..1

    >>>resourceProviderId

    标识符

    0..1

    >>>resourceId

    IdentifierInVim

    1

    >>>vimLevelResourceType

    字符串

    0..1

    vimConnectionInfo

    map(VimConnectionInfo)

    0..N

    此属性仅在 SOL 003 中定义。

    >vimId

    标识符

    0..1

    >vimType

    字符串

    1

    >interfaceInfo

    KeyValuePairs

    0..1

    >accessInfo

    KeyValuePairs

    0..1

    >extra

    KeyValuePairs

    0..1

    additionalParams

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

    请求已被接受进行处理。

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条。

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [9]

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

野口宏文 <hirofumi.noguchi.rs@hco.ntt.co.jp>

工作项

  • 将 v2 API 支持的新属性添加到 python-tackerclient。

  • 将新的版本 API 端点添加到 Tacker-server。

  • 为 Tacker-conductor 实现新的版本 API 处理。

  • 添加新的单元和功能测试。

  • 更新 Tacker 的 API 参考。

依赖项

测试

将为 VNF 实例的 VNF 生命周期管理添加单元和功能测试用例。

文档影响

需要将新的支持的 API 添加到 Tacker API 参考中。

参考资料