網管人雜誌
本文刊載於 網管人雜誌第 138 期 - 2017 年 7 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。
文章目錄
前言Photon 硬體需求及部署方式
安裝 Photon OS 容器平台
基礎操作
SSH 遠端管理
Docker 容器管理服務
執行第 1 個容器 Hello-World
執行第 2 個容器 Nginx 網頁伺服器
結語
前言
根據知名市調機構 Gartner 的研究報告顯示,在 2016 年時企業及組織普遍已經超過 80 % 的工作負載都運作在 VM 虛擬主機當中,同時預估在 2018 年時企業及組織當中將會有 50 % 的工作負載運作在「容器」(Container)當中,並且在 2020 年時不管是企業及組織內部的私有雲,或者是雲端服務業者所提供的公有雲 IaaS 服務當中,大多數的容器將會運作在 VM 虛擬主機當中。有鑑於此 VMware 官方在 2015 年 4 月時,正式發佈 Photon OS 及 Project Lightwave 這 2 項開放原始碼專案,並放到知名的開放原始碼專案平台 GitHub 上讓管理人員方便下載,接著在 2016 年 10 月於 VMworld 歐洲大會上正式發佈 VMware Photon Platform,希望能夠幫助企業及組織更容易打造「雲端原生應用程式」(Cloud Native Applications)的運作環境。
圖 1、VMware Photon Platform 運作架構示意圖
透過 VMware Photon Platform 運作架構,所打造的企業級雲端基礎架構平台並非只是單純僅運作容器服務而已。事實上,透過 VMware Photon Platform 中的 Photon Controller 運作元件,可以讓 IT 管理人員達到以分鐘等級建立數千個容器執行不同的工作負載或服務,至於 Project Lightwqave 則是在 VMware Photon Platform 運作架構中,負責處理 SSO 單一登入、驗證、授權及憑證……等功能。倘若,企業或組織的管理人員已經習慣使用 Kubernetes 調度工具,來管理企業及組織當中容器環境的話,那麼 VMware Photon Platform 也完全支援並能輕鬆整合。
圖 2、Project Lightwqave 運作架構示意圖
本文,將著重在 VMware Photon Platform 運作架構中的基礎元件 Photon OS,它是一個輕量型的 Linux 容器執行環境,也就是大家所熟知的「容器作業系統」(Container OS)。或許,有讀者會納悶為何市面上已經有許多容器作業系統,而 VMware 官方還要自行額外打造自家的 Photon OS 容器平台,主要原因在於市面上的容器作業系統並非針對 VMware 虛擬化基礎架構最佳化而設計,同時在容器運作環境的安全性及網路設計普遍不足,因此為了因應現代化「微服務」(MicroServices)的運作架構,所以才著手打造及整合並最佳化運作於 VMware 虛擬化基礎架構的 Photon OS 容器平台。
圖 3、在 VMware 虛擬化基礎架構環境中運作容器環境示意圖
Photon 硬體需求及部署方式
首先,Photon OS 輕量級的容器作業系統,所需要的硬體資源需求非常低只需「2 vCPU、384 MB 記憶體、20 GB 硬碟空間」即可運作。在 Photon OS 的 GitHub 頁面中可以看到,提供下列 4 種不同的封裝格式方便 IT 管理人員部署 Photon OS 容器平台。- ISO 映像檔: 下載 ISO 映像檔後,建立 VM 虛擬主機並全新安裝 Photon OS 容器平台。
- OVA: 透過 OVA 直接將已經封裝好的 Photon OS Minimal 版本容器平台,部署至 VMware 虛擬化平台,例如,vSphere ESXi、Workstation 12…… 等(支援虛擬硬體版本 10、11 的 VM 虛擬主機)。
- Amazon AMI: 將 Photon OS 容器平台進行封裝,以便 IT 管理人員在 Amazon EC2 公有雲環境中部署及運作 Photon OS 容器平台。
- Google GCE: 將 Photon OS 容器平台進行封裝,以便 IT 管理人員在 Google Compute Engine 公有雲環境中部署及運作 Photon OS 容器平台。
- Microsoft Azure: 目前尚未支援,但 VMware 官方表示很快便會將 Photon OS 容器平台進行封裝,以便 IT 管理人員在 Microsoft Azure 公有雲環境中部署及運作 Photon OS 容器平台。
安裝 Photon OS 容器平台
在本文實作環境中,我們採用下載 Photon OS 的 ISO 映像檔,以及 VMware WorkStation 虛擬化測試環境來安裝及測試 Photon OS 容器平台。在建立運作 Photon OS 的 VM 虛擬主機過程中,必須注意的是在選擇客體作業系統版本時,請選擇至「Linux」選項然後在 Version 下拉式選單中,選擇至「VMware Photon 64-bit」項目即可。倘若,在 Version 下拉式選單中沒有 VMware Photon 64-bit 項目可以選擇的話,請改為選擇「Other Linux 3.x kernel 64-bit」項目。
圖 4、選擇安裝 Photon OS 容器平台的客體作業系統版本
如果,採用的是 VMware vSphere ESXi 虛擬化平台時,那麼在建立運作 Photon OS 的 VM 虛擬主機過程中,請在 Select Compatibility 頁面於下拉式選單中選至「ESXi 6.0 and later」項目,在 Select a guest OS 頁面於下拉式選單中分別選至「Linux、Other 3.x Linux(64-bit)」項目即可。
支援運作 Photon OS 容器平台的 VMware vSphere ESXi 虛擬化平台版本為 5.5、6.0、6.5。
圖 5、在 VMware vSphere ESXi 虛擬化平台建立用於 Photon OS 的 VM 虛擬主機類型
安裝 Photon OS 容器平台的過程非常簡單,只要 3 個步驟即可安裝完成分別是選擇安裝選項、組態設定 Photon OS 容器平台的主機名稱、設定 Root 管理者帳戶的密碼即可。有關 Photon OS 容器平台安裝選項的部分,有下列 4 種安裝選項可供選擇:
- Photon Minimal: 最輕量的「容器主機執行階段」(Container Host Runtime)運作環境,具備最高運作效能及安全性的容器平台版本。
- Photon Full: 包含額外的相關套件以方便建立及打包應用程式在容器環境中運作,適合一開始使用 Photon OS 容器平台進行驗證及測試的版本。
- Photon OSTree Host: 將會建立 Photon OS 執行個體,並且從 RPM-OSTree Server 下載相關套件及程式庫,同時後續在運作上將交由 OSTree Server 進行集中管理。
- Photon OSTree Server: 將會建立「存放庫」(Repository)同時負責管理 OSTree 主機群,負責企業及組織內的容器生命週期管理及企業級規模擴充的工作任務。
圖 6、Photon OS 容器平台共有 4 種安裝選項可供選擇
在本文實作環境中選擇「Photon Full」安裝選項,大約 2 分鐘便完成 Photon OS 容器平台的安裝程序,然後按下任意鍵系統便會自動重新啟動。雖然,Photon OS 容器平台的基底也是 Linux 作業系統,但是 Photon OS 容器平台除了是 VMware 官方專為 vSphere 虛擬化環境進行最佳化之外,同時還移除 Linux 核心中不必要的部分,以及與 vSphere Hypervisor 重複的核心快取部分,以便提升 Photon OS 容器平台整體的運作效能,所以管理人員應該會發現 Photon OS 容器平台開機非常快速。
圖 7、Photon OS 容器平台開機畫面
基礎操作
當 Photon OS 容器平台開機完成後,會看到像 Linux 作業系統的 Console 文字登入訊息,請鍵入管理者帳號「root」以及剛才在安裝程序中,組態設定 Root 管理者帳戶的密碼後便可以順利登入 Photon OS 容器平台。查詢系統資訊
順利登入後,我們可以使用指令「uname -a」查看 Photon OS 容器平台使用的 Linux 核心版本,接著使用「cat /etc/photon-release」指令查看 Photon OS 容器平台版本及組建編號,或者使用「hostnamectl」指令直接查詢系統相關資訊。
圖 8、查看 Photon OS 容器平台系統資訊
在本文實作環境中,Photon OS 容器平台是運作在 VM 虛擬主機內,對於稍有 vSphere 虛擬化運作環境管理經驗的 IT 管理人員來說,運作在 vSphere 虛擬化環境的 VM 虛擬主機,首先應確認 VMware Tools 服務是否正確運作,以便確保在 vSphere 虛擬化環境中的 VM 虛擬主機,在虛擬硬體及效能層面能夠以最佳化的方式運作。請鍵入「systemctl status vmtoolsd」指令,即可確認 Photon OS 容器平台中的 VMware Tools 服務是否順利運作。
圖 9、確認 Photon OS 容器平台中的 VMware Tools 服務是否順利運作
網路組態設定
預設情況下,Photon OS 容器平台開機後便會啟動 DHCP Client 機制,嘗試尋找區域網路中是否有 DHCP 伺服器可以配發 IP 位址,倘若你需要關閉 DHCP Client 自動尋找 IP 位址的機制。請將「/etc/systemd/network/10-dhcp-en.network」檔案內容中,在 Network 區塊下把「DHCP = yes」組態設定值改為「DHCP = no」後存檔離開即可。
在實務應用上,管理人員通常會為 Photon OS 容器平台組態設定固定 IP 位址。首先,請透過「networkctl」指令,確認目前的 Photon OS 容器平台共有哪些網路介面,同時這些網路介面的連線狀態為何。在本文實作環境中,管理人員為 Photon OS 容器平台配置 1 片虛擬網路卡,所以可以看到指令的輸出結果中有「eth0」網路卡,並且運作狀態為「routable、configured」,稍後我們將會針對 eth0 網路卡組態設定固定 IP 位址。
圖 10、指令結果顯示 Photon OS 容器平台配置 1 片網路卡
接著,可以直接將原本的 DHCP Client 組態設定檔,從「10-dhcp-en.network」重新命名為「10-static-en.network」,在 Match 區塊中使用「Name=eth0」指定 eth0 網路卡的組態設定檔,接著在 Network 區塊下組態設定 Photon OS 容器平台網路資訊:
- DHCP=no: 停止啟用 DHCP Client 功能,避免 Photon OS 容器平台嘗試自動尋找區域網路中的 DHCP 伺服器配發 IP 位址。
- Address=10.10.75.31/24: 指定 Photon OS 容器平台採用「10.10.75.31」固定 IP 位址,並且採用「/24」CIDR 的網路遮罩的語法進行組態設定。
- Gateway=10.10.75.254: 指定 Photon OS 容器平台的預設閘道為「10.10.75.254」。
- Domains=weithenn.org: 指定 Photon OS 容器平台採用的網域名稱及 DNS 搜尋尾碼。
- NTP=clock.stdtime.gov.tw: 指定 Photon OS 容器平台所要採用的 NTP 時間校對伺服器。倘若,需要指定多筆 NTP 時間校對伺服器的話,請以「空白」隔開即可。
上述只是列舉常用網路組態設定參數,詳細資訊請參考 systemd.network 的 Man Pages 資訊。
接著,請修改「/etc/resolv.conf」組態設定檔內容,指定 Photon OS 容器平台所要採用的 DNS 伺服器 IP 位址即可。在本文實作環境中,指定的 DNS 伺服器為「nameserver 168.95.1.1」及「nameserver 8.8.8.8」。
最後,便可以使用「systemctl restart systemd-networkd」指令,重新啟動 Photon OS 容器平台的網路服務,然後就可以使用「ipa」及「iproute」指令,確認剛才所設定的固定 IP 位址及預設閘道資訊是否正確。
圖 11、確認 Photon OS 容器平台固定 IP 位址及預設閘道組態設定是否正確
使用「systemctl status systemd-networkd -l」指令,確認 Photon OS 容器平台網路服務運作狀態,以及使用「systemctl status systemd-timesyncd -l」指令,確認 Photon OS 容器平台 NTP 時間校對服務運作狀態。
圖 12、確認 Photon OS 容器平台網路服務及 NTP 時間校對服務運作狀態
SSH 遠端管理
在實務管理上,管理人員不可能會直接在 Photon OS 容器平台的 Console 畫面操作,通常都會透過 SSH 遠端登入進行維運管理的動作。然而,管理人員若安裝好 Photon OS 容器平台,並且組態設定好固定 IP 位址等網路資訊後,可能會發現雖然可以 SSH 遠端連線至 Photon OS 容器平台,但是卻無法使用 Root 管理者帳號登入,主要原因在於 Photon OS 容器平台的預設安全性設定所致。
首先,在預設情況下 Photon OS 容器平台的防火牆規則中,在安裝流程完畢後便會自動啟用並僅允許 SSH(TCP Port 22)能夠放行,然而對於 Linux 作業系統稍有管理經驗的管理人員便知,這是主機 SSH 遠端連線組態設定檔中不允許 Root 管理者帳戶遠端登入所致,而非防火牆規則未開啟所導致的問題。
倘若,管理人員希望能夠採用 Root 管理者帳號遠端登入 Photon OS 容器平台,請修改 SSH 組態設定檔「/etc/ssh/sshd_config」內容,將預設值從「PermitRootLogin no」修改為「PermitRootLogin yes」即可,也就是允許 Root 管理者帳號可以遠端登入 Photon OS 容器平台,接著再重新啟動 SSH 系統服務即可套用生效。
請注意!! 直接開啟允許 Root 管理者帳號遠端登入管理,將為 Photon OS 容器平台帶來一定程度的安全性風險。再次提醒,管理任何作業系統的基本資安觀念,便是不該直接開放最高權限管理者帳號能夠遠端登入,而是應該建立具備同等權限或剛好需要進行維運權限的使用者帳號後,才進行開放遠端登入的動作。
圖 13、組態設定讓 Photon OS 容器平台可透過 Root 管理者帳號遠端登入進行管理
Docker 容器管理服務
對於 RHEL / CentOS 等 Linux 作業系統稍有維運經驗的管理人員來說,應該會覺得 Photon OS 容器平台的維運管理非常類似。同時,從 RHEL 7 / CentOS 7 版本開始,管理系統服務的方式已經從傳統的 Runlevel(/etc/rc.d/init.d),改為新一代的 systemd(/etc/systemd/system)的方式進行系統服務的維運管理。那麼在 Photon OS 容器平台中,管理人員只要使用「systemctl start docker」指令便可以啟動 Docker 容器管理服務,接著使用「systemctl enable docker」指令組態設定 Photon OS 容器平台,在每次開機或重新啟動後都能夠自動啟動 Docker 容器管理服務,最後便可以使用「systemctl status docker」指令來確認 Docker 容器管理服務的執行狀態、PID……等資訊。
圖 14、啟動 Docker 容器管理服務並確認執行狀態、PID……等資訊
接著,便可以透過「docker info」指令查詢 Docker 容器管理服務的運作資訊,例如,目前有多少容器執行中 / 暫停中 / 停止中、目前有多少容器映像檔、Docker Server 的版本、Docker 使用的虛擬網路、核心版本、Docker 容器管理服務的根目錄……等資訊。或是使用「docker version」指令,查詢目前使用的 Docker Client 及 Docker Server 版本以及使用的 API 及 Go 語言版本資訊。
圖 15、查詢 Docker 容器管理服務的運作資訊及使用版本資訊
執行第 1 個容器 Hello-World
至此,我們已經安裝好 Photon OS 容器平台並組態設定好網路資訊,同時也順利啟用 Docker 容器管理服務。那麼,我們開始來使用 Docker 容器管理技術建立第 1 個容器吧,我們將透過 Docker 容器環境執行並列出字串「Hello-World」。請鍵入「docker run hello-world」指令,稍後便會看到系統列出「Hello from Docker !」的字串以及相關文字資訊。事實上,我們可以看到從執行指令後,在第 1 行系統顯示的資訊中(Unable to find image 'hello-world:latest' locally),說明目前系統發現目前在本機 Docker 映像檔存放庫中並沒有「Hello-World」這個 Docker 映像檔,所以系統就透過預設的系統設定連線至網際網路的 Docker Hub 公開映像檔存放庫,下載 Hello-World 這個容器映像檔(此時將自動執行「docker pull」的動作),最後執行列出字串的動作。
圖 16、建立及執行第 1 個容器 Hello-World
接著,可以透過「docker images」指令,查看目前 Photon OS 容器平台中 Docker 映像檔資訊。此外,管理人員可以再次執行「docker info」指令查詢,這次便會發現 Containers 欄位的變化「0 -> 1」,表示目前 Photon OS 容器平台中有 1 個容器,以及 Stopped 欄位的變化「0 -> 1」表示目前狀態為停止的容器為 1 個,和 Images 欄位的變化「0 -> 1」表示目前共有 1 個 Docker 容器映像檔。同時,預設下載的 Docker 容器映像檔,將會存放在 Docker 根目錄「/var/lib/docker」當中。
為何我們執行 Hello-World 容器後狀態不是 Running 而是 Stopped? 因為,Hello-World 這個容器的生命週期就是執行完列印字串 Hello-World 的動作後便結束,所以順利列印出字串後便進入 Stopped 狀態。
圖 17、查詢 Photon OS 容器平台中 Docker 映像檔資訊
執行第 2 個容器 Nginx 網頁伺服器
經過簡單的容器執行操作熱身後,接著實作在實務 Docker 容器環境當中常會使用到的 Nginx 網頁伺服器。值得注意的是,因為在本文實作環境中採用「Photon Full」安裝選項,所以在預設情況下已經自動啟動 httpd 系統服務並佔用 TCP Port 80,必須要把 httpd 系統服務停止並且停用自動啟動機制,以避免與稍後我們所要實作的 Nginx 網頁伺服器容器環境發生 Listen Port 衝突的情況。首先,我們執行「netstat -tunpl | grep ":80"」指令後可以看到,系統確實已經啟動 httpd 系統服務並佔用 TCP Port 80,所以請執行「systemctl stop httpd」指令停止 httpd 系統服務,此時 httpd 系統服務已經停止並釋放 TCP Port 80 的使用權。
接著,執行「systemctl disable httpd」指令,將 httpd 系統服務在開機或重新啟動時會自動啟動的機制關閉,以避免跟 Nginx 網頁伺服器容器發生 Listen Port 衝突的情況,然後執行「systemctl list-unit-files --type service | grep httpd」指令,確認停用 httpd 系統服務的動作是否套用生效。
圖 18、停止及停用 httpd 系統服務,以避免跟 Nginx 網頁伺服器容器環境發生衝突的情況
確認停止及停用 httpd 系統服務之後,便可以鍵入「docker run -d -p 80:80 vmwarecna/nginx」指令,執行下載及執行 Nginx 網頁伺服器容器環境的動作,同樣的可以看到目前 Photon OS 容器平台並沒有 Nginx 網頁伺服器容器映像檔,所以仍自動透過預設的系統設定連線至網際網路的 Docker Hub 公開映像檔存放庫,下載 vmwarecna 下的 nginx 容器映像檔並執行它。
完成下載及執行 Nginx 網頁伺服器容器環境的動作後,首先我們執行「docker images」指令可以看到,目前 Photon OS 容器平台列出的 Docker 容器映像檔清單中,多出了 vmwarecna/nginx 項目並且佔用的儲存空間為 93.48 MB。
然後,請執行「docker ps」指令後可以看到,在 PORTS 欄位有顯示「0.0.0.0:80 -> 80/tcp」的資訊,這表示當外部連線請求送至 Photon OS 容器平台後,將會透過 Docker 容器虛擬網路環境的 Bridge 機制,轉導向連線請求至 Nginx 網頁伺服器容器的 TCP Port 80。
圖 19、下載並執行 Nginx 網頁伺服器容器環境
然而,管理人員可能會發現開啟瀏覽器,嘗試連結 Photon OS 容器平台的 TCP Port 80 時,卻無法看到應該看到的 Nginx 網頁伺服器的歡迎頁面。主要原因在於,預設情況下 Photon OS 容器平台的 IPTables 防火牆規則,僅允許放行 TCP Port 22 的流量其餘則未開放並全部阻擋,所以才無法看到 Nginx 網頁伺服器的歡迎頁面。
圖 20、IPTables 防火牆封包進出、轉送、狀態等運作架構示意圖
因此,在本文實作環境中我們開放允許 TCP Port 80 的流量通過 IPTables 防火牆,以及在實務上常會用來判斷 Photon OS 容器平台是否 ping 回應的 ICMP 通訊協定。請修改「/etc/systemd/scripts/iptables」IPTables 防火牆組態設定檔,在允許放行 SSH 流量通過的防火牆規則下方,加上如下 2 行允許放行 TCP Port 80 及 ICMP 通訊協定的 IPTables 防火牆規則後存檔離開。
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
最後,執行「systemctl restart iptables」指令重新啟動 IPTables 防火牆系統服務後,新的 IPTables 防火牆規則便套用生效。此時,便可以使用「systemctl status iptables」指令確認重新啟動後,IPTables 防火牆系統服務是否正常運作中,以及使用「iptables -L」指令列出目前 IPTables 防火牆規則,便可以看到允許放行 TCP Port 80 及 ICMP 通訊協定的 IPTables 防火牆規則已經套用生效。
圖 21、放行 TCP Port 80 及 ICMP 通訊協定並確認 IPTables 防火牆規則已經套用生效
確認 IPTables 防火牆允許 TCP Port 80 流量通過後,此時便可以開啟瀏覽器再次確認能否看到 Nginx 網頁伺服器的歡迎頁面,結果當然是沒有問題可以順利看到 Nginx 網頁伺服器歡迎頁面。
圖 22、確認是否能夠順利看到 Nginx 網頁伺服器歡迎頁面
結語
透過本文的說明及實作相信讀者已經了解,針對 VMware 虛擬化運作環境最佳化的 Photon OS 容器平台,不管是在建立、執行、管理容器都非常簡單易用,確實可以協助企業及組織在將工作負載邁向微服務的路上更加輕鬆。