三言兩語之neutron-openvswitch-agent服務

序言

本次將三言兩語對openstack中ovs相關的二層網絡服務泛泛而談,以提供整體而不失真的認知。

主題

1.neutron-server的作用

2.neutron-openvswitch-agent的作用

3.neutron-server跟neutron-openvswitch-agent之間的關係及基本運作

正文

1.neutron-server
衆所周知,neutron是openstack中一個很重的的服務組件,用於提供虛擬化的網絡服務。因此,理解openstack的網絡功能是如何從“肉眼可見的網線網橋”轉型成“隱形”的服務支撐一臺臺肉眼不可見的虛擬化計算機(virtual machine)的通信對於理解網絡虛擬化很有必要。
neutron-server,從名字上可以認爲,它是提供neutron網絡服務的服務器。任何有網絡需求的個體發出的請求都會發給這樣一個server進行網絡請求。在openstack中,neutron-server變成了接受請求、彙總請求、調度請求的老闆。有請求,必有響應,但實際的網絡請求並不由neutron-server全權完成(沒有會自己擼袖子寫代碼的管理啵)。因此,在neutron服務中,真正對各種網絡請求做出動作響應的是各種agents。而本次要侃的openvswitch-agent便是使用最多的二層agent。(如果知道二層服務具體含義的,可以參考OSI七層模型深入理解一下)

2.neutron-openvswitch-agent
在介紹agent之前,不妨介紹一下底層實際提供二層通信服務的“勞苦百姓”–openvswitch(ovs)。如其名,這是個switch(交換機),不同於家裏機房看到的鐵殼子大塊頭的設備,這是個開源(open)的虛擬(virtual)的交換機(軟件)——在無形的虛擬機世界裏,它扮演無形的交換機,連接虛擬機讓彼此通信;在實際真是連接網絡的世界裏,它以軟件形式綁定實際存在的網卡,表現爲網線之間、設備之間真實存在的網絡。
而像openstack這類整體概念很強的平臺,不可能提供一個網絡服務還需要人爲手動全裝配置一個其他的開源軟件來實現二層網絡的通信,因此,neutron項目組寫出來這麼個neutron-openvswitch-agent的程序對ovs進行管理(增加刪除虛擬端口、創建vlan、決定轉發策略等等)。因此,neutron-server –> neutron-openvswitch –> ovs儼然成了“老闆–經理–碼農”的角色。

3.server跟agent之間的關係及運作方式
從上述,粗略畫出如下結構圖:
這裏寫圖片描述
server對於獲得請求,通過跟ovs-agent消息交互對ovs進行配置,並將相關信息(虛接口、網段等)寫入neutronDB數據庫中。
顯然這麼粗淺的東西,說了是沒有意思的。下面結合很少的代碼部分介紹兩者之間的運作配合。
不妨設想一下,neutron的二層服務啓動時,要對ovs進行配置啥的,起碼要知道人家好好的ovs上已經有了啥、還缺啥、要補充啥信息——因此,設計了一個叫ovs-agent初始化的動作。
(盜一張香港會議的圖)
這裏寫圖片描述
其他暫且不用深入那麼細節,直接理解思路7、9——初始化之後agent會向server請求已有的網絡設備(device就可以簡單理解爲配置的虛擬端口啦)的詳細信息來對ovs進行管理,之後對ovs上的device信息提交給server進行更新。(有興趣研究ovs-agent初始化獲取設備信息的同學可以參考neutron-server端代碼:/usr/lib/python2.7/site-packages/neutron/plugins/ml2/rpc.py中get_devices_details()方法)
在ovs-agent啓動初始化之後,在neutron-server跟ovs-agent頻繁交互message週期檢測ovs上的端口狀態(可以在ovs-agent端tail -f /var/log/neutron/openvswitch-agent.log看到週期交互的相關細節)。在週期檢查的背後,實際上是ovs-agent代碼進入主函數之後持續進行rpc_loop()循環狀態檢查、更新(有興趣可以參考代碼/usr/lib/python2.7/site-packages/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py中主函數rpc_loop()部分)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章