菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
333
0

ovs-agent流程

原创
05/13 14:22
阅读数 67703

1. 代码流程分析

neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:main()  
    plugin = OVSNeutronAgent(**agent_config)  
        self.setup_integration_br() #创建br-int集成网桥并初始化流表
        self.setup_rpc()  #建立一些agent与server侧常用的rpc通道
            self.plugin_rpc = OVSPluginApi(topics.PLUGIN) #如get_device_details/update_device_down/update_device_up/tunnel_sync
self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN) #查询安全组信息 self.state_rpc
= agent_rpc.PluginReportStateAPI(topics.PLUGIN) #处理report_state self.connection = agent_rpc.create_consumers(...)
          #创建以下消费者们:port update/delete, tunnel update/delete, security_group update, dvr update, l2population update host heartbeat
= loopingcall.FixedIntervalLoopingCall(self._report_state) #周期任务上报agent状态,如br-int上有多少device,agent当前时间等 self.setup_physical_bridges(bridge_mappings)
          #处理物理网桥与br-int的关联(采用veth对/path对),如果物理网桥不存在则直接退出agent,并初始化流表 self.setup_tunnel_br()/ self.reset_tunnel_br(tun_br)
          #创建br-tun,与br-int关联(采用patch对),并初始化流表
          #为啥要分开处理? self.setup_ancillary_bridges(integ_br, tun_br) # 识别出本host上除了br-int、br-tun和物理网桥之外的网桥,如br-ex self.sg_agent
= OVSSecurityGroupAgent(...) # 用于处理安全组
self.connection.consume_in_threads() # 对以上consume开启各个线程监听并处理 plugin.daemon_loop() self.rpc_loop()   tunnel_sync() #在agent首次启动或有异常发生时,会进行tunnel同步。
              #上报本agent的tunnel ip到neutron server DB中,neutron server同时发送关于该tunnel ip的消息(tunnel_update)给其他agents
              #如果没有开启l2pop,则在本agent上会在br-tun上创建tunnel port,其他agents也会创建相应的remote tunnel port,并创建相应流表
       port_info = self.scan_ports()  #周期检测br-int上的端口变化
sync = self.process_network_ports(port_info) #处理增加或删除的port

 neutron-server和neutron-openvswitch-agent的消息队列如下:

neutron-server可能会发生上述几种消息广播给neutron-openvswitch-agent。openvswitch agent会先看一下端口是否在本地,如果在本地则进行对应动作。

 

2. nova与neutron-openvswitch-agent的交互

 

首先boot虚机时,nova-compute发消息给neutron-server请求创建port。之后,在driver里面在br-int上建立port后,neutron-openvswitch-port循环检测br-int会发现新增端口,对其设定合适的openflow规则以及localvlan,最后将port状态设置为ACTIVE。

 

附:ovs启动流程图(http://bingotree.cn/wp-content/uploads/2015/05/ovs-agent%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B1.png

发表评论

0/200
333 点赞
0 评论
收藏