- 容器即服務:從零構建企業(yè)級容器集群
- 林帆
- 1847字
- 2019-09-09 16:31:53
2.4 Swarm Mode的圖形界面
2.4.1 Swarm Mode UI現狀
到目前為止,本書介紹的操作都是在命令行中實現的。而在實際管理集群時,特別是在需要持續(xù)觀察集群狀態(tài)和快速獲取集群全貌時,總是通過輸入這么多命令來刷屏查看信息就顯得比較笨拙。
在Docker的企業(yè)版本中包含了一款管理Swarm集群的圖形界面工具,被稱為Universal Control Plane(簡稱UCP),它提供了對集群、節(jié)點、網絡、存儲、服務、應用組等全方位的可視化管理能力,如圖2-5所示。

圖2-5 Universal Control Plane的儀表盤頁面
開源社區(qū)里也曾一度出現過許多Docker容器管理界面,但隨著Docker增加了Swarm的組件,隨后又從經典Swarm集群轉移到Swarm Mode集群,許多相關的項目已不再繼續(xù)更新了。在許多國內開發(fā)者參與貢獻的項目中,相對知名的有數人云公司設計的Crane界面和個人開發(fā)者Helyho設計的DockerFly界面
,這兩個項目都對最新的Swarm Mode提供了支持,雖然代碼活躍度都已不高,有興趣的讀者不妨保持關注。
在社區(qū)項目中,最值得一提的是Portainer,這個項目從Docker誕生后不久(2013年6月)開始啟動,一路跟隨著Docker踏過單機時代的容器和經典Swarm時代的容器集群,現在完美支持了新的Swarm Mode集群,并保持著良好的活躍度和發(fā)布頻率,是Swarm Mode集群可視化產品中值得一試的開源方案。
2.4.2 Portainer
Portainer的前端界面采用Angular框架,代碼結構和用戶體驗都十分優(yōu)雅。由于Portainer采用本地文件(而不是數據庫)的方式存儲服務狀態(tài),它在部署的時候沒有什么額外的依賴,在集群的Manager節(jié)點啟動Portainer容器時即可使用,如下所示。
$ docker run -d \ --name portainer \ --restart always \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /opt/portainer:/data \ portainer/portainer
容器中的“/data”目錄被用來保存Portainer的狀態(tài)數據,建議將它掛載到主機上。這種簡便和靈活設計的代價使它無法簡單地進行水平擴展,但考慮到集群管理系統通常只有管理員使用,并不會有高并發(fā)訪問,所以算不上是嚴重的設計問題。Portainer的數據目錄存儲的主要是用戶組和集群連接信息等少量數據,界面上展示的數據都是實時從集群里獲得的,所有在界面上與集群相關的操作也都會透明地傳遞給集群執(zhí)行。
也可以使用Service的方式部署,如下所示,注意加上部署節(jié)點的選擇條件,確保它只會被部署在Manager節(jié)點上,否則將無法獲得集群信息。當然,除非使用網絡存儲來掛載Portainer的數據目錄,否則使用這種方式部署的服務同樣是不能水平擴容的。
$ docker service create \ --detach \ --name portainer \ --publish 9000:9000 \ --constraint 'node.role == manager' \ --mount type=bind, src=/var/run/docker.sock, dst=/var/run/docker.sock \ --mount type=bind, src=/opt/portainer, dst=/data \ portainer/portainer
部署完成后,通過瀏覽器訪問運行節(jié)點的9000端口(如果采用Service方式部署則可以是集群任意節(jié)點的9000端口)。首次進入時會提示設置一個8位數以上的管理員密碼,設置完成后,使用admin用戶和剛剛重置過的密碼登錄。
此時Portainer會問用戶要操作哪個容器集群,如果剛才創(chuàng)建容器時就是在Manager節(jié)點創(chuàng)建的(或通過Service方式創(chuàng)建的),則可以直接選擇“Manage the Docker instance where Portainer is running”,表示通過當前服務所在的節(jié)點接入集群。然后就進入了Portainer的主儀表盤頁面,如圖2-6所示。

圖2-6 Portainer的主儀表盤頁面
注意圖2-6左側的導航欄菜單,它將Portainer的主要功能至上而下地劃分為三部分。
最上面的部分是“Active Endpoint”,這里可以用于切換管理的集群。Portainer將每個被管理的集群稱為一個“接入點(Endpoint)”,用戶可以使用同一個Portainer界面管理多個集群,稍后會介紹接入點的添加和管理。
中間部分的“Enpoint Actions”是Portainer的主體功能,包含Swarm集群中的各種資源菜單。可以在不同的資源管理頁面之間切換,所有的集群信息在這里都一目了然。此外,通過Portainer也能可視化地創(chuàng)建網絡、存儲、容器、服務等各種資源對象。
最底部的“Portainer Settings”部分只有管理員賬號能看到,包含了用戶管理(User management)、集群接入點管理(Enpoints)、倉庫管理(Registies)和系統設置(Settings)這幾個模塊。在用戶管理模塊中,具有管理員權限的用戶可以創(chuàng)建更多的普通用戶賬號并將這些賬號劃分成團隊。接入點管理的模塊用于添加更多Portainer可管理的集群,并將用戶賬號和可以訪問的集群關聯起來,當普通用戶登錄到Portainer時,只能看到和切換自己有權限的集群。倉庫管理模塊用于當用戶使用Docker Hub的私有鏡像組或是自建的私有倉庫下載鏡像時能夠自動使用相應賬號登錄,解決通過Portainer部署容器時需要使用私有鏡像的問題。
下面的例子展示了Portainer的多集群管理能力。首先進入左側菜單的“Portainer Settings→User Management”頁面,創(chuàng)建名為“demo”的用戶,任意設置一個登錄密碼。然后進入“Portainer Settings→User Management→Team”頁面,創(chuàng)建名為“demo-group”的團隊,將demo用戶設置為團隊管理員(Team Leader)。此時用戶頁面的狀態(tài)信息如圖2-7所示,團隊頁面的狀態(tài)信息如圖2-8所示。

圖2-7 Portainer的用戶列表

圖2-8 Portainer的團隊列表
接著進入“Portainer Settings→Endpoints”頁面,添加要管理的其他集群地址,保存后單擊各個接入點的“Manage access”按鈕,賦予demo-group團隊部分集群的管理權限,如圖2-9所示。

圖2-9 Portainer的接入點列表
然后重新使用demo用戶登錄,會發(fā)現點開左上角的接入點下拉菜單后,只能在有權限的集群之間切換,如圖2-10所示。

圖2-10 Portainer導航欄的切換接入點菜單
- QTP自動化測試最佳實踐
- SpringBoot揭秘:快速構建微服務體系
- OpenNI體感應用開發(fā)實戰(zhàn)
- Docker源碼分析
- 知行合一: 實現價值驅動的敏捷和精益開發(fā)
- 產品眾包設計理論與方法
- Android深度探索(卷1):HAL與驅動開發(fā)
- 建筑運維智慧管控平臺設計與實現
- Android5.0新特性實戰(zhàn)
- 構建跨平臺APP:jQuery Mobile移動應用實戰(zhàn)(第2版) (跨平臺移動開發(fā)叢書)
- 大數據實時流處理技術實戰(zhàn):基于Flink+Kafka技術
- Spring Boot+Vue 3大型前后端分離項目實戰(zhàn)
- 云計算工程
- Google Android開發(fā)入門與實戰(zhàn)
- IEC算法及其在多目標優(yōu)化中的應用