agent

包括 agent.py、agent_api.py、agent_device_driver.py agent_manager.py 等模块,实现 LBaaS 服务的 agent 部分。

agent.py

按照标准流程,启动了一个 LbaasAgentService 服务,主代码如下。

def main():
    cfg.CONF.register_opts(OPTS)
    cfg.CONF.register_opts(manager.OPTS)
    # import interface options just in case the driver uses namespaces
    cfg.CONF.register_opts(interface.OPTS)
    config.register_interface_driver_opts_helper(cfg.CONF)
    config.register_agent_state_opts_helper(cfg.CONF)
    config.register_root_helper(cfg.CONF)

    common_config.init(sys.argv[1:])
    config.setup_logging()

    mgr = manager.LbaasAgentManager(cfg.CONF)
    svc = LbaasAgentService(
        host=cfg.CONF.host,
        topic=topics.LOADBALANCER_AGENT,
        manager=mgr
    )
    service.launch(svc).wait()

其中,管理服务类为 agent_manager 中的 LbaasAgentManager 类。

LbaasAgentService 类是一个 rpc 服务类,定期执行管理服务类中的周期性任务。

class LbaasAgentService(n_rpc.Service):
    def start(self):
        super(LbaasAgentService, self).start()
        self.tg.add_timer(
            cfg.CONF.periodic_interval,
            self.manager.run_periodic_tasks,
            None,
            None
        )

agent_manager.py

主要就是定义了 LbaasAgentManager 类,继承自 n_rpc.RpcCallback 和 periodic_task.PeriodicTasks。

作为 agent 中的管理类。它实现了 LBaaS 中定义的各种操作 API,包括:

  • agent_updated

  • collect_stats

  • create_member

  • create_pool

  • create_pool_health_monitor

  • create_vip

  • delete_member

  • delete_pool

  • delete_pool_health_monitor

  • delete_vip

  • initialize_service_hook

  • periodic_resync

  • remove_orphans

  • sync_state

  • update_member

  • update_pool

  • update_pool_health_monitor

  • update_vip

    这些操作又是通过调用更下一层的 driver 来实现。

同时,它定义了一个 rpc api 调用成员,向 topics.LOADBALANCER_PLUGIN 主题发送消息。

self.plugin_rpc = agent_api.LbaasAgentApi(
            topics.LOADBALANCER_PLUGIN,
            self.context,
            self.conf.host
        )

agent_api.py

主要定义了 LbaasAgentApi 类,继承自 n_rpc.RpcProxy,也是一个典型的 RPC 代理类。

这个类在 LbaasAgentManager 类中使用,用来负责替 agent 向指定的主题发送消息,调用监听者的对应方法。主要包括:

  • get_logical_device

  • get_ready_devices

  • plug_vip_port

  • pool_deployed

  • pool_destroyed

  • unplug_vip_port

  • update_pool_stats

  • update_status

agent_device_driver.py

主要定义了 AgentDeviceDriver 类,是一个抽象类,抽象出来支持 LBaaS agent 所需要 API 的一个驱动类。这些 API 包括对 pool、member 等资源的 CRUD 等。

Last updated

Was this helpful?