148 期 - 善用 Admiral 圖形介面 Photon OS 容器管理超直覺


網管人雜誌

本文刊載於 網管人雜誌第 148 期 - 2018 年 5 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。





文章目錄

前言
實戰 Project Admiral
          安裝 Photon OS 容器平台
          下載及啟用 Admiral 容器服務
          Photon OS 啟用 Docker Remote API 機制
          Admiral 透過 API 納管 Photon OS 主機
          搜尋容器映像檔
          部署單一容器
          整合 Docker Compose 機制部署多個容器
結語





前言

自從容器(Container)技術在 2013 年,由 dotCloud 原本提供 PaaS 服務的公司,將自家管理 PaaS 服務的容器技術「Docker」貢獻給開放源始碼之後,由於 Docker 容器管理技術能夠解決過往開發環境上的困擾,所以 Docker 容器管理技術便迅速開始蔚為風潮,當然虛擬化技術大廠 VMware 並未在這波容器潮流中缺席。

因此,在 2015 年 4 月時 VMware 官方推出 Photon OSProject Lightwave 開放原始碼專案,並且在 2016 年 10 月於 VMworld 歐洲大會上,正式發佈 VMware Photon Platform 容器平台解決方案(如圖 1 所示),希望能夠幫助企業及組織輕鬆打造「雲端原生應用程式」(Cloud Native Applications)運作環境。

圖 1、VMware Photon Platform容器平台解決方案運作架構示意圖





實戰 Project Admiral

雖然,在 VMware vSphere 虛擬化基礎架構中,透過底層輕量級的 Photon OS 容器作業系統,能夠更充分發揮容器的運作效能。然而,企業及組織當中的 IT 管理人員,倘若並未熟悉 Linux 運作環境及容器相關指令等實務操作時,可能會無法隨心所欲的管理眾多容器而產生困擾並增加管理成本。

因此,VMware 官方推出容器管理工具 Project Admiral,讓 IT 管理人員可以輕鬆透過 GUI 圖形化介面的方式達到管理容器的目的,包括容器的自動部署及生命週期管理等維運事務。本文便要為讀者詳細說明及實作演練,如何透過 Project Admiral 容器管理工具,輕鬆執行下載、部署、管理、刪除……等工作任務。下列為 Project Admiral 的特色功能:

  • 透過規則機制管理資源: 透過 Admiral 容器管理平台以「規則機制」(Rule-Based)的方式,部署容器並管理相關資源。
  • 即時更新運作狀態: 採用即時更新的方式提供系統運作資訊,方便 IT 管理人員透過容器平台即時了解容器的運作狀態。
  • 多樣化容器範本管理機制: 支援多樣化的容器範本管理機制,以便企業及組織能夠進行邏輯化多容器應用程式部署。

圖 2、Project Admiral 容器管理工具



安裝 Photon OS 容器平台

在本文實作環境中,由於 Project Admiral 容器管理工具是建構在 Photon OS 容器平台之上,所以必須先建立 Photon OS 容器平台運作環境。在本文實作環境中,我們採用新版 Photon OS 1.0 Revision 2 版本容器作業系統(如圖 3 所示),並且採用完整的「Photon Full」安裝選項來建構 Photon OS 容器平台。
有關 Photon OS 安裝及組態設定和效能調校的詳細資訊,請參考本刊《第 138 期 - VMware 自家容器作業系統,實戰 Photon OS 基礎安裝》《第 146 期 - 參數架構設定考驗功力,Docker 效能調校有眉角》技術專欄內容。
圖 3、採用新版 Photon OS 1.0 Revision 2 版本容器作業系統

當 Photon OS 容器平台順利安裝完成後,首先以管理者身份帳號登入 Photon OS 容器平台,為 Photon OS 容器平台組態設定網路連線資訊(本文實作環境 IP 位址設定為 10.10.75.31),同時啟用 Docker 容器服務。如圖 4 所示,可以看到目前在 Photon OS 容器平台運作環境中,採用的 Docker 容器服務為 1.12.1 版本。
Admiral 支援的 Docker 容器服務版本為 1.12 或後續版本,而支援的 Docker Remote API 則為 1.24 或後續版本。
圖 4、Photon OS 1.0 Revision 2 版本容器平台,預設採用的 Docker 容器服務版本



下載及啟用 Admiral 容器服務

順利為 Photon OS 容器平台組態設定網路連線並啟動容器服務後,由於稍後將會下載及啟用 Admiral 容器管理服務,同時下載的 Admiral 容器服務容器映像檔,來自於網際網路上的 Docker Hub 容器映像檔倉庫網站,所以請確保 Photon OS 容器平台主機能夠接觸到網際網路,以避免因為無法下載 Admiral 容器服務的容器映像檔,而發生下載及啟用 Admiral 容器服務失敗的情況。

請在 Photon OS 指令視窗中,鍵入「docker run -d -p 8282:8282 --name admiral vmware/admiral」指令,其中「docker run -d」指令表示稍後下載 Admiral 容器映像檔完成後,啟動的 Admiral 容器服務將會以「背景」(Detach)的方式運作,而「-p 8282:8282」參數則是指定將 Photon OS 主機的 Port 8282 連接埠,對應至啟動 Admiral 容器服務的 Port 8282 連接埠。

至於「--name admiral」則指定啟用的 Admiral 容器服務名稱為 admiral,最後「vmware/admiral」則是指定由 Docker Hub 容器映像檔倉庫網站中,下載的 Admiral 容器映像檔名稱,由於未指定版本號碼所以系統將會自動 latest 版本
本文實作環境中,Admiral 容器映像檔 latest 版本為 0.9.1
上述下載及啟用 Admiral 容器服務的指令執行完成後,請執行「docker ps」指令確認 Admiral 容器服務是否啟用完成,並且 Photon OS 主機及 Admiral 容器服務的連接埠對應服務是否正確(如圖 5 所示)。

圖 5、下載及啟用 Admiral 容器管理服務並確認是否運作正常

下載及啟用 Admiral 容器管理服務後,此時請開啟瀏覽器連結至 Photon OS 主機的 Port 8282 連接埠,本文實作環境的 URL 網址為「http://10.10.75.31:8282」,此時應該能夠順利看到 Admiral 容器服務的管理介面(如圖 6 所示)。

預設情況下,Photon OS 容器平台在下載及啟用 Admiral 容器服務後,已經自動為 Admiral 容器服務的 Port 8282 連接埠,開啟 IPTables 防火牆允許規則,倘若無法順利連結至 Admiral 容器服務管理介面的話,管理人員可以透過「iptables -L」指令,確認目前 Photon OS 容器平台的 IPTables 防火牆規則的載入情況。

圖 6、連結 Admiral 容器服務管理介面

當 IT 管理人員在 Admiral 容器服務管理介面中,按下「Add a Host」鈕嘗試納管 Photon OS 主機時,將會發現目標端 Photon OS 主機回應「Error connecting to http://PhotonOS_IP:2375」錯誤連接訊息(如圖 7 所示),原因在於 Admiral 容器服務管理介面是透過 Docker Remote API 的方式連接至 Photon OS 主機,因此必須為目標端 Photon OS 主機開啟 Docker Remote API 遠端管理連線機制。

圖 7、Admiral 容器服務管理介面,為透過 Docker Remote API 方式連接至 Photon OS 主機



Photon OS 啟用 Docker Remote API 機制

在本文實作環境中,我們將新增另 1 台 Photon OS 主機並組態設定 IP 位址為「10.10.75.32」,同時啟用 Docker Remote API 機制,以便稍後 Admiral 容器服務管理介面能夠順利納管。在開始之前,倘若 Photon OS 主機已經啟用 Docker 容器服務的話,那麼請先執行「systemctl stop docker」指令以便停止 Docker 容器服務,然後才修改 Docker 容器服務組態設定檔內容。

請修改 Docker 容器服務組態設定檔「/etc/default/docker」,加入「DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"」內容後存檔離開。接著,執行「iptables -A INPUT -p tcp --dport 2375 -j ACCEPT」指令新增 IPTables 防火牆允許規則,以便確保 Admiral 容器管理服務,能夠透過 Docker Remote API 機制連接至 Photon OS 主機。

值得注意的是,剛才新增的 IPTables 防火牆允許規則指令,只會在目前的運作狀態中即時套用生效而已,倘若 Photon OS 主機重新啟動後便會消失,將會造成 Docker Remote API 機制再次被 IPTables 防火牆阻擋。因此,建議將 IPTables 防火牆允許規則寫入至「/etc/systemd/scripts/iptables」組態設定檔,確保 Photon OS 主機重新啟動後,仍然自動允許 Docker Remote API 存取機制的 IPTables 防火牆規則。

修改 Docker 容器服務組態設定檔內容完畢後,便可以執行「systemctl start docker」指令啟動 Photon OS 主機的 Docker 容器服務,並且開啟瀏覽器連結「https://10.10.75.32:2375/info」,確認 Docker Remote API 機制是否順利運作(如圖 8 所示)。
在目前最新的 Photon OS 2.0 GA 版本中,依上述方式修改並啟用 Docker 容器服務後,將會發現 Docker 容器服務產生相關警告訊息,同時 Photon OS 主機並無法順利 Listen Port 2375 連接埠,相信後續 Photon OS 新版本將會修正此一問題。
圖 8、測試 Photon OS 主機是否啟用 Docker Remote API 機制

值得注意的是,上述 Photon OS 主機啟用 Docker Remote API 機制的連線方式,採用的通訊協定為 HTTP 而非 HTTPs 所以並不安全,因此僅適用於企業及組織的研發 / 測試環境中使用,並不適合用於正式線上營運環境。倘若,企業及組織希望使用 HTTPs 通訊協定保障傳輸安全性的話,請參考 VMware Cloud - Native Apps Blog - How to enable Docker Remote API on Photon OS 文章內容。



Admiral 透過 API 納管 Photon OS 主機

現在,請再次開啟 Admiral 容器服務管理介面,按下「Add a Host」鈕再次嘗試納管遠端 Photon OS 主機。首先,在 Address 欄位中,請鍵入剛才開啟 Docker Remote API 機制的 Photon OS 主機 IP 位址,本文實作環境為 http://10.10.75.32:2375,在 Placement zone 欄位採用預設的 default-placement-zone 即可。

在 Login Credential 的部分,預設採用「憑證」的方式進行使用者身份驗證,本文為了簡化測試 / 研發環境選擇「Manage Credentials」,將使用者身份驗證方式由憑證調整為使用者帳號及密碼,並且鍵入 Photon OS 主機管理者帳號及密碼。

完成使用者身份驗證方式的組態設定後,便可以按下 Verify 鈕進行納管 Photon OS 主機的驗證動作,順利看到顯示 Verified Successfully!驗證成功的訊息後,便可以按下「Add」鈕正式將 Photon OS 主機納管(如圖 9 所示)。
當 Admiral 容器管理服務成功納管 Photon OS 主機後,預設便會在 Photon OS 主機中立即下載並啟用 1 個容器,採用的容器映像檔為 vmware/admiral_agent,版本的部分則是與採用的 Admiral 容器服務相同,並且將 Photon OS 主機的 Port 32768 對應至 Admiral Agent 容器的 Port 4200 連接埠。
圖 9、成功透過 Docker Remote API 納管 Photon OS 主機

在本文實作環境中,我們再新增另 1 台 Photon OS 主機 IP 位址為「10.10.75.33」,並且透過先前的操作方式,啟用 Docker Remote API 機制及新增 IPTables 防火牆允許規則之後,於 Admiral 容器服務管理介面中依序點選「Hosts > Add a Host」項目。

在 Add Host 頁面中,採用與剛才相同的新增納管 Photon OS 主機方式,再加入 1 台容器平台主機至 Admiral 容器服務管理介面中。現在,管理人員在 Admiral 容器服務管理介面中已經可以看到,成功納管「2 台」Photon OS 容器平台主機(如圖 10 所示)。

圖 10、Admiral 容器管理服務順利納管 2 台 Photon OS 容器平台主機



搜尋容器映像檔

順利納管 2 台 Photon OS 容器平台主機後,在 Admiral 容器服務管理介面中點選「Templates」項目,可以馬上看到許多熱門的容器範本。因為,預設情況下已經將「容器倉庫」(Container Registry)指向至網際網路的 Docker Hub,所以便自動載入 Docker Hub 上熱門的容器映像檔範本。

管理人員,也可以在「搜尋欄位」鍵入希望搜尋的容器範本,舉例來說,個人自行打造的 Redis 快取機制高可用性的容器映像檔範本,已經上傳至 Docker Hub 分享給大家,所以鍵入關鍵字 weithenn 後進行搜尋即可立即找到(如圖 11 所示)。

此外,倘若管理人員希望管理 Admiral 容器服務的容器倉庫時,只要依序點選「Templates > Manage Registry」項目後,便可以針對容器倉庫進行新增 / 修改 / 刪除……等管理作業。

圖 11、搜尋 Docker Hub 上熱門的容器映像檔範本



部署單一容器

透過 Admiral 容器服務的管理介面,管理人員可以很輕鬆且快速的部署容器,舉例來說,我們實作部署熱門的 Nginx 網頁伺服器容器,只要點選 Templates 並在搜尋欄位中鍵入「nginx」關鍵字,便可以發現由官方維護的「library/nginx」容器映像檔。

搜尋到想要部署的 library/nginx 容器映像檔後按下「Provision」鈕,此時管理畫面右邊將會自動出現 Provision Requests 窗格,顯示指定的 nginx 容器部署狀態。順利下載容器映像檔後,在啟動容器的部署期間,執行狀態將會顯示為「Started(Provisioning)」,待系統確認容器部署作業執行完畢後狀態將轉為「Finished(Completed)」。

圖 12、透過 Admiral 容器服務管理介面快速部署 Nginx 網頁伺服器容器

順利下載及部署 Nginx 網頁伺服器容器之後,請依序點選「Resources > Containers」項目。此時,將會在操作畫面中看到目前 Admiral 容器服務所管理的容器清單,在管理介面中可以看到,除了 Photon OS 容器平台主機因為接受 Admiral 容器服務管理,預設啟動的「Admiral Agent」容器之外,還有剛才下載及部署的 Nginx 網頁伺服器容器(如圖 13 所示)。

圖 13、查看 Admiral 容器服務所管理的容器清單

當管理人員將滑鼠指標移至 Nginx 網頁伺服器容器時,在 Admiral 管理畫面中將會出現四個圖示,分別是「Details、Stop、Remove、Scale」等四項容器管理功能,倘若直接點選滑鼠左鍵的話預設便是進入 Details 視窗。

在容器詳細資訊視窗當中,可以看到容器所使用的 CPU、記憶體、網路等硬體資源使用情況,以及目前 Nginx 網頁伺服器容器的日誌資訊。同時,也可以看到 Nginx 網頁伺服器容器運作在哪台 Photon OS 容器平台主機上,以本文實作環境來說 Nginx 網頁伺服器容器,便是部署在 IP 位址 10.10.75.32 的 Photon OS 容器平台主機上(如圖 14 所示)。
在 Admiral 管理介面中,容器日誌可顯示的時間區段分別是 15 分鐘、30 分鐘、1 小時、2 小時、5 小時。
此外,也可以看到 Nginx 網頁伺服器容器的虛擬網路 IP 位址(本文實作環境為 172.17.0.3),以及將 Photon OS 容器平台主機的哪個連接埠(本文實作環境為 Port 32771),對應到 Nginx 網頁伺服器容器的 Port 80 連接埠,並且在管理介面中建立重新導向的超連結,所以只要點選連結即可瀏覽 Nginx 網頁伺服器容器的歡迎頁面。

圖 14、查看 Nginx 網頁伺服器容器的運作資訊

此外,在查看 Nginx 網頁伺服器容器運作資訊的右上角,允許管理人員直接針對容器進行「Stop、Remove、Terminal」的管理動作,舉例來說,可以點選 Terminal 圖示便可開啟新的連線階段,並直接進入到 Nginx 網頁伺服器容器中進行管理作業(如圖 15 所示),當需要離開 Terminal 連線階段只要點選左上角的 Close 圖示即可。
管理人員倘若覺得預設的 Terminal 連線階段視窗太小,可以點選右上角的 Open in new tab 鈕,便會在現有的瀏覽器中開啟「新分頁」以全螢幕的方式進行管理作業。
圖 15、開啟新的連線階段進入容器中進行管理作業

在此實作環境中,Nginx 網頁伺服器容器採用的是 Photon OS 容器平台主機,「隨機」指派的連接埠進行對應,倘若管理人員希望在部署容器時採用不同的組態設定時,只要在按下 Provision 鈕進行部署以前,選擇「Enter additional info」項目即可採用不同的組態設定。

舉例來說,倘若希望採用 Photon OS 容器平台主機的 Port 80 連接埠,對應到屆時部署 Nginx 網頁伺服器容器的 Port 80 連接埠,那麼只要點選「Network」項目,然後分別在 Port Bindings 欄位填入「Host Port」及「Container Port」皆為 80 連接埠後(如圖 16 所示),按下「Save as Template」儲存為容器範本後,再按下 Provision 鈕進行部署作業即可。
Admiral 容器管理服務,支援調整的組態項目共有 Basic、Network、Storage、Policy、Environment、Health Config、Log Config……等七大項。
圖 16、採用不同的組態設定部署 Nginx 網頁伺服器容器



整合 Docker Compose 機制部署多個容器

在容器的實務應用情境中往往不會只部署單一容器,而是透過 Docker Compose 或 Docker Stack Deploy 機制,搭配 YAML 檔案一次部署多個容器達到應用程式互相串聯的目的,舉例來說,管理人員可以透過 Docker Compose 機制,一次部署 Wordpress 部落格容器及 MySQL 資料庫容器。

透過 Admiral 容器管理服務讓這件事情更輕鬆的完成,請在 Admiral 管理介面中依序點選「Templates >View:Templates」,在 Found Templates 頁面中點選「Import Template or Docker Compose」圖示。

此時,在 Import Template 視窗中,管理人員可以按下 Load from File 鈕,將已經撰寫好的 YAML 檔案上傳,或者是直接在下方窗格中將 YAML 檔案內容貼上,然後按下「Import」鈕即可執行匯入的動作。

值得注意的是,在目前的 Admiral 容器管理服務中,僅支援舊版的 Docker Compose v2尚未支援最新的 Docker Compose v3 版本,相信後續新版的 Admiral 容器管理服務便會支援。因此,倘若管理人員上傳的 YAML 檔案,或者複製貼上的 YAML 內容為 Docker Compose v3 版本,則 Admiral 容器管理服務便會出現錯誤訊息,提示目前僅支援 Docker Compose v2 格式資訊(如圖 17 所示)。
預設儲存的範本名稱為「Docker Compose」加上範本建立的「日期及時間」,管理人員可以依照此範本功能進行重新命名。
圖 17、目前的 Admiral 容器管理服務僅支援舊版 Docker Compose v2

建立好 Docker Compose 範本後,即可按下 Provision 鈕進行部署的動作。此時,Admiral 容器管理服務便會依照剛才所撰寫的 YAML 內容,透過 Docker Compose 機制下載容器映像檔,並部署容器到 Photon OS 容器平台主機。
預設情況下,Admiral 容器管理服務會將多個容器部署作業,以負載平衡的方式平均部署到不同台 Photon OS 容器平台主機上。
當容器佈署作業完成後,同樣可以在「Resources > Containers」看到剛才所部署的容器,然而此次我們是透過 Docker Compose 機制同時部署多個容器,所以可以在「Resources > Applications」中看到該項目(本文實作環境項目名稱為 MyBlog),進入後可以看到此應用程式項目內有 2 個子容器(如圖 18 所示),也就是剛才透過 Docker Compose 機制部署的 Wordpress 部落格容器及 MySQL 資料庫容器,如此一來管理人員可以採用「應用程式」為單位來管理容器,降低企業及組織對於容器的管理成本。

圖 18、以應用程式為單位來管理容器多個容器

因此,當我們希望刪除這 2 個透過 Docker Compose 機制所部署的容器時,只要依序點選「Resources > Application > MyBlog > Remove」項目,便可以「一次」刪除 Wordpress 部落格容器及 MySQL 資料庫容器,而無須個別切換到所屬容器然後才執行停止或移除容器的管理動作。

圖 19、一次刪除 Wordpress 部落格容器及 MySQL 資料庫容器





結語

透過本文的說明及實作相信讀者已經了解,管理人員只要透過 Admiral 容器管理服務,便可以輕鬆在 GUI 圖形畫面中,達到快速下載容器映像檔和部署容器的目的。同時,透過 Admiral 容器管理服務強大的功能,即使管理人員尚未熟悉 Docker 的 CLI 管理指令,同樣能夠透過 Admiral 容器服務管理介面達到管理容器的目的。