支持 v2 LCM API 中的 CNF 回滚

https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-error-handling

本规范增强了 v2 版本的回滚 API,以支持 CNF。

问题描述

Yoga 版本支持 ETSI NFV SOL002 v3.3.1 [1] 和 SOL003 v3.3.1 [2] 中定义的 VNF 生命周期管理 (LCM) 操作。它还支持使用 v2 API(例如实例化 API、终止 API 和更改当前 VNF 包 API)进行 CNF 生命周期管理。

然而,v2 回滚 API 尚未完全支持 CNF LCM。在 v2 LCM API 中支持 CNF 使 Tacker 成为更强大的通用 VNFM。

提议的变更

本规范增强了以下 API 以支持 CNF。

  • 回滚 VNF 任务 (POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback)

Yoga 版本已经支持了针对变更当前 VNF 包的回滚 v2。此外,v2 LCM API 已经支持了 CNF 的修改 VNF 信息,因为这与 VNF 的通用处理方式相同。因此,本规范建议支持以下 API 的 v2 CNF 回滚:

  • 实例化 VNF

  • 扩展 VNF

注意

由于相关的标准规范尚未由 ETSI NFV 定义,因此 CNF 的更改外部 VNF 连接及其回滚不受支持。

实例化回滚

除了 InfraDriver(KubernetesDriver)处理之外,当前实现没有变化。

../../_images/0157.png

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

先决条件:VNF 生命周期管理操作实例处于“FAILED_TEMP”状态。

  1. 客户端向“回滚操作”资源发送一个空的 POST 请求。

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

  3. VNFM 向 Kubernetes 发送 Read 请求以检查资源是否存在。

  4. 如果资源是由失败的实例化操作创建的,VNFM 向 Kubernetes 发送 Delete 请求以删除这些资源。

  5. VNFM 向 Kubernetes 发送 Read 请求以检查资源是否已被删除。

  6. 在成功回滚后,VNFM 向端点(例如客户端)发送带有“ROLLED_BACK”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。

  7. 在回滚失败后,VNFM 向端点(例如客户端)发送带有“FAILED_TEMP”状态的 VNF 生命周期管理操作实例通知,以指示操作的中间错误(回滚失败)。

后置条件:VNF 生命周期管理操作实例处于以下状态之一:“FAILED_TEMP”、“ROLLED_BACK”。

KubernetesDriver 调用以下 API 以删除资源并检查其状态:

API 组

类型

API 方法

ApiregistrationV1Api

读取

read_<kind>

删除

delete_<kind>

AppsV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

AutoscalingV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

BatchV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

CoordinationV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

CoreV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

读取

read_<kind>

删除

delete_<kind>

NetworkingV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

RbacAuthorizationV1Api

读取

read_namespaced_<kind>

删除

delete_namespaced_<kind>

读取

read_<kind>

删除

delete_<kind>

SchedulingV1Api

读取

read_<kind>

删除

delete_<kind>

StorageV1Api

读取

read_<kind>

删除

delete_<kind>

Read API 的参数是 name。此外,某些 API 还需要 namespace

Delete API 的参数是 namebody。此外,某些 API 还需要 namespace。在回滚操作的情况下,body 不进行设置。

扩展回滚

除了 InfraDriver 处理之外,当前实现没有变化。

../../_images/0234.png

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

先决条件:VNF 生命周期管理操作实例处于“FAILED_TEMP”状态。

  1. 客户端向“回滚操作”资源发送一个空的 POST 请求。

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

  3. VNFM 向 Kubernetes 发送 Read 请求以检查资源的副本数。

  4. 如果副本数已被失败的扩展操作更新,VNFM 向 Kubernetes 发送 Update 请求以将副本数更新为扩展之前的数量。

  5. VNFM 向 Kubernetes 发送 Read 请求以检查资源是否已被删除。

  6. 在成功回滚后,VNFM 向端点(例如客户端)发送带有“ROLLED_BACK”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。

  7. 在回滚失败后,VNFM 向端点(例如客户端)发送带有“FAILED_TEMP”状态的 VNF 生命周期管理操作实例通知,以指示操作的中间错误(回滚失败)。

后置条件:VNF 生命周期管理操作实例处于以下状态之一:“FAILED_TEMP”、“ROLLED_BACK”。

注意

使用 OpenStack VIM 进行扩展的 v2 VNF 回滚会删除扩展操作添加的资源。但是,使用 Kubernetes VIM 进行扩展的 v2 CNF 回滚无法指定删除的 VNFC,因为 Kubernetes 的功能无法控制删除的顺序。这对于 v2 CNF 缩减也是一个限制。

KubernetesDriver 调用以下 API 以获取目标资源的当前副本数,更新副本数并检查资源状态:

API 组

类型

API 方法

AppsV1Api

读取

read_namespaced_<kind>

更新

patch_namespaced_<kind>_scale

Read API 的参数是 namenamespace

Update API 的参数是 namenamespacebody。body 设置为 Read API 返回的值的“spec.replicas”的更新值。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

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

工作项

  • Implement KubernetesDriver 进程在 Tacker-conductor 上运行。

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

  • 更新 Tacker 用户指南。

依赖项

Tacker SPEC:支持 ETSI NFV-SOL_v3 错误处理操作 [3]

测试

将添加用于使用 Kubernetes VIM 进行 v2 CNF 回滚操作的单元和功能测试用例。

文档影响

将在 Tacker 用户指南中添加关于 v2 CNF 回滚操作的描述。

参考资料