添加用于协调的示例 coordinateVNF 脚本

https://blueprints.launchpad.net/tacker/+spec/add-sample-coordinate-script

本规范提出一个用于与外部管理系统(例如,运营支持系统 (OSS)/ 元素管理器 (EM))进行滚动更新的示例 coordinateVNF 脚本。本规范仅关注通过 ChangeCurrentVNFPackage API 进行的 VNF 更新。

问题描述

Tacker 已经支持通过 ChangeCurrentVNFPackage API 进行滚动更新。在某些电信系统中,滚动更新场景可能需要与外部组件协调(例如,由于授权原因,从外部组件更改负载均衡器设置)。为了解决这些场景,ETSI NFV SOL002 v3.5.1 [1] 定义了 VNF LCM 协调接口。但是,当前的 Tacker 不支持此 API,也没有与其他明确的功能进行外部组件协调。

提议的变更

本规范建议在 Coordinate VNF 脚本 [2] 中实现协调 API 的客户端功能,用户可以自定义该脚本而不会影响通用实现。正式地说,根据 ETSI NFV SOL001 [3],VNFD 在 LCM 期间指定协调操作和执行时机。但是,很少有产品充当协调 API 服务器,因为此接口尚未成熟。因此,现在正式支持此 API 过于繁重,Tacker 应该专注于具有特定需求的滚动更新。出于相同的原因,本规范仅针对 VNF 的 ChangeCurrentVNFPackage API。对其他 API 和 CNF 的支持是未来的工作。

支持 VNF LCM 协调接口

以下显示了 SOL002 v3.5.1 中定义的 VNF LCM 协调接口。VNFM 充当客户端,外部组件充当服务器。

  • 名称:协调 LCM 操作
    描述:请求 VNF LCM 协调
    方法类型: POST
    资源的 URL:/lcmcoord/v1/coordinations
    请求:

    数据类型

    基数

    描述

    LcmCoordRequest

    1

    协调操作的参数。

    属性名称

    数据类型

    基数

    描述

    vnfInstanceId

    标识符

    1

    此协调请求相关的 VNF 实例的标识符。

    vnfLcmOpOccId

    标识符

    1

    与协调相关的 VNF 生命周期管理操作发生的标识符。

    lcmOperationType

    LcmOperationForCoordType

    1

    请求协调的 LCM 操作的类型。

    coordinationActionName

    IdentifierInVnfd

    1

    指示 LCM 协调操作。

    inputParams

    KeyValuePairs

    0..1

    作为输入传递给协调操作的附加参数。

    _links

    结构

    1

    指向与此请求相关的资源的链接。

    >vnfLcmOpOcc

    链接

    1

    相关的生命周期管理操作发生。

    >vnfInstance

    链接

    1

    相关的 VNF 实例。

    响应:

    数据类型

    基数

    响应代码

    描述

    LcmCoord

    1

    成功: 201

    当 API 生产者选择同步模式时,应返回此对象以指示完成的协调操作,该模式可以选择用于在预期 HTTP 响应时间范围内完成的协调操作。

    n/a

    成功:202

    当 API 生产者选择异步模式并且已接受请求进行处理时,应返回此对象。此外,HTTP 响应可能包含“RetryAfter”HTTP 标头,指示在发送到“个人协调”资源(在“Location”标头中指示)的下一个 GET 请求之前等待的时间。如果提供了该标头,VNFM 应将指示的延迟值记录在“VnfLcmOpOcc”结构中的“lcmCoordinations”数组中的“delay”属性中。

    ProblemDetails

    1

    错误:403

    已拒绝启动协调操作。不应创建“个人协调操作”资源。

    ProblemDetails

    1

    错误: 409

    由于与“协调”资源的冲突,当前无法执行该操作。

    ProblemDetails

    1

    错误:503

    API 生产者选择了同步模式,当前无法执行请求的协调,但预计将来能够执行。HTTP 响应应包含“Retry-After”HTTP 标头,指示建议重复协调请求(使用相同的参数集)的延迟时间。在延迟间隔过去后,VNFM 再次发送协调请求。

    ProblemDetails

    请参阅 [4] 的 6.4 条

    错误:4xx、5xx

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

    属性名称

    数据类型

    基数

    描述

    id

    标识符

    1

    此协调结果的标识符

    coordinationResult

    LcmCoordResultType

    1

    执行协调操作的结果,这也意味着 VNFM 作为该结果要执行的操作。

    vnfInstanceId

    标识符

    1

    此协调请求相关的 VNF 实例的标识符。

    vnfLcmOpOccId

    标识符

    1

    与协调相关的 VNF 生命周期管理操作发生的标识符。

    lcmOperationType

    LcmOperationForCoordType

    1

    请求协调的 LCM 操作的类型。

    coordinationActionName

    字符串

    1

    指示 LCM 协调操作。

    outputParams

    KeyValuePairs

    0..1

    协调操作返回的附加参数。

    warnings

    字符串

    0..N

    在操作执行期间生成的警告消息。

    error

    ProblemDetails

    0..1

    与协调相关的错误信息。

    _links

    结构

    1

    指向与此资源相关的资源的链接。

    >self

    链接

    1

    此资源的 URI。

    >vnfLcmOpOcc

    链接

    1

    相关的生命周期管理操作发生。

    >vnfInstance

    链接

    1

    相关的 VNF 实例。

  • 名称:显示个人协调操作
    描述:查询个人协调操作
    方法类型: GET
    资源的 URL:/lcmcoord/v1/coordinations/{coordinationId}
    请求:
    此资源的资源 URI 变量:

    名称

    描述

    coordinationId

    LCM 协调的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    LcmCoord

    1

    成功: 200

    当协调完成并且已成功读取协调结果时,应返回此对象。

    n/a

    成功:202

    当与协调请求的生命周期管理操作仍在进行中或正在取消时,即尚未提供协调结果,应返回此对象。

    ProblemDetails

    请参阅 [4] 的 6.4 条

    错误:4xx、5xx

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

    属性名称

    数据类型

    基数

    描述

    id

    标识符

    1

    此协调结果的标识符

    coordinationResult

    LcmCoordResultType

    1

    执行协调操作的结果,这也意味着 VNFM 作为该结果要执行的操作。

    vnfInstanceId

    标识符

    1

    此协调请求相关的 VNF 实例的标识符。

    vnfLcmOpOccId

    标识符

    1

    与协调相关的 VNF 生命周期管理操作发生的标识符。

    lcmOperationType

    LcmOperationForCoordType

    1

    请求协调的 LCM 操作的类型。

    coordinationActionName

    字符串

    1

    指示 LCM 协调操作。

    outputParams

    KeyValuePairs

    0..1

    协调操作返回的附加参数。

    warnings

    字符串

    0..N

    在操作执行期间生成的警告消息。

    error

    ProblemDetails

    0..1

    与协调相关的错误信息。

    _links

    结构

    1

    指向与此资源相关的资源的链接。

    >self

    链接

    1

    此资源的 URI。

    >vnfLcmOpOcc

    链接

    1

    相关的生命周期管理操作发生。

    >vnfInstance

    链接

    1

    相关的 VNF 实例。

VNF 更新流程

下图显示了使用 coordinateVNF 脚本的滚动更新。

                                                           +---------+
                                                           |  VNFD   |
                                                           |         |
                                                           +----+----+
                                                                |
                                      (Script is included       v       +-------------------+
              +--------------------+  in the package)     +----------+  | Change current    |
+------------>| CoordinateVNF      +--------------------->|          |  | VNF Package       |
|             | script             |                      |   CSAR   |  | Request with      |
|   +---------+                    |                      |          |  | Additional Params |
|   |         +-------+------------+                      +-----+----+  +--+----------------+
|   |                 |    ^                                    |          | 1. Change current VNF Package
|   |                 |    |                              +-----v----------v------------------------------+
|   |  8. Coordination|    | Coordination                 |  +-----------------------+              VNFM  |
|   |     request     |    | Result                       |  |   Tacker-server       |                    |
|   |                 |    |                              |  +--+--------------------+                    |
|   |                 v    |                              |     |  2. Change current VNF Package request  |
|   |         +------------+-------+                      |     v                                         |
|   |         |                    |                      |  +-----------------------------------------+  |
|   |         |         EM         |                      |  |                                         |  |
|   |         |                    |                      |  |   +-------------------+                 |  |
|   |         +--------------------+                      |  |   | VnfLcmDriver      |                 |  |
|   |                                                     |  |   |                   |                 |  |
|   |                                                     |  |   |                   |                 |  |
|   |                                                     |  |   |                   |                 |  |
|   |                                                     |  |   |                   |                 |  |
|   |                                                     |  |   |                   |                 |  |
|   |  7. Coordinate                                      |  |   +-+-----------------+                 |  |
|   |     resource                                        |  |     | 3. change_vnfpkg_process          |  |
|   |         +--------------------+                      |  |     v                                   |  |
|   |         |                    | 4. Get stack resource|  |   +-------------------+                 |  |
|   |         |  +--------------+  |    to update         |  |   | InfraDriver       | 9. Repeat steps |  |
|   |         |  | Resource     |<-+----------------------+--+---+                   |    5 through 8  |  |
|   +---------+->|              |  | 5. Update VNFC       |  |   |                   |    for each VNFC|  |
|             |  |              |<-+----------------------+--+---+                   +--------+        |  |
|             |  +--------------+  |                      |  |   |                   |        |        |  |
|             | VNF                |                      |  |   |                   |<-------+        |  |
|             +--------------------+                      |  |   |                   |                 |  |
|                        6. Execute CoordinateVNF script  |  |   |                   |                 |  |
+---------------------------------------------------------+--+---+                   |                 |  |
                                                          |  |   +-------------------+                 |  |
                                                          |  |    Tacker-conductor                     |  |
              +--------------------+                      |  +-----------------------------------------+  |
              | Hardware Resources |                      |                                               |
              +--------------------+                      +-----------------------------------------------+

滚动更新操作序列

../../_images/01.png
  1. 客户端将 ChangeCurrentVNFPackage 请求发送到“个人 VNF 实例”资源。

  2. Tacker-server 调用 Tacker-conductor,然后 Tacker-conductor 获取上载的 VNF 包并调用 VnfLcmDriver。

  3. VnfLcmDriver 向 InfraDriver 发送请求,然后 InfraDriver 获取上载的 VNF 包并调用 VnfLcmDriver。

  4. InfraDriver 向 VIM 发送请求以获取要更新的堆栈资源。

  5. InfraDriver 向 VIM 发送请求以更新堆栈。

  6. InfraDriver 运行 CoordinateVNF 脚本。

  7. CoordinateVNF 脚本向 VNF 发送请求以协调 VNF。

  8. CoordinateVNF 脚本将协调请求发送到外部组件。外部组件的端点 URL 从 ChangeCurrentVNFPackage 请求获得。从 Tacker 获得的目标 VNFC 作为 LcmCoordRequest 中的 inputParams 指定(例如,通过 vnfcInstanceId 指定)。接收到协调响应后的过程取决于同步模式还是异步模式。请参阅下面的注释。

  9. 对每个 VNFC 重复步骤 5 到 8。

注意

根据 SOL002,协调接口支持同步模式和异步模式。API 服务器决定模式,API 客户端可以通过 API 响应来了解。因此,由于 VNFM 无法控制模式,Tacker 将支持两种模式。以下显示了 VNFM 的协调过程。

同步模式:EM 返回一个带有正文中的“LcmCoord”数据结构的“201 Created”响应给 Tacker,然后 VNFM 根据结果继续该过程。或者,EM 返回一个带有正文中的“ProblemDetails”数据结构和指示建议重复协调的延迟时间的“Retry-After”HTTP 标头的“503 服务不可用”响应。在延迟间隔过去后,VNFM 再次发送协调请求。

异步模式:EM 返回一个带有空正文和指示“个人协调操作”资源 URI 的“Location”HTTP 标头的“202 Accepted”响应给 Tacker。Tacker 等待一段时间(如前一个 202 响应的“Retry-After”标头中指示(如果发出信号),否则通过其他方式确定),然后再循环的下一次迭代。Tacker 通过向 EM 发送 GET 请求(使用“Location”标头中返回的 URI)来轮询协调状态。获得协调结果后,Tacker 根据该结果继续该过程。

数据模型影响

REST API 影响

为了使用户能够指定外部协调服务器的信息,ChangeCurrentVnfPkgRequest 中的 coordination_server_param 将被支持。在使用调用协调 API 的 coordinateVNF 脚本时,必须设置此参数。

  • ChangeCurrentVnfPkgRequest

    属性名称

    数据类型

    基数

    描述

    vnfdId

    标识符

    1

    定义目标 VNF 包以进行更改的 VNFD 的标识符。

    extVirtualLinks

    ExtVirtualLinkData

    0..N

    有关连接到 VNF 的外部 VL 的信息。

    extManagedVirtualLinks

    ExtManagedVirtualLinkData

    0..N

    有关由 NFVO 管理的内部 VL 的信息。

    vimConnectionInfo

    map (VimConnectionInfo)

    0..N

    有关用于管理 VNF 实例的资源的 VIM 连接的信息,或引用外部/外部管理的虚拟链路。

    additionalParams

    KeyValuePairs

    0..1

    EM 作为输入传递给该过程的附加参数。

    extensions

    KeyValuePairs

    0..1

    “VnfInstance”中的“extensions”属性。

    vnfConfigurableProperties

    KeyValuePairs

    0..1

    “VnfInstance”中的“vnfConfigurableProperties”属性。

用户可以在 additionalParams 中设置以下参数。

  • additionalParams

    属性名称

    基数

    参数描述

    upgrade_type

    1

    文件更新操作方法的类型。指定 Blue-Green 或 Rolling update。

    lcm-operation-coordinate-old-vnf

    1

    模拟旧 VNF 的 CoordinateVNF 行为的脚本的文件路径。

    lcm-operation-coordinate-new-vnf

    1

    模拟新 VNF 的 CoordinateVNF 行为的脚本的文件路径。

    vdu_params

    0..N

    目标 VDU 的 VDU 信息以进行更新。对于 Kubernetes VIM,需要指定 vdu_params,对于 OpenStack VIM,则不需要。

    > vdu_id

    1

    要更新的目标 VDU 的 VDU 名称。

    > old_vnfc_param

    0..1

    旧 VNFC 连接信息。在 CoordinateVNF 操作中,用于应用程序配置到 VNFC 的 ssh 连接,需要此信息。

    >> cp_name

    1

    要更新的旧 VNFC 的连接点名称。

    >> username

    1

    要更新的旧 VNFC 的用户名。

    >> password

    1

    要更新的旧 VNFC 的密码。

    >> coordination_server_param

    0..1

    访问协调服务器的信息。在使用调用协调 API 的 coordinateVNF 脚本时,这是必需的。

    >>> endpoint

    1

    协调服务器的端点 URL。

    >>> access_info

    1

    访问协调服务器所需的配置文件(例如,用户名和密码)。

    > new_vnfc_param

    0..1

    新的 VNFC 连接信息。在 CoordinateVNF 操作中,用于应用程序配置到 VNFC 的 ssh 连接,需要此信息。

    >> cp_name

    1

    要更新的新 VNFC 的连接点名称。

    >> username

    1

    要更新的新 VNFC 的用户名。

    >> password

    1

    要更新的新 VNFC 的密码。

    >> coordination_server_param

    0..1

    访问协调服务器的信息。在使用调用协调 API 的 coordinateVNF 脚本时,这是必需的。

    >>> endpoint

    1

    协调服务器的端点 URL。

    >>> access_info

    1

    访问协调服务器所需的配置文件(例如,用户名和密码)。

    external_lb_param

    0..1

    需要进行配置更改的负载均衡器信息。仅适用于 OpenStack VIM 的 Blue-Green 部署过程。

    > ip_address

    1

    负载均衡器服务器的 IP 地址。

    > username

    1

    负载均衡器服务器的用户名。

    > password

    1

    负载均衡器服务器的密码。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

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

工作项

  • 添加包含新的 coordinate VNF 脚本的新示例 VNF 包。

  • 添加新的功能测试。

  • 添加充当协调客户端的新实用程序函数。

依赖项

测试

将为使用新的示例 coordinateVNF 脚本进行滚动更新添加功能测试用例。

文档影响

将在用户手册中描述充当协调客户端的新实用程序函数。

参考资料