添加用于协调的示例 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 | | |
+--------------------+ +-----------------------------------------------+
滚动更新操作序列
客户端将 ChangeCurrentVNFPackage 请求发送到“个人 VNF 实例”资源。
Tacker-server 调用 Tacker-conductor,然后 Tacker-conductor 获取上载的 VNF 包并调用 VnfLcmDriver。
VnfLcmDriver 向 InfraDriver 发送请求,然后 InfraDriver 获取上载的 VNF 包并调用 VnfLcmDriver。
InfraDriver 向 VIM 发送请求以获取要更新的堆栈资源。
InfraDriver 向 VIM 发送请求以更新堆栈。
InfraDriver 运行 CoordinateVNF 脚本。
CoordinateVNF 脚本向 VNF 发送请求以协调 VNF。
CoordinateVNF 脚本将协调请求发送到外部组件。外部组件的端点 URL 从 ChangeCurrentVNFPackage 请求获得。从 Tacker 获得的目标 VNFC 作为 LcmCoordRequest 中的 inputParams 指定(例如,通过 vnfcInstanceId 指定)。接收到协调响应后的过程取决于同步模式还是异步模式。请参阅下面的注释。
对每个 VNFC 重复步骤 5 到 8。
注意
数据模型影响¶
无
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
负载均衡器服务器的密码。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
工作项¶
添加包含新的 coordinate VNF 脚本的新示例 VNF 包。
添加新的功能测试。
添加充当协调客户端的新实用程序函数。
依赖项¶
无
测试¶
将为使用新的示例 coordinateVNF 脚本进行滚动更新添加功能测试用例。
文档影响¶
将在用户手册中描述充当协调客户端的新实用程序函数。