使用 Mistral 的可扩展 VNF 监控策略

https://blueprints.launchpad.net/tacker/+spec/mistral-monitor-policy

问题描述

目前,Tacker 服务器托管一个本地变量来保持 VNFs 的监控,并使用本地线程进行监控。这导致 tacker 服务器无法扩展,并影响 API 性能

  • 如果有很多需要监控的 VNFs,tacker 服务器将不得不运行很多线程来监控它们,这将影响 tacker 服务器的 API 功能。

  • 如果 tacker 服务器重启,监控线程将不会启动。

  • 由于这使得 tacker 服务器具有状态,因此无法运行多个 tacker 服务器。

提议的变更

asciiflow

                             +---------------------+
                             |  Mistral workflow   |
                     +-(1)---> VNF monitor action  |
+---------------+    |       |                     |
| Tacker server +----+       +--------^------------+
+-----+---------+                     |
      |      |                        |
      |      |                        |
      |      |                        |
      |      |                        |
      |      |               +--------v----+
      |      |----(3)-------->  MSG Queue  <----+
      |                      +-------------+    (2)
      |                                         |
      |                                 +-------v----------+
      |                                 |     Tacker       |
      |                                 | conductor server |
      |       +------+-----+     +------+                  |
      |       |            |     |      +------------------+
      +-------> Tacker DB  <-----+
              |            |
              +------------+
  1. 由于 Mistral 是 tacker 系统的一个组成部分,因此可以使用一个长期运行的 Mistral 工作流操作来执行此任务。Tacker 服务器将生成一个 VNF 监控工作流,并在配置了监控策略的 VNF 存在时执行它。一旦被监控的目标 VDU 被移除,工作流和执行将被移除。

  2. 监控操作无法直接访问 tacker 数据库,因此我们引入了一个 Tacker-conductor 服务器来为 mistral 操作执行数据库访问。

  3. 即使删除了工作流执行,Mistral 也不会停止长期运行的操作。因此,为操作退出制定了一种机制。当工作流被移除时,VNFM 插件将通过 MSG 队列杀死 mistral 操作。

Mistral 操作将使用 RPC 与 conductor 服务器通信。为了处理监控的可扩展性,将部署多个 conductors。

mistral 操作通过以下接口 VNFPolicyActionRPC 与 conductor 通信

class VNFPolicyActionRPC(object)
   # execute policy action
   def execute_policy_action(context, vnf, monitor_return_value,
                             policy_actions, action_id):
       # The response message containing the operation result
       # the status should be the passed in by request or 'bad_action'
       # if the action is not the wanted action.
       status = rpc call conductor
       return status

在 VNF 更改或删除后,VNFM 插件通过以下接口 VNFPolicyMonitorRPC 异步地杀死 mistral 操作

class VNFPolicyMonitorRPC(object)
   # kill the mistral action job
   def kill(context, action_id):
      pass

   # update the mistral action job
   def update(context, action_id, parameter):
      pass

上述接口中的 update 方法用于通知策略监控被监控 vnf 发生了变化,例如 VNF 被扩展,并且被重新启动。

创建 VNF 的序列图

../../_images/019.png

监控策略分为两部分:策略监控和策略操作。策略监控,例如 ping 和 http_ping,实现为 mistral 任务操作。策略操作将在 tacker conductor 中运行。

具有监控策略的每个 VNF 将生成一个工作流,并将其作为 VNF 实例的元信息保存,以便对其进行管理。

../../_images/025.png

一旦工作流启动,mistral 工作流操作就会运行。该操作将根据监控策略执行其工作。当需要策略操作时,监控操作将调用 conductor 的 execute_policy_action RPC 方法。

conductor 中的 execute_policy_action 方法将调用策略操作,这将执行实际工作,例如重新启动、记录等。

如果策略操作需要更新 vnf_policy_monitor,它将通知 vnf_policy_monitor 更改。

../../_images/032.png

如果 conductor 发现该操作已过时,它将返回 bad_action 给 vnf_policy_monitor,然后 vnf_policy_monitor 将退出。

更新 VNF 的序列图

由于 VNF 更新只是用于配置 VDUs,因此不需要此操作执行工作流操作。

删除 VNF 的序列图

../../_images/041.png

扩展 VNF 的序列图

../../_images/051.png

备选方案

数据模型影响

VNF 数据库将被扩展,以包含一个 Mistral 操作 ID 列来记录当前操作 ID。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他开发人员影响

开发人员影响

实现

负责人

里程碑

完成目标里程碑

rocky-1

工作项

  • 实现 VNF 监控策略的工作流版本

  • 单元测试

依赖项

  • rabbitmq

  • oslo message

测试

可以在这些场景中测试此功能。

测试 VNF 实例化场景

  • 设置 tacker 系统,这将启动 tacker conductor 服务器

  • 在 VDU 属性下载入具有监控策略的 VNFD 并启动 VNF

  • 检查 VNF 监控策略工作流是否已设置,并且 ping 操作正在 mistral executor 组件上运行(以 ping 策略为例)

  • 使 VDU VM 无法访问,以检查相关策略操作是否会被调用(以重新启动操作为例)

  • 检查 mistral 中的策略监控是否会监控新的管理 IP

测试 VNF 删除场景

  • 在 VDU 属性下载入具有监控策略的 VNFD

  • 检查 VNF 监控策略工作流是否已设置,并且 ping 操作正在 mistral executor 组件上运行(以 ping 策略为例)

  • 检查 VNF 是否标记为活动状态

  • 删除 VNF 并检查是否删除了 mistral 相关内容

测试扩展 VNF 的行为

  • 在 VDU 属性下下载入具有监控策略的 VNFD 并扩展策略并启动 VNF

  • 扩展 VNF 并检查策略监控是否正在 ping 多个管理 IP

  • 缩小 VNF 并检查策略监控是否未 ping 移除的 IP。

文档影响

  • 更改 tacker 部署文档

  • 添加有关在 tacker 服务器中执行操作的 mistral 工作流方式的文档

参考资料