網管人雜誌

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



文章目錄

前言
vSAN 6.5 新功能
          iSCSI 存取
          2 台 vSAN Node 直接對接
          全功能 PowerCLI
          支援新世代硬碟 512e 進階格式
          全版本支援 All Flash
結語





前言

在 2016 年 11 月時,VMware 官方在 VMware VMworld 2016 大會上,正式發佈 VMware vSphere 6.5 最新版本並連同 VMware vSAN 6.5 版本也一起推出。簡單來說,VMware Virtual SAN(簡稱 vSAN),是 VMware 的「軟體定義儲存(Software-Defined Storage,SDS)」解決方案,它能夠將多台 x86 實體伺服器內的「本機硬碟(Local Hard Disk)」互相串連起來,進而將叢集當中所有 vSAN 節點主機的儲存資源整合起來,成為一個巨大的儲存資源池並且能夠互相共同使用。

圖 1、VMware vSAN 運作架構示意圖

事實上,從 VMware vSAN 版本的發佈頻率可知,VMware 官方對於打造 SDDC 軟體定義資料中心內,負責儲存資源的 SDS 軟體定義儲存技術的重視。第 1 代的 VMware vSAN 版本,是在 2014 年 3 月時隨著 vSphere 5.5 Update 1 版本開始內建(vSAN 1.0),接著在隔年推出第 2 代 VMware vSAN 版本,是在 2015 年 3 月隨著當時新版 vSphere 6.0 一同發佈,並直接與 vSphere 版本對齊成為 vSAN 6.0 版本(原訂新版本號應為 vSAN 2.0),在這個版本當中最重要的特色為支援 All Flash 運作架構,同時 vSAN 叢集規模可達到 64 台節點之多。
有關第 1 代 vSAN 運作架構及特色功能的詳細資訊,請參考本刊第 110 期《實戰部署 Virtual SAN套用政策自動化搭配 VM》,而第 2 代 vSAN 運作架構及特色功能的詳細資訊,請參考本刊第 114 期《動手建立 VSAN 6 儲存資源,實戰水平擴充與容錯網域》

接著,半年後於 2015 年 9 月時推出第 3 代的 vSAN 6.1 版本,其中最具代表性的功能便是「延伸叢集」(Stretched Cluster)與「支援 2 Nodes」的運作架構。再隔半年後於 2016 年 3 月推出第 4 代 vSAN 6.2 版本,在這個版本當中最重要的特色為 All Flash 運作架構,支援「重複資料刪除與壓縮」(Deduplication and Compression)及「RAID 5/6 EC 編碼技術」(RAID 5/6 Erasure Coding)。
有關第 3 代 vSAN 運作架構及特色功能的詳細資訊,請參考本刊第 120 期《VMware VSAN 延伸叢集,實作跨站點同步 HA 複寫》,而第 4 代 vSAN 運作架構及特色功能的詳細資訊,請參考本刊第 124 期《概覽 VMware VSAN 6.2 新功能加強健康狀態監控》

現在,於 2016 年 11 月隨著最新 VMware vSphre 6.5 的發佈也同時推出第 5 代的 vSAN 6.5 版本,此版本中重要的特色功能條列如下:
  • iSCSI 存取: 支援將 vSAN 儲存空間以 iSCSI目標的方式提供,讓具備 iSCSI 啟動器功能的伺服器能夠連接及使用 vSAN 儲存空間。
  • 2 台 vSAN Node 直接對接: 支援將 2 台 vSAN節點主機直接對接,讓企業及組織當中的分公司或小型企業在建置 vSAN 軟體定義儲存環境時,無須準備昂貴的 10GbE 網路交換器。
  • 全功能 PowerCLI: 在新版 vSAN 6.5 運作環境中,包括完整的 PowerCLI Cmdlet 功能讓企業及組織的自動化作業更具可擴充性及易用性。
  • 支援新世代硬體: 在新版 vSAN 6.5 運作環境中,支援新世代的 x86 硬體伺服器及相關元件,同時也支援 512e 新式大容量儲存裝置。
  • 全版本支援 All-Flash: 現在不管採用哪種 vSAN 6.5 授權版本,都可以使用及建置 vSAN All-Flash 運作架構。
圖 2、VMware Virtual SAN版本演進及新增功能示意圖





vSAN 6.5 新功能

在過去舊版的 vSAN 運作環境內,當 vSphere 管理人員將 vSAN 叢集中的節點主機儲存資源集合之後,儲存資源只能夠以「VMFS 檔案系統」的方式提供及運作 VM 虛擬主機。但是,對於需要採用其它方式使用儲存資源的應用程式或服務來說便會造成困擾,舉例來說,現行企業及組織當中有許多應用程式及服務的儲存資源,便是透過在伺服器中安裝及啟用「iSCSI 啟動器」(iSCSI Initiator)功能,然後透過 TCP/IP 乙太網路連接至「iSCSI 目標端」(iSCSI Target)所提供的 LUN 儲存資源,最後再將應用程式及服務運作在透過 iSCSI 協定所掛載的 LUN 儲存資源當中。

現在,最新版本的 vSAN 6.5 運作架構中,支援將整合後的 vSAN 儲存資源以 iSCSI 目標端的方式,提供給 iSCSI 啟動器掛載 LUN 儲存資源,有效解決過去舊版 vSAN 儲存資源美中不足的困擾。在運作規模方面,每個 vSAN 叢集最多支援提供 1,024 個 LUN 儲存資源,並且每個 LUN 儲存資源空間最大為 62 TB,同時每個 vSAN 叢集最多支援提供 128 個 iSCSI 目標

因為 iSCSI 目標所建立的 LUN 儲存資源,在 vSAN 運作架構底層中其實是以 VMDK 虛擬磁碟的方式存在,所以儲存空間與 VMDK 虛擬磁碟的限制相同為 62 TB。



iSCSI 存取

雖然,最終是以 iSCSI 協定提供儲存資源服務,但是整個運作架構底層還是建構在 vSAN 軟體定義儲存技術之上,所以當 vSAN 運作架構成型後 vSphere 管理人員若需要啟用 vSAN iSCSI 目標服務時非常簡單,並且同樣能夠以 vSAN 原有的「儲存原則」(Storage Policy),管控由 vSAN 所提供的 iSCSI LUN 儲存資源。此外,倘若運作環境中需要使用 iSCSI 的 CHAP 身分驗證機制時,那麼 vSAN iSCSI 目標也支援單向 CHAP 及雙向 CHAP 身分驗證機制。

圖 3、VMware vSAN 分散式 iSCSI Target 運作架構示意圖

啟用 iSCSI 目標服務
當 vSphere 管理人員需要啟用 vSAN iSCSI 目標服務時,請登入 vSphere Web Client 管理介面並點選叢集物件後,依序點選「Configure > Virtual SAN > General」項目,然後在 Virtual SAN iSCSI Target Service 組態設定區塊中按下「Edit」鈕,準備啟用 vSAN iSCSI 目標服務。

請在彈出的 Edit Virtual SAN iSCSI Target Service 視窗中,組態設定相關選項並在下拉式選單中選擇採用相關功能:
  • Enable Virtual SAN iSCSI target service: 請勾選此項目,以便啟用 vSAN iSCSI 目標服務。
  • Default iSCSI network: 透過下拉式選單指定屆時 vSAN iSCSI 目標服務,要採用哪個 VMkernel Port 進行 iSCSI 儲存流量傳輸作業。
  • Default TCP port: 指定 vSAN iSCSI 目標服務的連接埠號,請採用預設標準的 iSCSI 目標端連接埠號 3260 即可。
  • Default authentication: 透過下拉式選單指定 vSAN iSCSI 目標服務的身分驗證方式,預設值為 None 不啟用 CHAP 身分驗證機制,倘若需要的話 vSAN iSCSI 目標服務也支援單向 CHAP 及雙向 CHAP 身分驗證機制。
  • Storage policy for the home object: 透過下拉式選單指定 vSAN iSCSI 目標服務所要套用的 SPBM 儲存原則。
圖 4、啟用 vSAN iSCSI 目標服務功能及組態設定功能項目

建立 LUN 儲存資源
當 vSAN iSCSI 目標服務順利啟動後,接著便可以建立 iSCSI 目標及 LUN 儲存資源。請在 vSphere Web Client 管理介面中,依序點選「Configure > Virtual SAN > iSCSI Targets」項目後,在 Virtual SAN iSCSI Targets 組態設定區塊中按下「新增」鈕(綠色加號圖示),準備組態設定 vSAN iSCSI 目標及建立 LUN 儲存資源。

請在彈出的 New iSCSI Target 視窗中,組態設定相關選項並在下拉式選單中選擇採用相關功能:
  • Target IQN: 系統為 vSAN iSCSI 目標服務隨機產生的 iSCSI Target IQN。
  • Target alias: 管理人員可以為此 vSAN iSCSI 目標服務指定別名以利識別。
  • Target storage policy: 指定此 vSAN iSCSI 目標服務所要套用的 SPBM 儲存原則。
  • Network: 透過下拉式選單指定此 vSAN iSCSI 目標服務,要採用哪個 VMkernel Port 進行 iSCSI 儲存流量傳輸作業。
  • TCP port: 指定 vSAN iSCSI 目標服務的連接埠號,請採用預設的標準 iSCSI 目標端連接埠號 3260 即可。
  • Authentication: 透過下拉式選單指定此 vSAN iSCSI 目標服務的身分驗證方式,vSAN iSCSI 目標服務支援單向 CHAP 及雙向 CHAP 身分驗證機制,預設情況下請採用預設值 None 即可。
  • Add your first LUN to the iSCSI target(Optional): 請勾選此項目,以便建立及組態設定 LUN 儲存資源。
  • LUN ID: 指定此 LUN 儲存空間的 ID 數值。
  • LUN alias: 指定此 LUN 儲存空間的別名以利識別。
  • LUN storage policy: 指定此 LUN 儲存資源所要套用的 SPBM 儲存原則。
  • LUN size: 指定此 LUN 儲存資源的空間大小。
圖 5、組態設定 vSAN iSCSI 目標及 LUN 儲存資源

新增 iSCSI 啟動器存取清單
順利建立 LUN 儲存資源之後,在 Target Details 組態設定區塊中便會看到剛才所建立的 LUN 儲存資源資訊。最後,請在同組態設定區塊中切換到「Allowed Initiators」頁籤後按下「新增」鈕(綠色加號圖示),新增只有哪些 iSCSI 啟動器能夠存取此 vSAN iSCSI 目標所提供的 LUN 儲存資源。

圖 6、組態設定哪些 iSCSI 啟動器能夠存取 vSAN iSCSI 目標所提供的 LUN 儲存資源

現在,只要在允許存取 LUN 儲存資源清單中的 iSCSI 啟動器,便可以透過 TCP/IP 乙太網路順利存取由 vSAN iSCSI 目標所提供的 LUN 儲存資源。值得注意的是,根據 VMware 官方的最佳作法建議,倘若只是要運作 VM 虛擬主機的話,應該保持以原本的 VMFS 檔案系統來運作 VM 虛擬主機即可,倘若是要運作如 MSCS 微軟容錯移轉叢集或 Oracle RAC……等服務,並且規劃使用 IP-SAN(iSCSI)運作架構時才建議使用 vSAN iSCSI 目標服務。

在 vSAN iSCSI 目標服務容錯移轉的部分,因為 vSAN iSCSI 目標服務是完全整合於 vSAN 分散式運作架構,所以當 iSCSI 啟動器端連線時便會連接到 vSAN 目標端的「擁有者」(Owner)節點主機,並且由該台 vSAN 節點主機回應 iSCSI 啟動器端存取負責管理的 LUN 儲存資源。

倘若,原本負責 vSAN iSCSI 目標端擁有者的節點主機突然發生故障事件時,那麼便會由 vSAN 叢集中其它存活的節點主機接手服務,成為 vSAN iSCSI 目標端擁有者並且繼續服務 iSCSI 啟動器,而 iSCSI 啟動器便會連接至新的 vSAN iSCSI 目標端擁有者,繼續使用由 vSAN 叢集所提供的 LUN 儲存資源。

圖 7、vSAN iSCSI目標服務容錯移轉運作架構示意圖



2 台 vSAN Node 直接對接

事實上,在第 3 代 vSAN(vSAN 6.1)運作環境中,便已經支援「2 Node」的 vSAN 節點主機運作環境,也就是只要 2 台 vSAN 節點主機便能建構 vSAN 叢集,這樣的運作架構適用於企業及組織中分公司或小型運作環境時使用。然而這樣的 vSAN 運作架構雖然只有 2 台 vSAN 節點主機,卻仍需要配置 1 台昂貴的 10 Gbps 網路交換器,並且也僅用到該台 10 Gbps 網路交換器的 4 個連接埠而已,倘若考慮預防 SPOF 單點失敗情況的話,則需配置「2 台」10 Gbps 網路交換器,並且每台 10 Gbps 網路交換器只會用到 2 個連接埠而已,這對於建置分公司或小型 vSAN 運作規模的整體預算來說是項吃重的負擔。

現在,全新第 5 代 vSAN 6.5 運作環境中,原有 1 Gbps 負責 VM 虛擬主機網路傳輸的部分可繼續延用,然而原有 10 Gbps 負責 vSAN 節點主機資料同步的部分,正式支援 2 台 vSAN 節點主機透過「交叉式纜線」(Crossover Cables)的方式互相連接,無須再向過往舊版 vSAN 運作環境必須透過 10 Gbps 網路交換器。如此一來,建置分公司或小型 vSAN 運作環境時便無須再採購昂貴的 10 Gbps 網路交換器,因此能夠有效降低分公司或小型 vSAN 運作規模的整體預算,根據 VMware 官方分析調查的結果顯示可以有效降低約「20 %」的投資成本。

在組態設定部分,根據 VMware 官方的最佳作法建議,當在 vSAN 叢集當中的節點主機透過交叉式纜線互相連接之後,在 vSAN 節點主機網路流量規劃的部分,應該要將「vSAN 儲存流量」及「vMotion 遷移流量」分開在不同的 10 Gbps 纜線進行傳輸,以避免儲存或遷移流量互相干擾的情況發生,舉例來說,倘若 2 台 vSAN 節點主機正透過 vSAN 儲存流量網路大量同步資料狀態的情況下,此時又剛好以 vMotion 線上遷移機制大量遷移 VM 虛擬主機的話,那麼有可能會增加 10 Gbps 的網路延遲時間及工作負載。

因此,在 vSAN 節點主機網路流量規劃的部分,除了將儲存或遷移流量分開之外,也同時應設定為互相備援的組態配置以便故障情況發生時,能夠有另 1 個 10 Gbps 纜線進行網路流量的容錯移轉。

圖 8、2 台 vSAN 節點主機透過交叉式纜線連接後,網路流量規劃的組態配置示意圖

此外,在最新的 vSAN 6.5 版本開始,新增將「見證網路流量」(Witness Traffic)分離的功能,解決在 2 台 vSAN 節點主機上必須建立及維護靜態路由的組態設定,降低 vSAN 整體運作架構的複雜度,同時在安全性方面也得到改善,因為 vSAN 儲存網路流量與 WAN 見證網路流量得以完全分離。

因為,負責 vSAN 運作架構的見證虛擬設備不可以運作在 2 台 vSAN 節點主機上,同時一般來說 2 台 vSAN 節點主機的運作架構,通常是運作在企業及組織的分公司或遠端辦公室當中。倘若,分公司或遠端辦公室有透過 WAN 網路與主要辦公室連接時,那麼可以考慮將見證虛擬設備運作在主要辦公室當中,除了節省建置第 3 台 ESXi 主機以運作見證虛擬設備之外,將見證虛擬設備運作在主要辦公室以便統一進行管理。

圖 9、2 台 vSAN 節點主機及見證虛擬設備運作在主要辦公室運作架構示意圖



全功能 PowerCLI

在新版 vSAN 6.5 運作環境中,VMware 官方已經將 vSphere API 抽象化為簡單的 Cmdlet。因此,現在 vSphere 管理人員可以透過 VMware PowerCLI 的方式,以更快速且自動化的方式部署及管理 vSAN 運作環境:
  • 啟用重複資料刪除及壓縮機制。
  • 啟用 vSAN 效能服務。
  • 組態設定 vSAN 健康檢查服務。
  • 建立 All Flash 磁碟群組。
  • vSAN 故障網域管理。
  • 組態設定 vSAN 延伸叢集。
  • 為維護模式選擇正確的資料遷移選項。
  • 檢索儲存空間資訊。
圖 10、透過 VMware PowerCLI 管理 vSAN 運作環境示意圖



支援新世代硬碟 512e 進階格式

過去,舊有的儲存裝置(硬碟)都採用「512 Byte Sector」(又稱為 512n)格式,而新式儲存裝置「進階格式」(Advance Format,AF)則是採用「4,096 Byte Sector」(又稱為 4Kn)格式。現在,從 VMware vSphere 6.5 及vSAN 6.5 版本開始,只要配合最新的「VMFS 6」檔案系統便全面支援以「512e(512B Emulation)」的方式運作,也就是以 512e 模擬 4K 的方式運作配合實體硬碟特性增強整體運作效能。
請注意!! 採用舊版 vSAN 或 VMFS 檔案系統的話,不支援以 512e 的方式運作所以採用 512e 的儲存裝置時,可能會引發或造成潛在的運作效能問題。有關 512 / 4,096 Byte Sector 詳細資訊請參考 VMware KB 2091600

圖 11、vSAN 6.5 支援新式進階格式 512e 儲存裝置示意圖

簡單來說,「磁區大小」(Sector Size)是影響作業系統及 Hypervisor 虛擬化管理程序運作效能的關鍵,因為它是儲存裝置(硬碟)最底層 I/O 的基本單位。因此,新式 512e 與舊有 512n 相較之下,雖然新式 512e 邏輯磁區大小也是 512 Byte,但是實體磁區大小則是 4,096 Byte 這是二者間最大的不同,所以在資料的「讀取-修改-寫入」(Read-Modify-Write,RMW)行為上,新式的 512e 與舊有的 512n 相較之下,會減少許多在資料 RMW 行為時效能懲罰的部分。

雖然,原生 4Kn 不管在邏輯磁區大小或實體磁區大小都是 4,096 Byte,但是目前的情況為並非所有儲存裝置、作業系統及 Hypervisor 虛擬化管理程序都完全支援。在下列表格中,為讀者們條列舊有 512n 及新式 512e 和原生 4Kn 在邏輯及實體磁區大小上的運作差異:

請注意!! 目前最新版本的 VMware vSphere ESXi 6.5 及 vSAN 6.5 運作環境中,仍尚未支援原生 4K 儲存裝置。
在目前儲存裝置市場中,支援新式進階格式 512e 的儲存裝置空間從 300 GB 到 10 TB 都有,並且通過 VMware vSAN 6.5 版本硬體認證的 512e 硬碟約有 230 個型號,不同 OEM 硬碟供應商所通過的數量不定。建議在使用及建置前應向硬碟供應商再次確認,所使用的硬碟是否支援新式進階格式 512e,以確保屆時建置的 VMware vSAN 6.5 運作效能及穩定性。

圖 12、各家 OEM 廠商通過 VMware vSAN 6.5 版本硬體認證的 512e 硬碟統計圖



全版本支援 All Flash

雖然,VMware vSAN 從第 2 代 vSAN 6.0 版本開始便支援 All Flash 運作架構,然而在過去的 vSAN 軟體授權版本當中,至少要採用「進階版或企業版」的 vSAN 軟體授權才能夠使用 All Flash 的運作架構及特色功能。

現在,最新的 VMware vSAN 6.5 版本當中,不管採用哪種 vSAN 軟體授權版本皆支援使用 All Flash 運作架構。因此,即便是由 2 台 vSAN 節點主機所建構的小型 vSAN 運作環境,也能夠使用 All Flash 的硬體運作架構,為需要高 IOPS 儲存效能的分公司或小型 vSAN 環境提供解決方案。

值得注意的是,雖然開放「標準版」及「ROBO 版」支援採用 All Flash 硬體架構來建立 vSAN 運作環境,但是在 All Flash 運作架構中進階特色功能,例如,「重複資料刪除及壓縮」、「RAID5/6 Erasure Conding」特色功能,仍需要採用「進階版或企業版」vSAN 軟體授權才能夠使用。

此外,如果要讓建置的 vSAN 運作架構支援「延伸叢集」或「IOPS 儲存效能管控」特色功能時,那麼只能採用「企業版」的 vSAN 軟體授權才能夠使用這 2 項進階功能特色。

圖 13、VMware vSAN 6.5 軟體授權可使用特色功能示意圖





結語

透過本文的說明及實作相信讀者已經了解,在第 5 代最新 vSAN 6.5 版本當中有哪些特色功能,能夠幫助企業及組織建立更靈活、高擴充性、高可用性的 SDS 軟體定義儲存運作環境。

同時,對於企業及組織的分公司或小型企業運作環境來說,以往在建立虛擬化環境時令人困擾的初期建置成本問題,在新版 vSAN 6.5 當中透過交叉式纜線的方式解決僅 2 台 vSAN 節點主機,就必須採購昂貴 10Gbps 網路交換器的問題。

[2017/3/14 Update] 上傳活動照片及簡報

活動簡介

根據知名市調機構 Gartner 的統計調查結果,從 2016 年開始有「2/3 以上」的企業及組織,將開始建構及整合「Mode 2」的敏捷式 IT 基礎架構,所謂「基礎架構敏捷化」(Infrastructure Agility),便是著重於 IT 基礎架構中「Mode 2」的部分以便因應商業數位化的需求。

此外,根據 Gartner 的預測,在 2017 年時全球大型企業中將有高達「75 %」的比例,會建立 Mode 1 及 Mode 2 的雙重 IT 基礎架構稱之為「Bimodal IT」。在傳統 Mode 1 當中的工作負載、技術、流程、部署模式已經行之有年無須再驗證,但 Mode 2 是新興的方式並在根本上與 Mode 1 不同,它強調的是「敏捷性」(Agility)「可擴充性」(Scalability)以提高開發人員的生產力,達到快速推出新服務的一種方式,舉例來說,「容器」(Container)技術可以幫助開發人員達到更好的敏捷性。簡單來說,傳統的 Mode 1 運作架構專注於「基礎架構管理」,而新興的 Mode 2 則是專注於「工作負載為中心」。

在本次聚會中將快速與大家討論及實作,如何透過 Microsoft Azure 公有雲環境,快速建立 ubuntu、CentOS、FreeBSD 虛擬主機,並且安裝及建立 Docker 容器測試環境。同時,也將實作及展示 Windows Server 2016 Container 容器環境。



活動資訊



活動照片及簡報

對於今天無法到場參與 Live Hands-On 及討論的朋友,可以參考看看今天議程的簡報。😎





課程簡介

  • 熟悉雲端運算定義 五種服務特徵、四種部署模型、三種服務類型。
  • 針對建置企業私有雲網路環境時,該如何規劃 VM 虛擬主機的各種傳輸流量,如 VM 網路服務流量、高可用性遷移流量、容錯移轉流量…等以避免造成傳輸瓶頸。
  • 從針對不同儲存設備類型特性的認識,到私有雲運作環境該如何規劃及計算儲存設備 IOPS 效能,以避免資料傳輸瓶頸產生 VM 虛擬主機運作效能不佳的情況。



課程資訊

日期: 2017/4/29 ~ 2017/6/17
時間: 每週六 09:00 ~ 12:00、13:30 ~ 16:30
地點: 國立臺北商業大學 (臺北市中正區濟南路一段321號)
網址: Hyper-V 私有雲規劃與建置實務班



網管人雜誌

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





文章目錄

前言
實戰 Hyper-V 巢狀式虛擬化
          Guest Hypervisor 安裝 Hyper-V 角色
          Guest Hypervisor 啟用 MAC 位址變更機制
          Guest Hypervisor 啟用 NAT 機制
          Nested VM 再生 Nested VM?
結語





前言

在伺服器虛擬化運作環境中,談到「巢狀式虛擬化」(Nested Virtualization)的運作環境時,大家通常都會想到 VMware vSphere 虛擬化解決方案。沒錯,在過去的 Hyper-V 虛擬化平台當中,要建構出「巢狀式虛擬化」的運作環境,確實非常困難並且難以達成的。現在,透過最新發行的 Windows Server 2016 雲端作業系統,所建構的 Hyper-V 虛擬化平台便能原生內建支援「巢狀式虛擬化」運作機制。
事實上,從 Windows Server 2016技術預覽版本 4 的「10565」組建號碼開始,便原生內建支援巢狀式虛擬化機制。

簡單來說,在過去舊版 Hyper-V 虛擬化平台運作架構中,最底層 Hyper-V Hypervisor 虛擬化管理程序,將會完全管控「虛擬化擴充功能」(Virtualization Extensions)的部分,也就是如圖 1 所示中「橘色箭頭」的部分。同時,Hyper-V Hypervisor 並不會將底層硬體輔助虛擬化功能,傳遞給運作於上層的客體作業系統,所以在舊版的 Hyper-V 虛擬化平台上很難實作出巢狀式虛擬化的運作環境。

圖 1、舊版 Hyper-V 虛擬化平台運作架構(不支援巢狀式虛擬化)


現在,透過最新 Windows Server 2016 雲端作業系統所建置的 Hyper-V 虛擬化平台當中,Hyper-V Hypervisor 虛擬化管理程序,已經可以順利將「虛擬化擴充功能」也就是底層硬體輔助虛擬化技術,傳遞給 Hyper-V 虛擬化平台上運作的客體作業系統了。

因此,當 Hyper-V 虛擬化平台上運作的客體作業系統為 Windows Server 2016 時,因為能夠順利接收到由底層所傳遞過來的硬體輔助虛擬化技術,所以便能啟用 Hyper-V 虛擬化功能並建立 VM 虛擬主機,達成 VM 虛擬主機中再生出 VM 虛擬主機的巢狀式虛擬化運作架構。
事實上,當客體作業系統運作 Windows 10 時,也能順利接收底層所傳遞過來的硬體輔助虛擬化技術,達成 VM 虛擬主機中再生出 VM 虛擬主機的巢狀式虛擬化運作架構。
圖 2、新版 Hyper-V 虛擬化平台運作架構(支援巢狀式虛擬化)

此外,一般對於巢狀式虛擬化技術的認知,僅止於建立測試研發環境上具備方便度而已,通常在線上營運的運作環境中並不會使用到巢狀式虛擬化技術。然而,在新版 Windows Server 2016 中 Hyper-V 虛擬化平台支援巢狀式虛擬化技術,並非只是為了達到 Nested VM 這種 VM 虛擬主機再生出 VM 虛擬主機,方便建立測試研發環境的目的而已。

在新一代 Windows Server 2016 雲端作業系統運作環境中,同時支援 Windows Containers 及 Hyper-V Container 這 2 種容器技術運作環境,其中「Hyper-V Container」容器技術運作環境的部分,便是在 VM 虛擬主機中再運作 Container 容器環境,達到更進一步的容器技術隔離運作環境。事實上,Hyper-V Container 的容器技術運作環境,便是透過 Hyper-V 巢狀式虛擬化技術所達成的。

圖 3、Windows Containers 與 Hyper-V Containers 運作架構示意圖





實戰 Hyper-V 巢狀式虛擬化

在開始實作 Hyper-V 巢狀式虛擬化機制之前,我們先了解建立 Hyper-V 巢狀式虛擬化的運作環境需求以及相關限制:

Hyper-V 主機(Hyper-V Hypervisor)
  • 運作 Hyper-V 巢狀式虛擬化技術的實體伺服器,在 CPU 處理器硬體輔助虛擬化技術的部分,必須採用支援「Intel VT-x 及 EPT」虛擬化擴充功能的 CPU 處理器才行。
  • 作業系統的部分,必須採用 Windows 10 年度更新版(Enterprise、Professional、Education)或 Windows Server 2016(Standard、Datacenter)等版本。

VM 虛擬主機(Guest Hypervisor)
  • 必須採用「第 2 世代」以及新版「8.0」的 VM 虛擬主機格式。
  • 作業系統的部分,必須採用 Windows 10年度更新版(Enterprise、Professional、Education)或 Windows Server 2016(Standard、Datacenter)等版本。
  • 必須「啟用」vCPU 虛擬處理器的虛擬化擴充功能,才能夠順利接收由底層 Hyper-V 虛擬化平台所傳遞的硬體輔助虛擬化技術。
  • 建議「停用」動態記憶體功能。雖然,啟用動態記憶體功能仍然不影響 VM 虛擬主機的運作,但倘若嘗試調整記憶體空間大小時(也就是執行 Runtime Memory Resize 的動作),將會發生失敗的情況。
  • 必須「啟用」MAC Address Spoofing 機制,或建立具備 NAT 功能的 vSwitch 虛擬網路交換器,否則屆時建立的 Nested VM 虛擬主機,將會發生無法與實體網路環境連通或連線至網際網路的情況。

上述 Hyper-V 巢狀式虛擬化的運作環境需求僅為大方向的重點規劃要項,下列將針對 Hyper-V 實體伺服器在 CPU 處理器及記憶體方面的選擇及規劃給予建議。

CPU 處理器的選擇
事實上,從 Windows Server 2008 R2 作業系統版本開始,Windows Server 便僅提供 64 位元的作業系統版本,當然 Windows Server 2012 和 2012 R2 以及新世代的雲端作業系統 Windows Server 2016 也不例外。因此,在選擇原生 64 位元的 CPU 處理器時,請選擇具備更多「定址空間」及具備大容量「L2 / L3 快取」空間的 CPU 處理器,甚至較新世代的處理器如 Intel Haswell、Broadwell 更支援 L4 快取,當擔任 Hyper-V 角色的硬體伺服器配置這樣的 CPU 處理器時,將能夠讓 Hyper-V 伺服器擁有更強大的運算資源。
請注意,雖然從 Windows Server 2008 R2 作業系統版本開始,Windows Server 便不再發行 32 位元版本,但是在原生 64 位元的 Windows Server 環境中運作 32 位元的應用程式,並不會有任何問題產生。

至於,在選擇 CPU 處理器時,應該選擇追求「高時脈」以得到高效能的運算速度,或者是著重在選擇「多核心」以達到平行運算,則應該視屆時運作於 Hyper-V 虛擬化平台上 VM 虛擬主機當中的工作負載類型而定,舉例來說,倘若 VM 虛擬主機當中的應用程式是屬於「單線程」(Single-Thread)類型的話,那麼便應該選擇採用「高時脈」類型的 CPU 處理器,倘若 VM 虛擬主機當中的應用程式是屬於「多線程」(Multi-Thread)類型的話,那麼便應該選擇採用「多核心」類型的 CPU 處理器,如此一來才能夠讓 VM 虛擬主機當中的工作負載得到最佳化的運算效能。

此外,在選擇 CPU 處理器硬體輔助虛擬化技術的部分,目前主流的 CPU 處理器皆已經支援第一代硬體輔助虛擬化技術(例如,Intel VT-x 或 AMD-V),以及第二代硬體輔助虛擬化技術或稱第二層位址轉譯 SLAT(例如,Intel EPT 或 AMD NPT),以便降低因為虛擬化技術所造成的硬體資源耗損。
請注意,在 Windows Server 2016 所建構的 Hyper-V 虛擬化平台中,倘若要建立 Hyper-V 巢狀式虛擬化運作環境的話,目前僅支援 Intel 處理器的硬體輔助虛擬化技術「Intel VT-x 及 EPT」,尚未支援採用 AMD 處理器「AMD-V 及 NPT」虛擬化擴充功能建立 Hyper-V 巢狀式虛擬化運作環境。

Memory 記憶體的選擇
在建構 Hyper-V 虛擬化平台的硬體伺服器上,針對實體記憶體的部分當然是越多越好。因為,當實體伺服器記憶體空間不足時,便會迫使 Windows Server 透過硬碟空間產生「分頁檔案」,以便嘗試渡過記憶體空間不敷使用的情況,此時將會直接影響並降低實體伺服器的運作效能。

倘若,因為 IT 預算的關係在短期之內真的無法購足實體記憶體時,則會建議應該依照如下準則來優化分頁檔案的運作效率:

  • 請將分頁檔案產生在實體隔離的硬碟環境,也就是不要跟作業系統或應用程式共用同一個硬碟空間。
  • 雖然將分頁檔案建立在具備容錯機制的硬碟空間中(例如,RAID 1),可能會導致更慢的儲存 I/O 效能,但是倘若將分頁檔案存放於「未」具備容錯機制的硬碟空間時,雖然會獲得較快的儲存 I/O 效能,然而一旦該硬碟發生災難事件時可能會導致「系統崩潰」的情況發生。
  • 請保持分頁檔案隔離原則,不要將「多個」分頁檔案同時建立在同一個硬碟內。

此外,應該要選擇支援 NUMA 架構的實體伺服器,以避免 CPU 處理器與記憶體之間的資料存取行為,因為匯流排頻寬不足的問題而產生存取瓶頸。值得注意的是,當採用支援 NUMA 架構的實體伺服器時,必須要注意實體記憶體空間必須平均分配到不同的 NUMA 節點,以避免 CPU 處理器仍需跨越 NUMA 節點進行記憶體空間的存取。

了解,上述 Hyper-V 伺服器在 CPU 處理器及記憶體的選擇規劃,以及實作 Hyper-V 巢狀式虛擬化的運作環境需求及限制等準則之後,接著便可以開始實作 Nested VM 巢狀式虛擬化運作環境。



Guest Hypervisor 安裝 Hyper-V 角色

首先,我們在實體伺服器所建構的 Hyper-V 虛擬化平台中,建立擔任 Guest Hypervisor 角色名稱為「WS2016-Outer」的 VM 虛擬主機,同時採用「第 2 世代」以及新版「8.0」的 VM 虛擬主機格式,在客體作業系統的部分則是採用 Windows Server 2016 DataCenter 版本。

圖 4、建立擔任 Guest Hypervisor 角色的 VM 虛擬主機

登入 WS2016-Outer 虛擬主機之後,我們可以直接開啟伺服器管理員並嘗試安裝 Hyper-V 伺服器角色,然而你會發現當你勾選「Hyper-V」伺服器角色項目後,在系統執行檢查程序完畢時將會出現「無法安裝 Hyper-V:處理器沒有必要的虛擬化功能」的錯誤訊息。

圖 5、擔任 Guest Hypervisor 角色的 VM 虛擬主機,無法順利安裝 Hyper-V 伺服器角色

此時,我們可以透過 Coreinfo 虛擬化擴充功能檢查工具,下載後解壓縮無須安裝直接在開啟的命令提示字元視窗中鍵入「coreinfo.exe -v」指令,便可以檢查目前在 WS2016-Outer 虛擬主機中,是否擁有 Intel VT-x 及 EPT 硬體輔助虛擬化功能。如圖 6 所示,可以看到在檢查的顯示結果中,目前擔任 Guest Hypervisor 角色的虛擬主機並沒有任何的硬體輔助虛擬化功能,所以才會導致無法順利安裝 Hyper-V 伺服器角色。

圖 6、目前擔任 Guest Hypervisor 角色的虛擬主機並沒有任何硬體輔助虛擬化功能

因此,我們必須為擔任「Guest Hypervisor」角色的 VM 虛擬主機,執行「啟用」vCPU 虛擬處理器虛擬化擴充功能的動作,如此一來 VM 虛擬主機才能順利接收,由底層 Hyper-V 虛擬化平台所傳遞而來的 Intel VT-x 及 EPT 硬體輔助虛擬化技術。

值得注意的是,擔任 Guest Hypervisor 角色的 VM 虛擬主機必須為「關機(Power Off)」狀態,才能透過 PowerShell 順利執行啟用 vCPU 虛擬處理器虛擬化擴充功能的動作,倘若 VM 虛擬主機為「運作中(Power On)」狀態的話,那麼當你執行啟用 vCPU 虛擬處理器虛擬化擴充功能的動作時,將會得到 PowerShell 指令執行失敗的情況。

圖 7、VM 虛擬主機必須關機,否則啟用 vCPU 虛擬處理器虛擬化擴充功能的動作會失敗

順利將 WS2016-Outer 虛擬主機關機後,便可以執行啟用 vCPU 虛擬處理器虛擬化擴充功能的動作,並且於指令執行完畢後再次確認 VM 虛擬主機屬性中,「ExposeVirtualizationExtensions」的欄位值是否為「True」以便確認變更作業已經套用生效。

圖 8、確認 VM 虛擬主機是否啟用 vCPU 虛擬處理器虛擬化擴充功能

請將擔任 Guest Hypervisor 角色的 VM 虛擬主機重新開機並登入後,再次執行 Coreinfo 虛擬化擴充功能檢查作業。如圖 9 所示,可以看到在檢查的顯示結果中,擔任 Guest Hypervisor 角色的虛擬主機,已經順利接收到由底層 Hyper-V 虛擬化平台所傳遞而來的 Intel VT-x 及 EPT 硬體輔助虛擬化技術。

圖 9、VM 虛擬主機,順利接收底層 Hyper-V 虛擬化平台傳遞的 Intel VT-x 及 EPT 硬體輔助虛擬化技術

此時,請開啟伺服器管理員並再次嘗試為 WS2016-Outer 虛擬主機,安裝 Hyper-V 伺服器角色時便可以發現能夠順利新增並安裝完成。

圖 10、順利為 WS2016-Outer 虛擬主機安裝 Hyper-V 伺服器角色



Guest Hypervisor 啟用 MAC 位址變更機制

當你順利為 WS2016-Outer 虛擬主機安裝 Hyper-V 伺服器角色,並且在 WS2016-Outer 虛擬主機中建立名稱為「WS2016-Inner」的虛擬主機後,此時你將會發現 WS2016-Inner 虛擬主機的網路組態設定雖然正確無誤,但是它卻無法順利與實體網路環境溝通或連接到網際網路?

主要原因在於,在 Hyper-V 巢狀式虛擬化運作架構中的 VM 虛擬主機(又稱為 Nested VM 虛擬主機),必須在上層 Guest Hypervisor 虛擬主機中,啟用「MAC 位址變更」(MAC Address Spoofing)功能,以便 Nested VM 虛擬主機的網路封包,能夠順利在 2 層(Hyper-V Hypervisor 及 Guest Hypervisor)虛擬網路交換器之間順利路由,才能夠與實體網路環境溝通或碰觸到網際網路。

因此,Hyper-V 主機的管理人員可以透過 PowerShell 指令,或者是 Hyper-V 管理員操作介面進行啟用 MAC 位址變更的動作。倘若,透過 PowerShell 指令進行組態設定的話,請在 Hyper-V 主機指定為「WS2016-Outer」虛擬主機開啟 MAC 位址變更功能,並於執行後再次確認 VM 虛擬主機屬性中「MacAddressSpoofing」欄位值為「On」,以便確認變更作業已經套用生效。

圖 11、透過 PowerShell 指令,為 Guest Hypervisor 啟用 MAC 位址變更功能

或者,管理人員也可以開啟 Hyper-V 管理員操作介面,選擇 WS2016-Outer 虛擬主機後依序點選「設定 > 網路介面卡 > 進階功能」項目,然後勾選「啟用 MAC 位址變更」選項即可。

圖 12、透過 Hyper-V 管理員,為 Guest Hypervisor 虛擬主機啟用 MAC 位址變更功能

完成 Guest Hypervisor 虛擬主機啟用 MAC 位址變更功能的組態設定後,便可以發現「WS2016-Inner」Nested VM 虛擬主機,已經可以順利通過 WS2016-Outer 這台 Guest Hypervisor 的 vSwitch 虛擬網路交換器,以及 HV01 這台 Hyper-V 實體伺服器的 vSwitch 虛擬網路交換器進行路由,進而與實體網路環境溝通或碰觸到網際網路。

圖 13、Nested VM 虛擬主機,順利在 2 層 vSwitch 虛擬網路交換器之間順利路由



Guest Hypervisor 啟用 NAT 機制

當 Guest Hypervisor 虛擬主機,運作在你能掌控的 Hyper-V 虛擬化平台時,便可以透過上述 PowerShell 指令或 Hyper-V 管理員,幫 Guest Hypervisor 虛擬主機啟用 MAC 位址變更功能,進而讓 Nested VM 虛擬主機能夠與實體網路環境溝通或碰觸到網際網路。

倘若,Guest Hypervisor 虛擬主機運作在你「無法」掌控的 Hyper-V 虛擬化平台時,例如,Microsoft Azure 公有雲服務。或者,其它並非採用 Hyper-V 虛擬化解決方案的虛擬化平台,例如,Amazon AWS 公有雲服務 、VMware vSphere 虛擬化解決方案……等。

此時,便需要在 Guest Hypervisor 虛擬主機端,建立具備 NAT 功能的 vSwitch 虛擬網路交換器,以便屆時在 Guest Hypervisor 中所產生的 Nested VM 虛擬主機,能夠順利與實體網路環境溝通或碰觸到網際網路。

請在 Guest Hypervisor 虛擬主機端,執行 PowerShell 指令或透過 Hyper-V 管理員操作介面,建立類型為「內部」(Internal)的 vSwitch 虛擬網路交換器。如圖 14 所示,我們透過「New-VMSwitch」的 PowerShell 指令建立名稱為「VM-NAT」,並且類型為內部的 vSwitch 虛擬網路交換器,然後透過 Hyper-V 管理員操作介面驗證是否建立完成。

圖 14、建立屆時 Nested VM 虛擬主機對外溝通連線的 vSwitch 虛擬網路交換器

接著,再次執行「New-NetNat」的 PowerShell 指令,建立屆時用於 NAT 運作機制中的 IP 網段,在本文實作環境中建立名稱為「LocalNAT」,並且採用「192.168.100.0/24」IP 網段的 NAT 網路環境。

圖 15、建立屆時用於 NAT 運作機制中的 IP 網段網路環境

最後,再為剛才所建立名稱為 VM-NAT 的虛擬網路交換器指定所要採用的 IP 位址即可。在本文實作環境中,我們指派 VM-NAT 虛擬網路交換器採用「192.168.100.254」的 IP 位址,屆時 Nested VM 虛擬主機在設定網路組態時,便需要將預設閘道的 IP 位址設定為 192.168.100.254 後,才能順利與實體網路環境溝通或碰觸到網際網路。

圖 16、為 VM-NAT 虛擬網路交換器指派使用 192.168.100.254 的 IP 位址

在 Guest Hypervisor 虛擬主機端進行 NAT 組態設定的動作執行完畢後,首先請為 Nested VM 虛擬主機調整該網路介面卡所連接的 vSwitch 虛擬網路交換器,在本文實作環境中便是將 WS2016-Inner 虛擬主機的網路介面卡,改為連接至剛才我們所建立的 VM-NAT 虛擬網路交換器,然後在設定網路組態的部分則是指派為 192.168.100.10,當然最重要的是預設閘道必須指向至 192.168.100.254 的 IP 位址。此時,Nested VM 虛擬主機便可以順利透過 WS2016-Outer 虛擬主機,也就是 Guest Hypervisor 的 VM-NAT 虛擬網路交換器進行 NAT 進而能夠碰觸到網際網路。

圖 17、Nested VM 虛擬主機,透過具備 NAT 功能的 vSwitch 虛擬網路交換器碰觸到網際網路



Nested VM 再生 Nested VM?

至此,我們已經順利透過新一代 Windows Server 2016 雲端作業系統,原生內建的 Hyper-V 巢狀式虛擬化技術建立 Nested VM 運作環境,讓管理人員只要透過 1 台硬體伺服器,便能建立出「Hyper-V Host > Guest Hypervisor > Nested VM」的 Hyper-V 巢狀式虛擬化運作環境。

那麼,有沒有可能更進一步在 Nested VM 虛擬主機中再生出 Nested VM 虛擬主機?答案是可行的,只要遵循前述所條列的 Hyper-V 巢狀式虛擬化技術運作環境需求及限制,便可以讓 Nested VM 再生出 Nested VM 虛擬主機。

因為實作方式與前述的操作步驟相同所以便不再贅述,如圖 18 所示我們總共建立出 4 層的 Hyper-V 巢狀式虛擬化技術運作環境:

第 1 層(HV01):Hyper-V Hypervisor 實體伺服器。
     第 2 層(WS2016-Outer):VM 虛擬主機並擔任 Guest Hypervisor。
          第 3 層(WS2016-Inner):Nested VM 虛擬主機並再擔任 Guest Hypervisor。
               第 4 層(WS2016-Innermost):由 Nested VM 再生出的 Nested VM 虛擬主機。

圖 18、由 Nested VM 再生出的 Nested VM 虛擬主機





結語

透過本文的說明及實作演練,相信讀者已經完全了解新一代 Windows Server 2016 雲端作業系統中,原生內建的 Hyper-V 巢狀式虛擬化的強大功能,善用此機制相信能夠有效幫助管理人員只要利用少量的實體伺服器,就能夠建構出複雜的測試研發環境有效減少過往建立測試研發環境時的困擾。

前言

Photon 由 VMware 官方在 2015 年 4 月發行,它是由 VMware 自家所開發的 Linux 版本專為 vSphere 環境所優化的 Container 運作平台 (同時,也支援其它常見的容器格式,例如,Docker, Rocket (rkt), Pivotal Garden),並且移除 Linux Kernel 及 vSphere Hypervisor 重複的核心快取,以便提升整體運作效能。

此外,Photon OS 可以部署在 vSphere ESXi 5.5、6.0 虛擬化平台,以及 vCloud Air、VMware Fusion、VMware Workstation 等虛擬化環境中。下列為入門 Photon OS 很棒的參考文件及影片:





Photon 安裝需求

Photon OS 安裝及初始設定的詳細操作步驟,請參考官方影片及說明文件:


在此次的實作環境中,採用的 Photon-1.0 ISO 大小為 2.06 GB,倘若採用 VM 的方式安裝 photon 時,記得在選擇 OS 類型時採用「Linux - Other Linux 3.x kernel 64-bit」。下列為安裝 Photon OS 的最低硬體需求:
  • 2 vCPU
  • 384 MB Memory
  • 20 GB HDD


在安裝 Photon 過程中,將有下列 4 種安裝選項可供選擇:
  • Photon Minimal: 為最輕量的 Container Host Runtime 運作環境,具備最高效能及安全性的版本。
  • Photon Full: 包含額外的套件以方便建立及打包應用程式為容器環境,適合一開始使用 Photon 進行驗證及測試的版本。
  • Photon OSTree Host: 將會建立 Photon OS Instance 並從 RPM-OSTree Server 下載相關 Package 及 Library,並且後續由 OSTree Server 集中管理。
  • Photon OSTree Server: 將會建立 Repository 及負責管理 OSTree Hosts,為單位生命週期管理及企業級規模擴充的工作任務。


此次實作環境中,選擇「Photon Full」安裝選項並花費 225 秒即安裝完畢。





基礎操作

查看 Photon OS 主機系統資訊。此外,倘若 Photon OS 是運作在 VM 虛擬主機的話,可以透過「systemctl status vmtoolsd」指令查看 VMware Tools 服務的運作情況。
# uname -a
# cat /etc/photon-release
# hostnamectl


從 RHEL 7 / CentOS 7 開始,管理服務的部分已經從傳統的 Runlevel (/etc/rc.d/init.d),改為新一代的 systemd  (/etc/systemd/system)。因此,採用與 RedHat / CentOS 相關 Linux 核心的 Photon OS 便可以使用「systemctl start docker」指令來啟動 docker 服務,接著透過「systemctl enable docker」設定 Photon 主機重新啟動後,仍然能夠自動啟動 docker 服務。接著,可以透過傳統的「ps aux |grep docker」來確認 Docker Daemon 是否啟動,或採用新一代的指令「systemctl status docker」來確認目前 Docker Daemon 的執行狀態、PID……等資訊。
# systemctl start docker
# systemctl enable docker
# ps aux |grep docker
# systemctl status docker


透過「docker info」可以查看 Docker 容器環境的運作資訊,條列一下我覺得輸出資訊中比較重要的項目:
  • Server Version: 1.11.0
  • Docker Root Dir: /var/lib/docker


透過「docker version」指令,馬上確認目前 Docker 容器環境的 Client / Server 版本。






永遠的範例 Hello-World

那麼,讓我們開始使用 Docker 容器環境吧,不免俗的第 1 個範例就是透過 Docker 容器環境執行列出字串「Hello-World」吧。

其實在執行「docker run hello-world」指令後,在第 1 行資訊中 (Unable to find image 'hello-world:latest' locally) 可以看到,系統發現目前並沒有「Hello-World」這個 Images,所以就透過預設的系統設定去 Docker Hub 下載 Hello-World 這個容器映像檔 (所以自動執行「docker pull」的動作),最後執行它。其實在結果中看到回應的 4 點訊息,已經完全說明這個動作的流程。
# docker run hello-world

接著,可以透過「docker images」查看目前系統中的 Docker Images 清單。此外,你也可以觀察一下 Docker Images 的預設資料夾「/var/lib/docker/*」下相關的變化。


接著,我們來練習第 2 個範例為透過 Docker 容器環境執行 Nginx 網頁伺服器。但是在開始之前因為在本文實作環境中,採用「Photon Full」安裝選項所以預設會自動啟動 httpd 服務 (佔用 TCP Port 80),所以把 httpd 調整為預設停用,以避免 Photon OS 重新啟動後佔用 TCP Port 80。
# systemctl disable httpd
# systemctl list-unit-files --type service | grep enabled


確認 Photon OS 停用 httpd 預設啟動的組態設定後,便可以練習第 2 個範例為透過 Docker 容器環境執行 Nginx 網頁伺服器。
# docker run -d -p 80:80 vmwarecna/nginx

Photon OS 預設 Iptables 防火牆規則只允許 TCP Port 22 放行,我們開啟常用的 ICMP 回應 (ping) 以及 TCP Port 80 將其放行。有關 iptables 防火牆的基本操作,請參考站內文章 邁向 RHCE 之路 (Day22) - IPTables 防火牆 文章內容。


請修改「/etc/systemd/scripts/iptables」組態設定檔,開啟 ICMP 回應 (ping) 以及 TCP Port 80 放行 (如下 2 行放行規則)。然後,就可以重新啟動 iptables 服務以便防火牆規則能夠套用生效,再採用「iptables -L」指令確認 ICMP 及允許 TCP Port 80 的防火牆規則已經套用生效。
# vi /etc/systemd/scripts/iptables
  iptables -A INPUT -p icmp -j ACCEPT
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# systemctl restart iptables
# systemctl status iptables
# iptables -L


確認 Photon OS 的 iptables 防火牆允許 TCP Port 80 後,便可以開啟瀏覽器確認是否能夠看到 Nginx 網頁伺服器的歡迎頁面。






MeFAQ

Q1. 預設情況下 Photon OS 雖然 sshd 服務有啟動,但不允許 Root 帳號遠端 SSH 登入?

Ans: 請參考 Photon Wiki - FAQ - Why can't I SSH in as root? 文章內容。簡單來說,Photon OS 預設情況下「/etc/ssh/sshd_config」設定檔內容中,預設值為「PermitRootLogin no」所以,不允許 Root 管理帳號可以遠端登入。所以,只要修改為「PermitRootLogin yes」後重新啟動 sshd daemon 即可 (當然,這樣就會多了安全性風險就不在本文討論範圍了。)
# grep PermitRootLogin /etc/ssh/sshd_config
  PermitRootLogin yes
# systemctl restart sshd
# systemctl status sshd




Q2. 運作 nginx 時顯示 Localhost TCP Port 80 已經被使用了?

Ans: 倘若在安裝 Photon OS 時,採用「Photon Full」選項的話,那麼預設就會安裝及啟用 httpd 服務所以 TCP Port 80 就會被佔用。倘若,選擇 Minimal 的話就不會。相關討論串請參考 TCP Port 80 in use | VMware CommunitiesRunning Photon OS on vSphere example iptables issue · Issue #35 · vmware/photon-controller


可以看到預設情況下 Photon OS 已經 Listen tcp6 port 80。
# netstat -na | grep ":80"
tcp6       0      0 :::80                   :::*                    LISTEN


如果,希望是 Listen tcp4 port 80 的話,可以修改「/etc/httpd/httpd.conf」把「Listen 80」改成「Listen 0.0.0.0:80」,然後「systemctl httpd restart」就會變成 IPv4 httpd 了。
# netstat -na | grep ":80"
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN


但是,我們希望把 httpd 調整為預設停用並停止服務,以避免 Photon OS 重新啟動的話會佔用 TCP Port 80。
# systemctl stop httpd
# systemctl disable httpd
# systemctl list-unit-files --type service | grep enabled






參考資源