網管人 194 期 - 全功能 Tanzu 社群版開箱演練 K8s 叢集部署管理



網管人雜誌

本文刊載於 網管人雜誌第 194 期 - 2022 年 3 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它,或透過城邦出版人讀者服務網進行訂閱。





本文目錄






前言

先前在 VMworld 2019 大會上,VMware 正式推出 「太平洋專案」(Project Pacific),也就是在 vSphere 虛擬化平台核心中,直接內建並整合 Kubernetes 容器調度平台,讓 vSphere 虛擬化平台能夠原生支援和運作容器。同時,網羅二位 K8s 專案共同創辦人 Craig McLuckie 和 Joe Beda 加入團隊,讓 vSphere 核心不僅僅只是 VM 虛擬主機平台,也同時是 K8s 容器調度平台。

在最近舉辦的 VMworld 2021 大會上,更發佈許多不同的專案計劃(如圖 1 所示),例如,「Project Cascade」 著重於為 IaaS 和 CaaS 提供統一的 Kubernetes 介面,「Project Capitola」 著重於軟體定義記憶體,將 DRAM/PMEM/NVMe 等各種不同類型的儲存裝置,整合後不僅擴大記憶體資源更能有效應用,「Project Ensemble」 著重於多雲環境的管理並整合 vRealize 達到自動化的目的,讓管理人員輕鬆和管理分析所有雲端環境資料和工作流,「Project Santa Cruz」 著重於將邊緣運算和 SD-WAN 整合後,提供網路團隊和雲端基礎架構團隊,一個集中管理和分析邊緣運算的平台,「Project Radium」著重於打造共用類型的 GPU 圖形運算資源,支援 AMD、Graphcore、Intel、NVIDIA 等供應商,為企業和組織打造更便利的 AI/ML 工作負載環境。
更多的專案計劃項目和內容,請參考 VMworld 2021 大會 網站。
圖 1、VMware Cloud with Tanzu 服務運作架構示意圖





TCE 運作架構

雖然,VMware TCE(Tanzu Community Edition)是個開放源始碼計畫並由社群提供技術支援,但是它其實是個功能完整的 VMware Tanzu 發行版本。簡單來說,在 TCE 的運作架構中,透過「Cluster API」運作機制,達到在 K8s 叢集架構中部署和管理容器及服務的目的。

TCE 運作架構可以分成三大部份,分別是「Tanzu CLI、K8s 叢集、套件管理機制」。首先,在 TCE 運作架構中,當安裝作業完成後,便已經內嵌 Tanzu CLI 指令工具,它是一個獨立靜態的 Binary 格式檔案(如圖 2 所示),所以支援「隨插即用架構」(Pluggable Architecture),讓指令集能夠非常方便的進行獨立增加、刪除、更新……等,後續管理人員將會透過 Tanzu CLI 指令,進行所有 K8s 叢集和應用程式的管理及部署等工作任務。

圖 2、Tanzu CLI 指令工具架構示意圖

TCE 支援二種不同類型的 K8s 叢集,分別是「獨立叢集」(Standalone Cluster)「託管叢集」(Managed Cluster)。簡單來說,剛接觸 TCE 的管理人員,以及想要快速建立測試、研發、展示環境時,就適合建立 TCE 獨立叢集。倘若,企業和組織已經建立 K8s 叢集環境時,或是管理人員希望建立多個不同用途及功能的 K8s 叢集時,就適合採用 TCE 託管叢集運作架構,協助管理人員輕鬆管理 K8s 多叢集運作環境(如圖 3 所示)。

圖 3、TCE 獨立叢集和託管叢集示意圖

此外,對於管理人員來說,在建構和管理 K8s 叢集時,最困擾的部份便是相關需求和解決方案該採用哪個套件。在 TCE 運作架構中,已經為管理人員準備好,在管理和維運 K8s 叢集時會需要的相關解決方案,例如,處理容器虛擬網路的 Antrea 和 Calico、存放容器印象檔的 Harbor、運作 Serverless 架構的 Knative、資料數據圖形化的 Grafana……等(如圖 4 所示)。

圖 4、TCE 運作架構中預設支援的各項解決方案套件示意圖

舉例來說,在 K8s 叢集運作架構中,最基礎的部份便是容器虛擬網路的部份,透過「容器網路介面」(Container Network Interface,CNI)和 CNCF 中各項解決方案進行溝通和介接,在 TCE 運作架構中支援「Multus、Antrea、Calico」三種容器虛擬網路解決方案(如圖 5 所示),預設情況下 TCE 將會採用 Antrea 為容器虛擬網路解決方案。

圖 5、TCE 運作架構中容器虛擬網路解決方案架構示意圖

當企業和組織的管理人員在管理 K8s 叢集時,有時可能因為專案的工作任務不同,或是多組管理人員使用同一個 K8s 叢集,或是管理人員之間的管理風格不同時,都有可能造成 K8s 叢集的組態設定不一致,進而產生許多非預期的錯誤或浪費管理人員無謂的故障排除時間。

在 TCE 運作架構中,提供「Sonobuoy」的 K8s 叢集一致性的套件(如圖 6 所示)。簡單來說,透過 Sonobuoy 組態一致性檢查機制,可以幫助管理人員針對 K8s 叢集進行「端點到端點」(End-to-End),各種組態設定一致性的檢查和測試作業,幫助管理人員快速檢查和探索 K8s 叢集是否有組態不一致的情況。

圖 6、提供 K8s 叢集組態一致性檢查的 Sonobuoy 套件運作架構示意圖

對於企業和組織來說,保護企業機敏資訊甚至比營運服務來的更為重要。因此,在 TCE 運作架構中,針對容器印象檔解決方案的 Harbor 套件(如圖 7 所示),除了存放企業和組織客製化的容器印象檔和公開的容器印象檔之外,並搭配開放源始碼計畫中知名的「Trivy 和 Clair」 專案,為企業和組織提供容器印象檔的「漏洞掃描」(Vulnerability Scanning)功能,避免企業和組織部署已經被埋入後門或有已知漏洞的容器,有效保護企業機敏資訊。

圖 7、容器印象檔解決方案 Harbor 套件示意圖

最後,則是在 K8s 叢集架構中,最常使用的 Grafana 可視化圖形套件,負責監控和告警的 Prometheus 套件,以及轉送日誌檔案的 Fluentbit 套件(如圖 8 所示),讓管理人員可以輕鬆透過 Grafana 可視化圖形,了解 K8s 叢集和應用程式的工作負載和健康情況,在發生問題時由負責監控和告警的 Prometheus 套件送出通知,並且透過轉送的系統日誌進行故障排除作業。

圖 8、維運管理常用的 Grafana/Prometheus/Fluentbit 套件示意圖





實戰 – TCE on vSphere

在本文實戰演練章節中,將帶領管理人員一步一步在 VMware vSphere 虛擬化環境中,從部署最基本的 TCE「獨立叢集」(Standalone Cluster)開始(如圖 9 所示),後續當管理人員熟悉 TCE 運作架構後,也可以自行部署更進階的「託管叢集」(Managed Cluster)。

圖 9、TCE 獨立叢集部署流程示意圖



部署 TCE 獨立叢集的前置作業

首先,請確保稍後要部署 TCE 獨立叢集的 vSphere 虛擬化環境,至少為「vSphere 6.7 U3 或 vSphere 7」 版本的運作環境。接著,請管理人員登入 VMware Customer Connect 網站,下載已經打包好運作環境的 OVA 檔案,管理人員可以依據運作環境需求選擇適合的 OVA 版本,目前支援部署 Photon OS 和 Ubuntu 2004 系統,本文實作環境採用最新發佈 TCE 0.9.0 版本中搭配「Photon v3 Kubernetes v1.21.2」的 OVA 版本。

完成 OVA 檔案下載完成後,在 vCenter 管理介面中依序點選「Datacenter > Deploy OVF Template」,在彈出的 Deploy OVF Template 視窗中,請在 Select an OVF template 頁面中選擇「Local file」 選項,然後按下「UPLOAD FILES」 鈕並選擇剛才下載的 OVA 檔案。

在 Select a name and folder 頁面中,請鍵入部署的 VM 虛擬主機名稱,本文實作採用預設的「photon3-kube-v1.21.2」 名稱,並部署在 Datacenter 中的「TCE」 資料夾內。在 Select a compute resource 頁面中,選擇欲部署的 vSphere Cluster,本文實作選擇專用於 TCE 工作負載的「K8s-Cluster」,在 Review details 頁面中,確認部署資訊無誤後按下 Next 鈕繼續部署程序。

在 License agreements 頁面中,勾選「I accept all license agreements」 選項後續繼部署程序,在 Select Storage 頁面中,選擇採用的 Datastore 儲存資源,在 Select networks 頁面中,選擇所要連接的 vNetwork 虛擬網路,在 Ready to complete 頁面中,再次確認所有部署資訊,確認無誤後按下 Finish 鈕,便開始進行部署作業。

此時,從 vCenter 管理介面下方 Recent Tasks 工作列中,可以看到二項工作任務「Import OVF package」 和「Deploy OVF template」 正在執行中(如圖 10 所示)。

圖 10、部署 Photon v3 Kubernetes v1.21.2 運作環境的 VM 虛擬主機

部署工作任務完成後,請點選名稱為「photon3-kube-v1.21.2」 的虛擬主機,在右鍵選單中點選「Template > Convert to Template」,確認該台 VM 虛擬主機已經轉換為 VM 範本格式,並存放在 TCE 資料夾中(如圖 11 所示)。

圖 11、將 photon3-kube-v1.21.2 虛擬主機轉換為 VM 範本格式

在部署 TCE 獨立叢集之前,必須準備好 Tanzu CLI 環境,以便順利執行 TCE 獨立叢集的初始化部署流程。管理人員可以將 Tanzu CLI 指令工具安裝在 Linux / Mac / Windows 環境中,本文實作環境為 Windows 主機安裝 Tanzu CLI 指令工具。

在 Windows 運作環境中,必須完成「kubectl、Docker Desktop、WSL2」 運作環境後,才能順利安裝 Tanzu CLI 指令工具。管理人員可以在 Windows 主機中,透過 PowerShell 中的 Chocolatey 套件安裝管理工具,達到線上下載並安裝的目的,或是至 TCE GitHub 專案頁面手動下載後進行離線安裝。

在本文實作環境中,透過 Chocolatey 套件安裝管理工具,執行下列 PowerShell 指令,即可達成安裝 kubectl、Docker Desktop、Tanzu CLI 的目的(如圖 12 所示)。倘若,採用手動下載離線安裝的方式時,必須在安裝好 Tanzu CLI 指令工具後,記得手動將「C:\Program Files\tanzu」 路徑,加入至 Windows 主機環境變數當中。
choco install kubernetes-cli
choco install docker-desktop
choco install tanzu-community-edition --version=0.9.0

圖 12、透過 Chocolatey 工具安裝 kubectl、docker desktop、Tanzu CLI 指令工具

值得注意的是,在這個版本中有個小臭蟲,請在開始部署 TCE 獨立叢集之前,修改「%USERPROFILE%\.config\tanzu\tkg\config.yaml」檔案內容,加上「TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY: true」內容後存檔離開,否則稍後嘗試執行 TCE 獨立叢集初始化部署流程時,將會遭遇到「x509 : certificate signed by unknown authority」的錯誤訊息(如圖 13 所示)。

圖 13、修改 config.yaml 內容以便順利執行 TCE 獨立叢集初始化部署流程



部署 TCE 獨立叢集

由於稍後部署 TCE 獨立叢集並與 vCenter 管理平台時,將會使用 SSH-2 RSA 4096-bit 的 SSH 加密金鑰進行溝通作業,所以請在安裝 Tanzu CLI 指令工具的主機上,產生這個 SSH 加密金鑰。請執行「ssh-keygen -t rsa -b 4096」 指令(如圖 14 所示),產生 SSH 加密金鑰對,預設情況下「id_rsa」 為 Private Key 而「id_rsa.pub」 為 Public Key,請複製 Public Key 內容,稍後便會使用到。

圖 14、產生 SSH 加密金鑰對以便稍後和 vCenter 管理平台溝通

接著,透過 ssh-agent 指令,將剛才產生 SSH 加密金鑰中的 Private Key 儲存至 Windows 安全性內容中,並且和目前的 Windows 使用者登入帳號產生關聯,以便稍後部署 TCE 獨立叢集需要採用 Private Key 進行驗證作業時,ssh-agent 服務就會自動擷取匯入的 Private Key 內容,並且自動傳送給 SSH 用戶端進行驗證。如圖 15 所示,使用「Start-Service ssh-agent」啟動 ssh-agent 服務後,使用「ssh-add」指令搭配 Private Key 存放路徑即可。
完成 SSH Private Key 匯入作業後,請記得備份並存放至安全位置,然後從本機 Windows 中刪除它,避免產生資安風險和疑慮。
圖 15、啟動 ssh-agent 服務並匯入 SSH Private Key

請執行「tanzu standalone-cluster create --ui」指令,系統將會啟動 kickstart UI 進行 TCE 獨立叢集初始化部署流程(如圖 16 所示),可以看到目前的 TCE 支援部署至 Docker 容器環境,和地端的 VMware vSphere 虛擬化環境,以及 Amazon EC2 和 Microsoft Azure 公有雲環境,請按下 VMware vSphere 區塊中的 Deploy 鈕進行部署作業。

圖 16、啟動 kickstart UI 進行 TCE 獨立叢集初始化部署流程

首先,在 IaaS Provider 頁面中,請先鍵入 vCenter Server 名稱和管理帳號及密碼後按下 Connect 鈕,通過管理者身份驗證程序後,選擇準備部署 TCE 獨立叢集的 Datacenter,並貼上剛才建立 SSH 加密金鑰中的 Public Key 內容(如圖 17 所示)。

圖 17、鍵入 vCenter 管理平台的管理人員帳號密碼資訊和 Tanzu CLI 主機 SSH Public Key

在 Standalone Cluster Settings 頁面中,管理人員將定義屆時 TCE 獨立叢集的規模大小。在 Development 和 Production 選項中,最主要的差別在於稍後部署的 TCE 獨立叢集的「控制平面節點」(Control Plane Node)數量,選擇 Development 則只會建立「1 台」控制平面節點,而選擇 Production 選項則會一次建立「3 台」控制平面節點。在本文實作環境中,選擇 Development 且 Instance Type 為「Medium」。

在 Standalone Cluster Name 欄位中,請鍵入在部署 TCE 獨立叢集所要採用的 vSphere Cluster 名稱,本文實作為「tce-cluster」,在 Control Plane Endpoint 欄位,請鍵入屆時 TCE 獨立叢集中控制平面節點的 VIP 位址,本文實作為「10.10.75.72」,由於是測試環境用途所不勾選「Enable Audit Logging」選項(如圖 18 所示)。
Standalone Cluster Name 欄位,僅支援「英文小寫」開頭,以及「數字和 - 及 .」,其它字元尚未支援,例如,尚未支援「英文大寫」名稱。
圖 18、組態設定 TCE 獨立叢集名稱和控制平面 VIP 位址

在 VMware NSX Advanced Load Balancer 頁面中,可以整合 NSX 進階負載平衡器機制,在目前測試用途的 TCE 獨立叢集中並不需要,所以可以直接按下 Next 鈕至下一個部署流程。在 Metadata 頁面中,目前尚未需要額外定義,請直接按下 Next 鈕至下一個部署流程。

在 Resources 頁面中,在 VM Folder 欄位中選擇先前為 TCE 環境建立的 VM 資料夾,本文實作為「Datacenter/vm/TCE」,在 Datastore 欄位則是選擇要採用的儲存資源,在 Clusters,Hosts,and Resource Pools 欄位,選擇要採用的 vSphere 運算資源,本文實作選擇使用 vSphere 虛擬化環境中準備的「K8s-Cluster」(如圖 19 所示)。

圖 19、組態設定部署 TCE 獨立叢集所要採用的 vSphere 運算和儲存資源

在 Kubernetes Network 頁面中,請組態設定 TCE 獨立叢集所要使用的 vNetwork 虛擬網路,在 Network Name 欄位中,請選擇使用的 vSphere vSwitch 虛擬交換器,本文實作為「/Datacenter/network/tce-vnet」(如圖 20 所示),至於 Cluster Service CIDR 和 Cluster Pod CIDR 欄位,則是屆時容器會使用到的 IP 位址網路,請採用系統預設值即可。值得注意的是,這些系統預設值網段,倘若和企業或組織內部網路互相衝突時,則需要修改成不同網段。
連接的 vSwitch 虛擬交換器,必須和前述第二步驟中控制平面 VIP 位址同一個網段,並且必須支援 DHCP 自動派發 IP 位址機制。
圖 20、組態設定 TCE 獨立叢集和容器的虛擬網路

在 Identity Management 頁面中,管理人員可以組態設定使用者身份驗證機制,目前 TCE 運作環境中支援 OIDC 或 LDAPS 通訊協定,在目前測試用途的 TCE 獨立叢集中並不需要,所以直接按下 Next 鈕至下一個部署流程。

在 OS Image 頁面中,便是選擇先前上傳到 vSphere 虛擬化環境中 OVA,並且將 VM 虛擬主機轉換為 VM Template 的印象檔,這便是稍後部署 TCE 獨立叢集時,所要採用的 Base OS Image 印象檔。本文實作為「/Datacenter/vm/TCE/photon-3-kube-v1.21.2」(如圖 21 所示)。

圖 21、組態設定部署 TCE 獨立叢集採用的 Base OS Image 印象檔

完成上述八項組態設定後,按下 Review Configuration 鈕,再次檢視組態設定內容是否正確,確認無誤後按下「Deploy Standalone Cluster」鈕,便立即開始 TCE 獨立叢集的部署工作任務。

事實上,眼尖的管理人員應該已經發現,這個 kickstart UI 的圖形化介面,會將剛才所有的組態設定儲存為 YAML 檔案,在本文實作中儲存的路徑為「C:\Users\Weithenn\.config\tanzu\tkg\clusterconfigs\tce-cluster.yaml」,以便下次需要快速建立環境時,可以直接使用管理人員慣用的組態設定內容,快速建立 TCE 獨立叢集測試或研發環境。等待一段時間後,在本文實作環境中,大約花費「12 分鐘」時間便部署完成 TCE 獨立叢集(如圖 22 所示)。

圖 22、順利部署 TCE 獨立叢集至 vSphere 虛擬化環境

切換至 vSphere 虛擬化環境中,從 vCenter 管理介面中可以看到,已經新增並運作二台 VM 虛擬主機,其中一台為 TCE 獨立叢集的控制平面主機,另一台則是屆時運作容器的工作節點主機。此外,剛才部署流程中設定的控制平台 VIP 位址,也自動組態設定至控制平面主機(如圖 23 所示)。

圖 23、確認控制平面主機和工作節點主機運作狀態



驗證並連線至管理叢集

確認 TCE 獨立叢集部署完成並運作正常後,請從 Tanzu CLI 主機鍵入「tanzu login」 指令,選擇採用「Local kubeconfig」選項,並選擇預設存取 K8s 組態設定路徑本文實作為「C:\Users\Weithenn/.kube/config」,並鍵入 kube context 內容本文實作為「tce-cluster-admin@tce-cluster」,最後搭配管理叢集名稱「tce-cluster」後,即可看到驗證程序成功連線至 TCE 管理叢集(如圖 24 所示)。

圖 24、驗證連線並登入 TCE 管理叢集

驗證連線並登入成功後,接著透過「kubectl」 指令,確認是否能夠和 TCE 管理叢集的 API 服務進行互動,例如,查看 K8s 叢集的控制平面資訊,以及列出 K8s 叢集中的各個節點主機資訊(如圖 25 所示)。

圖 25、查看 K8s 叢集的控制平面和各個節點主機資訊



部署 Octant 管理工具

對於 K8s 叢集管理和維運事務還不熟悉的管理人員,可以透過安裝 VMware 主導的另一個開放源始碼工具 Octant,協助管理人員透過視覺化儀表板介面,了解和管理 K8s 叢集工作負載、命名空間、中繼資料……等工作任務。

首先,請在 Tanzu CLI 主機上,鍵入「choco install octant --confirm」指令,透過 Chocolatey 套件管理工具安裝 Octant,在啟動 Octant 之前,請再次執行「kubectl cluster-info」 指令,確保 Tanzu CLI 主機已經驗證連線並登入成功 TCE 管理叢集,確誤無誤後即可執行「octant」指令。此時,系統將自動開啟瀏覽器並連線至「127.0.0.1:7777」,即可看到 Octant 儀表板圖形化管理介面(如圖 26 所示)。

圖 26、執行 octant 指令後查看 Octant 儀表板圖形化管理介面



部署容器和服務

雖然,目前的 TCE 獨立叢集環境並沒有部署負載平衡器,仍然可以在 TCE 所建構的 K8s 叢集中部署和測試 Pod 服務是否正常運作,並且管理人員可以透過 Octant 輕鬆部署和管理 Pod 及服務。

首先,登入 Octant 管理介面後,依序點選「Applications > Apply YAML」 項目,在彈出視窗中貼上 YAML 檔案內容,或是按下 Browse 鈕上傳 YAML 檔案後按下 Apply 鈕,系統將會依據 YAML 內容部署 Pod 及容器,本文實作部署 Nginx 網頁伺服器。
本文實作採用的 YAML 檔案內容詳細資訊,請參考 Debugging a Kubernetes Workload with Octant | VMware Tanzu Developer Center 文章內容。

接著,管理人員可以按下「Ctrl + Enter」 組合鍵後選擇「Pods」項目,點選剛才部署的 Nginx Pod 之後,便可以看到相關資訊和頁籤,例如,在 Summary 頁籤中,除了可以看到容器組態設定資訊之外,還可以按下「Start Port Forward」鈕建立連接埠導向機制,在 Logs 頁籤中可以看到容器運作的日誌資訊,在 Terminal 頁籤中,已經直接連線至 Nginx 容器內,點選 Resource Viewer 頁籤,更可以透過視覺化的方式,了解 Nginx 容器相關服務的健康情況和組態設定資訊(如圖 27 所示)。

圖 27、透過 Octant 管理工具輕鬆部署和管理容器及服務





結語

透過本文的深入剖析,管理人員應該已經了解 Tanzu Community Edition,雖然是社群版本但是功能性卻一點也不馬虎之外,對於想要嘗試建構 K8s 叢集卻又擔心難以管理和維護的 IT 人員,經過本文的實戰演練後,應該能夠體會 TCE 在建置和管理維護上的易用性和直覺性。在後續的技術專欄中,將會逐步深入 TCE 管理維護以及如何整合更多進階功能,敬請期待。