我們在 Neutron Server 小節學習到 Core Plugin,其功能是維護數據庫中 network, subnet 和 port 的狀態,並負責調用相應的 agent 在 network provider 上執行相關操作,比如創建 network。
上一節也介紹了兩個 Core Plugin:linux bridge plugin 和 open vswitch plugin。
本節將詳細討論更重要的 ML2 Core Plugin。
Moduler Layer 2(ML2)是 Neutron 在 Havana 版本實現的一個新的 core plugin,用於替代原有的 linux bridge plugin 和 open vswitch plugin。
傳統 core plugin 的問題
之所以要開發 ML2,主要是因為傳統 core plugin 存在兩個突出的問題。
問題1:無法同時使用多種 network provider
Core plugin 負責管理和維護 Neutron 的 network, subnet 和 port 的狀態信息,這些信息是全局的,只需要也只能由一個 core plugin 管理。
只使用一個 core plugin 本身沒有問題。但問題在於傳統的 core plugin 與 core plugin agent 是一一對應的。也就是說,如果選擇了 linux bridge plugin,那么 linux bridge agent 將是唯一選擇,就必須在 OpenStack 的所有節點上使用 linux bridge 作為虛擬交換機(即 network provider)。
同樣的,如果選擇 open vswitch plugin, 所有節點上只能使用 open vswitch,而不能使用其他的 network provider。
問題2:開發新的 core plugin 工作量大
所有傳統的 core plugin 都需要編寫大量重復和類似的數據庫訪問的代碼,大大增加了 plugin 開發和維護的工作量。
ML2 能解決傳統 core plugin 的問題
ML2 作為新一代的 core plugin,提供了一個框架,允許在 OpenStack 網絡中同時使用多種 Layer 2 網絡技術,不同的節點可以使用不同的網絡實現機制。
如上圖所示,采用 ML2 plugin 后,可以在不同節點上分別部署 linux bridge agent, open vswitch agent, hyper-v agent 以及其他第三方 agent。
ML2 不但支持異構部署方案,同時能夠與現有的 agent 無縫集成:以前用的 agent 不需要變,只需要將 Neutron server 上的傳統 core plugin 替換為 ML2。
有了 ML2,要支持新的 network provider 就變得簡單多了:無需從頭開發 core plugin,只需要開發相應的 mechanism driver,大大減少了要編寫和維護的代碼。
現在我們已經了解了 ML2 的必要性,下一節將學習 ML2 的架構。