思科網絡插件Contiv (二) Master實現原理

Contiv網絡結構

Contiv網絡結構

上圖爲Contiv的網絡模型,大體上可分爲MasterHost Agent兩個組件,其中Master負責管理所有網絡資源 (IP地址分配\租戶管理\策略管理等等)

Contiv-Master 組件

Distributed KV Store

Distributed KV Store, 即分佈式鍵值存儲, 它是跨主機容器網絡的重要組成部分, 各個宿主機通過它進行配置數據和運行數據的同步, Contiv也不例外. Contiv提供EtcdConsul兩種實現. 無論是哪一種, 信息都是以Key-Value Pair的形式存儲,並且Key都是 /contiv.io/ 開頭的形式. 比如 /contiv.io/state/xxx 記錄配置信息, /contiv.io/oper/xxx 記錄運行信息

HA

爲了實現HA(高可用), Master 通常在多臺宿主機上運行運行多個進程實例, 但同一時刻, 有且只有一個宿主機上的進程以 Leader 角色運行, 其餘都以 Follow 角色運行. Master進程啓動後, 首先以Follow 角色運行, 並且嘗試去獲取分佈式數據庫(Distributed KV Store)中的一把 Leader Lock (路徑爲/contiv.io/lock/netmaster/leader), 若能獲取到, 則將角色切換爲 Leader , 若不能獲取到,則還是以 Follow 角色運行.

REST Server

Service表示Master對外提供的服務,Master進程啓動後, 會將自身運行的Service信息(IP地址 \ 端口號 \ 角色)寫入分佈式數據庫,這個過程稱爲 Service 註冊。在當前版本中Master 會註冊 netmasternetmaster.rpc 兩個服務,前者開放9999端口供netctl 控制整個系統,後者開放9001端口供OpenFlow控制器使用。

Policy Engine

Policy Engine用來管理控制容器之間的網絡流量隔離\優先級策略. 比如設置容器A禁止除了容器B以外的其他容器訪問XXXX其端口. MasterREST Server/api/v1/policys/{keys}/api/v1/rules/{keys} 都設置了相應的Handler, 當用戶通過netctl 的命令添加或刪除策略時, Master會調用對應的Handler, 最終通過設置 iptable 防火牆完成既定功能.

Contiv-Master 源碼分析

master daemon 初始化

Master進程的入口在 netmaster/main.go, 它主要進行命令行參數的解析, 將解析的結果放入daemon.MasterDaemon 結構, 之後調用 MasterDaemonInit() 方法初始化進程
1

運行netmaster狀態機

contiv-2
接着, Master進程啓動狀態機, 它只有兩個狀態,即前面提到的Master進程的角色, 啓動之初都是以 Follower 角色運行, 若是能獲得 Leader 鎖, 則調用**becomeLeader()**進入 Leader 狀態

Leader 運行

contiv-3

  • Leader角色運行時, Master進程首先創建一個APIController, 它創建REST Server提供給netctl , 設置各個URL對應的相應的處理函數.
  • Service 註冊, 註冊 netmasternetmaster.rpc 服務
  • 初始化策略管理器, 這一步主要是從數據庫中恢復各個Policy
  • 設置面向pluginServer, 例如, 當plugin要向Master申請IP時,就會向"plugin/allocAddress"發送請求.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章