Liberty版本Neutron LBaas学习

Liberty版本Neutron LBaas学习架构 模块示意图 这里参考的是 lbaasv2 的 driver neutron lbaas conf 中的 service provider 即为 lbaasv2 的 driver service provider LOADBALANCER Haproxy neutron lbaas drivers haproxy plugin driver

大家好,我是讯享网,很高兴认识大家。

架构

模块示意图


讯享网
这里参考的是lbaasv2的driver,neutron_lbaas.conf中的service_provider即为lbaasv2的driver:
service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default

neutron.conf中的service_plugins表示了lbaasv2的plugin:
lbaasv2 = neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPluginv2

plugin

neutron_lbaas.services.loadbalancer.plugin.py

class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2): def __init__(self): """Initialization for the loadbalancer service plugin.""" self.db = ldbv2.LoadBalancerPluginDbv2()

讯享网

driver

neutron_lbaas.drivers.haproxy.plugin_driver.py

讯享网class HaproxyOnHostPluginDriver(agent_driver_base.AgentDriverBase): device_driver = namespace_driver.DRIVER_NAME

agent rpc(plugin向agent发送)

neutron_lbaas.drivers.common.agent_driver_base.py
class LoadBalancerAgentApi
def __init__

plugin rpc(agent向plugin发送)

neutron_lbaas.agent.agent_api.py
class LbaasAgentApi
def __init__

agent 侧的回调

neutron_lbaas.agent.agent_manager.py
class LbaasAgentManager

plugin 侧的回调

neutron_lbaas.drivers.common.agent_driver_base.py
class AgentDriverBase
def _set_callbacks_on_plugin

neutron_lbaas.drivers.common.agent_callbacks.py
class LoadBalancerCallbacks

agent入口函数

neutron_lbaas.agent.agent.py
def main

db处理

neutron_lbaas.db.loadbalancer.loadbalancer_dbv2.py
class LoadBalancerPluginDbv2

流程示例,创建一个Pool

plugin部分

首先进入一个同步流程,即创建pool的数据库信息。

plugin入口

neutron_lbaas.services.loadbalancer.plugin.py

class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2): def create_pool(self, context, pool): try: # 创建pool的数据库信息,并绑定listener db_pool = self.db.create_pool_and_add_to_listener(context, pool, listener_id) except Exception as exc: self.db.update_loadbalancer_provisioning_status( context, db_listener.loadbalancer.id) raise exc # 根据创建lb时的provider来选择driver driver = self._get_driver_for_loadbalancer( context, db_pool.listener.loadbalancer_id) # 将调用driver的pool.create方法,进入driver的父类 # AgentDriverBase self._call_driver_operation(context, driver.pool.create, db_pool) # 同步返回了pool的数据库信息 return self.db.get_pool(context, db_pool.id).to_api_dict()
plugin的api及rpc处理

neutron_lbaas.drivers.common.agent_driver_base.py

讯享网class AgentDriverBase(driver_base.LoadBalancerBaseDriver): # name of device driver that should be used by the agent; # vendor specific plugin drivers must override it; device_driver = None def __init__(self, plugin): super(AgentDriverBase, self).__init__(plugin) # pool的管理类 self.pool = PoolManager(self) # agent的rpc处理类 self.agent_rpc = LoadBalancerAgentApi(lb_const.LOADBALANCER_AGENTV2) # rpc的回调 self._set_callbacks_on_plugin() # Setting this on the db because the plugin no longer inherts from # database classes, the db does. self.plugin.db.agent_notifiers.update( {lb_const.AGENT_TYPE_LOADBALANCERV2: self.agent_rpc}) # agent的调度driver lb_sched_driver = provconf.get_provider_driver_class( cfg.CONF.loadbalancer_scheduler_driver, LB_SCHEDULE
小讯
上一篇 2025-04-05 20:46
下一篇 2025-03-21 09:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/49032.html