Tag Archives: Manila

最近在研究 OpenStack Manila 的代码,总结成这篇文章,介绍了 Manila Share 主要代码和设计,重点在其网络的实现上。

Manila 网络模块

tags: Manila Network


前言

Manila 是目前比较完善的一个 OpenStack PaaS 服务组件,它需要借助 Neutron 来完成其管理和网络连接,其网络架构主要如下图,本文会主要介绍 Manila 的网络组件代码,而不是其网络架构。

Manila 网络逻辑架构

对于一个类似的 PaaS 项目,其主要需求是在 Neutron 上启动属于自己的 Service Network 和 Service Port,项目的 Agent 可以通过 Service Port SSH 连接到处于 Service Network 的 Service VM。

启动

服务的启动

先看 Manila 的启动过程。Manila share 的启动没有像 Neutron 的 agent 一样直接运行特定的main()函数,而是在manila/bin/manila-service通过service完成实例化,实例化的类并不是一个hard-code的类,而是可以通过share_manager这个配置修改的,其运行过程如下:

#bin/manila-share.py
       server = service.Service.create(binary='manila-share')

#manila/service.py
class Service(object):
   def create(cls, host=None, binary=None, topic=None, manager=None,
              report_interval=None, periodic_interval=None,
              periodic_fuzzy_delay=None, service_name=None):
       if not topic:
           topic = binary
       if not manager:
           subtopic = topic.rpartition('manila-')[2]
           manager = CONF.get('%s_manager' % subtopic, None)

#manila/common/config.py
   cfg.StrOpt('share_manager',
              default='manila.share.manager.ShareManager',
              help='Full class name for the share manager.'),

Driver 的加载

实例化share_manager时,首先获得配置文件对象,然后加载 driver,默认为GenericShareDriver

Read More →