支持在多 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” 请求时。
Tacker-server 接收 “PUT /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content” 请求。
Tacker-server 将 DB 中的 onboardingState 更新为 “UPLOADING”。
Tacker-server 将 CSAR 文件上传到后端存储。
Tacker-server 发送一个 RPC 消息 从内容上传 VNF 包,其中
fanout=False首先收到消息的 Tacker-conductor 将 CSAR 文件下载到其本地文件系统。
Tacker-server 将 DB 中的 onboardingState 更新为 “ONBOARDED”。
流程的顺序如下。
当接收到 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} /package_content/upload_from_uri” 请求时。
Tacker-server 接收 “POST /vnfpkgm/v1/vnf_packages/ {vnf_package_id}/package_content/upload_from_uri” 请求。
Tacker-server 将 DB 中的 onboardingState 更新为 “UPLOADING”。
Tacker-server 发送一个 RPC 消息 从 URI 上传 VNF 包,其中
fanout=False。首先收到消息的 Tacker-conductor 将 CSAR 文件上传到后端存储。
相同的 Tacker-conductor 将 CSAR 文件下载到其本地文件系统。
相同的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。
流程的顺序如下。
注意
后端存储的配置在 [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” 请求时。
Tacker-server 接收 “PUT /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content” 请求。
Tacker-server 将 onboardingState 更新为 “UPLOADING”。
Tacker-server 将 CSAR 文件上传到后端存储。
Tacker-server 发送一个 RPC 消息
从内容上传 VNF 包,其中fanout=False到 Tacker-conductor。首先收到消息的 Tacker-conductor 发送一个 RPC 消息,以
fanout=True向所有 Tacker-conductor(包括自身)下载 CSAR 文件。收到消息的所有 Tacker-conductor 将 CSAR 文件下载到其本地文件系统并返回结果通过 RPC。
发送消息给所有 Tacker-conductor 的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。
当接收到 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/ package_content/upload_from_uri” 请求时。
Tacker-server 接收 “POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} /package_content/upload_from_uri” 请求。
Tacker-server 将 onboardingState 更新为 “UPLOADING”。
Tacker-server 发送一个 RPC 消息
从 URI 上传 VNF 包,其中fanout=False首先收到消息的 Tacker-conductor 将 CSAR 文件上传到后端存储。
相同的 Tacker-conductor 发送一个 RPC 消息,以
fanout=True向所有 Tacker-conductor(包括自身)下载 CSAR 文件。收到消息的所有 Tacker-conductor 将 CSAR 文件下载到其本地文件系统并返回结果通过 RPC。
发送消息给所有 Tacker-conductor 的 Tacker-conductor 将 onboardingState 更新为 “ONBOARDED”。
注意
即使一个 Tacker-conductor 下载 CSAR 文件失败,onboardingState 也不会更新为 “ONBOARDED”。
VNF 包删除流程¶
我们将更改 VNF 包删除流程如下。
当接收到 “DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}” 请求时。
Tacker-server 接收 “DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}” 请求。
Tacker-server 更新相关记录的删除标志为 1。
Tacker-server 发送一个 RPC 消息 “Delete VNF Package”,其中
fanout=False。首先收到消息的 Tacker-conductor 从后端存储中删除文件。
相同的 Tacker-conductor 发送一个 RPC 消息,以
fanout=True向所有 Tacker-conductor(包括自身)删除本地文件系统中的文件。收到消息的所有 Tacker-conductor 从其本地文件系统中删除文件并返回结果通过 RPC。
如果有一个 Tacker-conductor 新添加到集群,则应执行以下流程将其入网的 VNF 包下载到其本地文件系统。
Tacker-conductor 获取状态为 ONBOARDED 的 VNF 包列表。
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>
工作项¶
实现入网功能
添加单元测试
添加功能测试
依赖项¶
无
测试¶
将添加单元测试和功能测试。
文档影响¶
无
参考资料¶
无