云舒網絡:Rancher架構深度剖析

云舒網絡 8年前發布 | 24K 次閱讀 Rancher

前言:

Rancher所有的服務都是運行在Container中,這給我們部署Rancher集群提供了非常大的便利, 不會像剛入門OpenStack那樣需要手動安裝每個組件讓人心力憔悴。但是手動部署的確讓我們知曉了一些其中內涵; Rancher給我們省去了部署的麻煩,但是作為技術人員我們若要去holdRancher,那么我們必須對它的架構了如指掌。

注:

本文初寫時Rancher還沒有Release正式版,所以架構每次小升級可能都會有些許變動, 需要聲明,下面內容已跟蹤至 Rancher-v0.59.0 版本。

 本文來源:http://www.cloudsoar.com/about/BlogNews/content/0/141/v1.1/

整體架構分析

 

Rancher-server是Rancher的控制節點,負責管理接入的各個host節點,里面運行著rancher的核心組件Cattle Rancher幾乎全部的服務都是用Golang寫的,而只有這個Cattle組件是Java寫的。

 

關于Cattle組件為什么是Java寫的,這里插播一段小故事。Rancher的創始人梁勝博士我們都知道是CloudStack創始人, CloudStack我們都知道是Java寫的。梁博士早期在Sun工作搞過JVM,所以用Java來做CloudStack也是技術繼承順理成章的事。 在做CloudStack過程中,出現了一個奇人,這哥們就是Darren ShepherdDarren在另外一家名叫GoDaddy(賣域名那貨)的公司工作, 這哥們是重構狂,把CloudStack的核心引擎重寫了四五次。后來CloudStack被收購再后來梁博士出來搞Rancher就把Darren一起叫上, DarrenRancher的代碼貢獻量可以用噸來計算了。所以這個Cattle大家如果細心一點,應該能找到CloudStack的影子。

 

故事插播完畢。相信隨著Rancher的不斷升級優化,Cattle肯定會被分拆成各個小組件,然后用Golang實現,這是后話。下面我們先用一張圖看下Rancher-server都包含了什么:


圖解:

1.)Supervise負責對MysqlCattle服務進行進程監控,保證服務不宕機;

2.)CattleRancher的核心引擎,env/stack/service的邏輯管理,servicehealth check,調度策略等;

3.)websocket-proxy——通過UI查看Container log或是執行docker exec,都是通過該服務代理到對應的rancher-host上執行,數據傳輸使用websocket協議;

4.)Rancher-Catalog-Service——CatalogRancher一個應用市場,里面包含官方提供的各種應用,用還包括一些rancher本身的服務,如external-dns服務和convoy服務等;

5.)Rancher-Compose-executor——Rancher-Compose CLI的服務端實現;

6.)go-machine-service——使用docker-machine來做rancher-host的管理,create/active/delete/purge

 

Rancher-server管理的各個host節點,我們在添加它們時候都會在相應的host上啟動一個擁有Privilege權限的Container, 這個Container基于Rancher/Agent鏡像,它首先會連接Rancher-server驗證一個Secret & Key, 成功后再啟動一個Rancher/Agent container也是Privilege級別的,最終這個Container負責和Rancher-server保持連接,并接收各種操作的event。 如果當前host要使用Rancher Managed網絡,那么還會啟動一個基于 Rancher/Agent-Instance 鏡像的Container。 同樣如果添加了lb-servicelb-service也是基于Rancher/Agent-Instance來實現的。我們還是用一張圖來有一個整體感官的了解:


圖解:

1.)main-service是一個具有privileged權限的容器,負責和Rancher-serviceCattle引擎做通信,并管理host上的其他服務容器;

2.)Other-service是一個容器,負責給host上其他應用容器提供服務;

3.)每個LB-service都會在host上基于Rancher/Agent-Instance生成對應數量的容器。

 

值得一提的是Rancher-NET組件,從 v0.56 開始不用Racoon實現IPSec了,改成用Rancher-NET包裝StrongSwan, 用Charon實現IKE,從Rancher-NETpackage架構看,未來是要實現多種backend,很期待VXLANVLAN的實現。 Docker-NETwork的接入應該只是時間問題。如果部署在內部環境里,用IPSec做網絡隔離還是有點重。

 

我們運行很多個StackService之后,host上會有很多Container,我們會在Rancher-UI上看到Container的網絡是10.42.0.0/16 host上的Container之間的網絡是一種怎樣的形式呢?分析這個主要還是看ContainerIP Addr &IP route, 以及hostiptables,我們還是一張圖來看一下:


Rancher-DNS& Rancher-MetaData 是我們需要了解的重點組件。我們使用的Service Link功能其實就是通過Rancher-DNS實現的, Rancher-MetaDataConfd結合可以讓我們在App-Container中動態載入配置, 另外RancherExternal-DNS也得依賴它,這個我會在后續的文章中具體描述。

 

host的內部網絡看過之后,我們來看看Container跨主機通信的實現,主要通過兩個UDP端口500 and 4500, 網絡流量出站入站通過hostIPtables規則處理,IP地址為172.17.0.2這個Container就是運行Rancher-NETContainer


計算和網絡聊完,我們再來看看存儲。Rancher自己實現了一個Docker-Volume-DriverConvoyConvoy不生產存儲, 它只是存儲的搬運工,它相當于把各種存儲接口做一個統一的抽象,目前支持Device MappeGlusterFS/NFSEBS等, 目前使用上可以參考Rancher-Catalog中的實現,我們可以在UI上看到Convoy GlusterFS & Convoy NFS, 如果你的環境中已經有NFSGlusterFS的實現,填寫一些相關參數進行部署即可。 它主要做的事就是在每個host上部署Convoy-Agent服務并把對應的共享卷掛載上來,這樣每個App-Container就可以用過Convoy使用共享卷。


Ok,本次分享暫告一個段落,了解更多Rancher中文資訊敬請關注我們!

溫馨提示:

云舒網絡 http://www.cloudsoar.com 攜手Rancher Labs推出【Rancher | 實戰微信群】,在線為您分享Docker技術干貨,更有往期回顧精選期刊等你拿!

 

本群匯集了Rancher中國最強技術精英團隊及業內技術派高人,宗旨是為了大家擁有更專業的平臺交流Rancher實戰技術,實時與Rancher創始團隊面對面!同時歡迎各位分享自己的經驗、疑難問題,我們將定期邀請分享嘉賓做各類話題分享及回顧,共同實踐研究Docker容器生態圈。

RancherDocker技術感興趣、或對本文中細節需繼續探討的朋友,歡迎加入本群參與討論! 

加微信群方法:

  1.關注【云舒網絡】公眾號

  2.留言”我要加群” 

QQ群號:216521218

 本文由用戶 云舒網絡 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!