支持在多 Conductor 环境下进行入网

https://blueprints.launchpad.net/tacker/+spec/support-multi-conductors-onboarding

在当前实现中,当使用 Tacker 作为 N-Act 集群时,入网流程无法正常工作。

本规范描述了通过多个 Tacker Conductor 管理 VNF 包的增强功能。

问题描述

在当前实现中,入网流程如下。

  • 当接收到 “PUT /vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content” 请求时。

    1. Tacker-server 接收 “PUT /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content” 请求。

    2. Tacker-server 将 DB 中的 onboardingState 更新为 “UPLOADING”。

    3. Tacker-server 将 CSAR 文件上传到后端存储。

    4. Tacker-server 发送一个 RPC 消息 从内容上传 VNF 包,其中 fanout=False

    5. 首先收到消息的 Tacker-conductor 将 CSAR 文件下载到其本地文件系统。

    6. Tacker-server 将 DB 中的 onboardingState 更新为 “ONBOARDED”。

流程的顺序如下。

../../_images/013.png
  • 当接收到 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} /package_content/upload_from_uri” 请求时。

    1. Tacker-server 接收 “POST /vnfpkgm/v1/vnf_packages/ {vnf_package_id}/package_content/upload_from_uri” 请求。

    2. Tacker-server 将 DB 中的 onboardingState 更新为 “UPLOADING”。

    3. Tacker-server 发送一个 RPC 消息 从 URI 上传 VNF 包,其中 fanout=False

    4. 首先收到消息的 Tacker-conductor 将 CSAR 文件上传到后端存储。

    5. 相同的 Tacker-conductor 将 CSAR 文件下载到其本地文件系统。

    6. 相同的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。

流程的顺序如下。

../../_images/021.png

注意

后端存储的配置在 [glance_store] 部分的 tacker.conf 中定义。例如,后端存储的类型通过 [glance_store] 中的 stores 进行配置。VNF 包的本地文件系统的配置在 [vnf_package] 部分的 tacker.conf 中定义。例如,VNF 包下载的路径通过 [vnf_package] 中的 vnf_package_csar_path 进行配置。

如果 Conductor 在多个节点上运行,只有首先收到入网请求的 Conductor 才能按照上述流程将其 CSAR 文件下载到其本地文件系统。但是,未收到请求的其他 Conductor 无法及时下载 CSAR 文件,因此这些 Conductor 无法进行实例化,因为它们无法引用 CSAR 文件。

考虑到用户希望使用外部存储,例如对象存储来存储 VNF 包,并使其可供多个 Conductor 共享,因此需要启用所有 Conductor 下载 CSAR 文件。

提议的变更

我们将启用 N-Act 集群中的所有 Conductor 在入网流程中下载 CSAR 文件。

VNF 包入网流程

我们将更改入网流程如下。

  • 当接收到 “PUT /vnfpkgm/v1/vnf_packages/{vnf_package_id}/ package_content” 请求时。

    1. Tacker-server 接收 “PUT /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content” 请求。

    2. Tacker-server 将 onboardingState 更新为 “UPLOADING”。

    3. Tacker-server 将 CSAR 文件上传到后端存储。

    4. Tacker-server 发送一个 RPC 消息 从内容上传 VNF ,其中 fanout=False 到 Tacker-conductor。

    5. 首先收到消息的 Tacker-conductor 发送一个 RPC 消息,以 fanout=True 向所有 Tacker-conductor(包括自身)下载 CSAR 文件。

    6. 收到消息的所有 Tacker-conductor 将 CSAR 文件下载到其本地文件系统并返回结果通过 RPC。

    7. 发送消息给所有 Tacker-conductor 的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。

../../_images/03.png
  • 当接收到 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/ package_content/upload_from_uri” 请求时。

    1. Tacker-server 接收 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} /package_content/upload_from_uri” 请求。

    2. Tacker-server 将 onboardingState 更新为 “UPLOADING”。

    3. Tacker-server 发送一个 RPC 消息 URI 上传 VNF ,其中 fanout=False

    4. 首先收到消息的 Tacker-conductor 将 CSAR 文件上传到后端存储。

    5. 相同的 Tacker-conductor 发送一个 RPC 消息,以 fanout=True 向所有 Tacker-conductor(包括自身)下载 CSAR 文件。

    6. 收到消息的所有 Tacker-conductor 将 CSAR 文件下载到其本地文件系统并返回结果通过 RPC。

    7. 发送消息给所有 Tacker-conductor 的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。

../../_images/04.png

注意

即使一个 Tacker-conductor 下载 CSAR 文件失败,onboardingState 也不会更新为 “ONBOARDED”。

VNF 包删除流程

我们将更改 VNF 包删除流程如下。

  • 当接收到 “DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}” 请求时。

    1. Tacker-server 接收 “DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}” 请求。

    2. Tacker-server 更新相关记录的删除标志为 1。

    3. Tacker-server 发送一个 RPC 消息 “Delete VNF Package”,其中 fanout=False

    4. 首先收到消息的 Tacker-conductor 从后端存储中删除文件。

    5. 相同的 Tacker-conductor 发送一个 RPC 消息,以 fanout=True 向所有 Tacker-conductor(包括自身)删除本地文件系统中的文件。

    6. 收到消息的所有 Tacker-conductor 从其本地文件系统中删除文件并返回结果通过 RPC。

../../_images/05.png

如果有一个 Tacker-conductor 新添加到集群,则应执行以下流程将其入网的 VNF 包下载到其本地文件系统。

  1. Tacker-conductor 获取状态为 ONBOARDED 的 VNF 包列表。

  2. Tacker-conductor 将 VNF 包下载到其本地文件系统。

注意

Tacker-conductor 在完成上述流程之前不得接收任何请求。

数据模型影响

VnfPackage 表中添加了 downloading 字段。该字段统计下载 VNF 包的 Conductor 数量,以确定是否所有 Conductor 都能下载。

  • :VnfPackage

    名称

    类型

    downloading

    int

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Masaki Oyama <ma-ooyama@kddi.com>

其他贡献者

Hitomi Koba <hi-koba@kddi.com>

Yukihiro Kinjo <yu-kinjou@kddi.com>

Xu Hongjin <ho-xu@kddi.com>

工作项

  • 实现入网功能

  • 添加单元测试

  • 添加功能测试

依赖项

测试

将添加单元测试和功能测试。

文档影响

参考资料