rancher是一個docker集羣化管理平臺,相對於mesos和k8s架構,rancher的部署管理非常簡單方便。並且功能豐富。如下爲本人繪製的邏輯架構圖。
1:部署Rancher管理平臺
規劃:
server:10.64.5.184
agent1:10.64.5.185
agent2:10.64.5.186
agent3:10.64.5.187
agent4:10.64.5.188
部署方式:
docker容器啓動
server端部署
依賴鏡像:rancher/server:latest
# docker run -d --restart=always -v /home/heqinqin/data:/var/lib/mysql -p 8080:8080 rancher/server
agent部署
依賴鏡像:rancher/agent:v0.8.2
瀏覽器訪問server_ip:8080,點擊Add host.執行下圖中sever管理端生成的Add host命令,即可將host添加到server端管理。
添加兩個host之後
2:部署stack和service
rancher管理容器是以stack爲一個任務組,在stack下可以有多個service共同提供業務,而每個service可以包含多個容器。
下面來創建一個web集羣,來提供網站服務
1:創建一個Stack,命名爲WEB-Server
2:創建一個Service,命名爲Nginx-cluster,運行十個nginx容器。
3:點擊start啓動service,開始部署container。
4:創建一個Load Balance負載均衡器
5:創建一個Load Balance負載均衡器,設置端口映射,選擇負載均衡的服務。
6:WEB-server的服務創建成功。一個stack包含了兩個service。
7:點擊顯示架構圖,可清楚看到邏輯關係.
8:同理創建一個WordPress服務,如下。
3:Rancher的相關特性,功能
網絡+負載均衡
依賴鏡像:rancher/agent-instance:v0.5.0
採用SDN技術所建容器爲虛擬ip地址10段(常規爲docker內部地址172段),各host之間容器採用ipsec隧道實現跨主機通信,使用的是udp的500和4500端口。
啓動任務時,在各個host部署容器之前會起一個Network Agent容器,負責組建網絡環境。
監控管理
包括:主機監控+和容器監控
監控內容:CPU+Memory+Network+storge
用戶管理和訪問控制
支持多種訪問控制權限管理。保證平臺安全。
支持用戶組及權限設置(如下圖設置了運維OPS環境和開發DEV環境,實現管理隔離)。
集成第三方軟件鏡像(官方會持續更新)
4:破壞性測試
server是以胖容器方式運行,其中包含了mysql數據庫,經測試,數據庫保存了任務數據以及任務邏輯關係。
破壞server端
1.
操作:在server端和agent端正常運行狀態下,stop掉server容器,
結果:業務不受影響。start重啓容器後恢復管理功能。
2.
操作:將server端容器rm刪除掉(未將mysql數據映射至宿主機),重新再起一個server容器。
結果:1.當前業務不受影響
2.新server仍然能夠識別和管理各個agent,因爲agent端是連server的ip端口,ip不變就能連上
3.agent端原有的任務容器的命名和邏輯關係沒有了。
3.
操作:將server端容器rm刪除掉(將mysql數據/var/lib/mysql 映射至宿主機),重新再起一個server容器。
結果:新起的容器能夠識別任務狀態,命名,邏輯關係。恢復到之前的狀態。
破壞agent端
4.
操作:host命令行下刪除掉agent容器
結果:不影響當前業務狀態,server端顯示host失聯,無法對該agent下發任務進行擴容和縮容。
重新啓動agent後恢復正常。
5.
操作:server控制端刪除agent端的業務容器(例如刪除nginx容器)
結果:刪除後數秒內,在另一個host上重新啓動一個新的業務容器。
6.
操作:host命令行下刪除agent端的業務容器(例如刪除nginx容器)
結果:刪除後數秒內,在當前host上重新啓動一個新的業務容器。
7.
操作:host命令行下刪除掉agent容器後,再刪除一個業務容器
結果:server端因爲與agent失聯,導致無法更新該host上的容器變化,沒有新啓動任何容器。
測試未完。。。
---當前結論
1:server節點需要單獨部署,並相對給予較高性能。
2:server節點宕機不會對現有業務造成影響,但是可能會對後期管理造成影響。
3:需要將server端數據保存至宿主機,並定期備份數據庫數據。
4:server端對host的管理完全是依賴agent容器,當無法聯繫agent容器時,無法得知當前host上容器的變化,在終端顯示的是最後一次agent通知的內容狀態。