VMware TCE(Tanzu Community Edition)是一個開放原始碼計畫並由社群提供技術支援,但它其實是個功能完整的VMware Tanzu發行版本,對於想要嘗試建構K8s叢集卻又擔心難以管理及維護的IT人員,可透過本文的實戰演練,體會到TCE在建置和管理維護上的便利及助益。
先前在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工作負載環境。
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叢集和應用程式的管理及部署等工作任務。
TCE支援「獨立叢集」(Standalone Cluster)和「託管叢集」(Managed Cluster)兩種不同類型的K8s叢集。簡單來說,剛接觸TCE的管理人員,以及想要快速建立測試、研發、展示環境時,就適合建立TCE獨立叢集。倘若企業已經建立K8s叢集環境,或是管理人員希望建立多個不同用途及功能的K8s叢集,就適合採用TCE託管叢集運作架構,協助管理人員輕鬆管理K8s多叢集運作環境,如圖3所示。
此外,對於管理人員來說,在建構和管理K8s叢集時,最困擾的部分是相關需求和解決方案該採用哪個套件。在TCE運作架構中,已經為管理人員準備好在管理及維運K8s叢集時會需要的相關解決方案,例如處理容器虛擬網路的Antrea和Calico、存放容器映像檔的Harbor、運作Serverless架構的Knative、資料數據圖形化的Grafana等等,如圖4所示。
舉例來說,在K8s叢集運作架構中,最基礎的部分是容器虛擬網路的部分,透過「容器網路介面」(Container Network Interface,CNI)與CNCF中各項解決方案進行溝通及介接,在TCE運作架構中支援Multus、Antrea、Calico等三種容器虛擬網路解決方案,如圖5所示,預設情況下,TCE會採用Antrea為容器虛擬網路解決方案。
當企業和組織的管理人員在管理K8s叢集時,有時可能因為專案的工作任務不同,或是多組管理人員使用同一個K8s叢集,或者管理人員之間的管理風格不同,都有可能造成K8s叢集的組態設定不一致,進而產生許多非預期的錯誤或浪費管理人員無謂的故障排除時間。
在TCE運作架構中,已經提供了「Sonobuoy」的K8s叢集一致性的套件,如圖6所示。簡單來說,透過Sonobuoy組態一致性檢查機制,可以幫助管理人員針對K8s叢集進行「端點到端點」(End-to-End),各種組態設定一致性的檢查和測試作業,幫助管理人員快速檢查和探索K8s叢集是否有組態不一致的情況。
對於企業和組織來說,保護企業機敏資訊甚至比營運服務來得更為重要。因此,在TCE運作架構中,針對容器映像檔解決方案的Harbor套件,如圖7所示,除了存放企業和組織客製化的容器映像檔和公開的容器映像檔外,並搭配開放原始碼計畫中知名的Trivy和Clair專案,為企業提供容器映像檔的「漏洞掃描」(Vulnerability Scanning)功能,避免企業部署已經被埋入後門或有已知漏洞的容器,有效保護企業機敏資訊。
最後,則是在K8s叢集架構中最常使用的Grafana可視化圖形套件,負責監控和告警的Prometheus套件,以及轉送日誌檔案的Fluentbit套件,如圖8所示,讓管理人員可以輕鬆透過Grafana可視化圖形,了解K8s叢集和應用程式的工作負載和健康情況,在發生問題時由負責監控和告警的Prometheus套件送出通知,並且透過轉送的系統日誌進行故障排除作業。
實戰TCE on vSphere
在本文實戰演練章節中,將帶領管理人員一步一步在VMware vSphere虛擬化環境中,從部署最基本的TCE「獨立叢集」(Standalone Cluster)開始,如圖9所示,後續當管理人員熟悉TCE運作架構後,也可以自行部署更進階的「託管叢集」(Managed Cluster)。
部署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所示。
部署工作任務完成後,點選名稱為「photon3-kube-v1.21.2」的虛擬主機,在右鍵選單中點選「Template > Convert to Template」,確認該台VM虛擬主機已經轉換為VM範本格式,並存放在TCE資料夾中,如圖11所示。
在部署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所示:
choco install kubernetes-cli choco install docker-desktop choco install tanzu-community-edition --version=0.9.0
如果採用手動下載離線安裝的方式,必須先安裝好Tanzu CLI指令工具,再手動將「C:\Program Files\tanzu」路徑加入至Windows主機環境變數當中。
值得注意的是,在這個版本中有個小臭蟲,在開始部署TCE獨立叢集之前,必須修改「%USERPROFILE%\.config\tanzu\tkg\config.yaml」檔案內容,加上「TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY: true」內容後存檔離開,否則稍後嘗試執行TCE獨立叢集初始化部署流程時,將會出現「x509 : certificate signed by unknown authority」的錯誤訊息,如圖13所示。
部署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內容,稍後便會使用到。
接著,透過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存放路徑即可。
接著,執行「tanzu standalone-cluster create --ui」指令,系統將會啟動kickstart UI進行TCE獨立叢集初始化部署流程,如圖16所示,可以看到目前的TCE支援部署至Docker容器環境,和地端的VMware vSphere虛擬化環境,以及Amazon EC2和Microsoft Azure公有雲環境,按下VMware vSphere區塊中的〔DEPLOY〕按鈕進行部署作業。
首先,在IaaS Provider頁面中,鍵入vCenter Server名稱和管理帳號及密碼,然後按下〔Connect〕按鈕,通過管理者身分驗證程序後,選擇準備部署TCE獨立叢集的Datacenter,並貼上剛才建立SSH加密金鑰中的Public Key內容,如圖17所示。
在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所示。
在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所示。
在Kubernetes Network頁面中,組態設定TCE獨立叢集所要使用的vNetwork虛擬網路,在Network Name欄位中,選擇使用的vSphere vSwitch虛擬交換器,本文實作為「/Datacenter/network/tce-vnet」,如圖20所示,至於Cluster Service CIDR和Cluster Pod CIDR欄位,則是屆時容器會使用到的IP位址網路,採用系統預設值即可。值得注意的是,這些系統預設值網段,倘若和企業或組織內部網路互相衝突時,則需要修改成不同網段。除此之外,連接的vSwitch虛擬交換器,必須和前述第二步驟中控制平面VIP位址同一個網段,並且必須支援DHCP自動派發IP位址機制。
在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所示。
完成上述八項組態設定後,按下〔Review Configuration〕按鈕,再次檢視組態設定內容是否正確,確認無誤後按下〔Deploy Standalone Cluster〕按鈕,便立即開始TCE獨立叢集的部署工作任務。
事實上,眼尖的管理人員應該已經發現,這個kickstart UI的圖形化介面,會將剛才所有的組態設定儲存為YAML檔案,在本文實作中儲存的路徑為「C:\Users\Weithenn\.config\tanzu\tkg\clusterconfigs\tce-cluster.yaml」,以便下次需要快速建立環境時,可以直接使用管理人員慣用的組態設定內容,快速建立TCE獨立叢集測試或研發環境。等待一段時間後,在本文實作環境中,大約花費「12分鐘」時間便部署完成TCE獨立叢集,如圖22所示。
切換至vSphere虛擬化環境中,從vCenter管理介面中可以看到,已經新增並運作兩台VM虛擬主機,其中一台為TCE獨立叢集的控制平面主機,另一台則是屆時運作容器的工作節點主機。此外,剛才部署流程中設定的控制平台VIP位址,也自動組態設定至控制平面主機,如圖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所示。
驗證連線並登入成功後,接著透過「kubectl」指令,確認是否能夠和TCE管理叢集的API服務進行互動,例如查看K8s叢集的控制平面資訊,以及列出K8s叢集中的各個節點主機資訊,如圖25所示。
部署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所示。
部署容器和服務
雖然目前的TCE獨立叢集環境並沒有部署負載平衡器,但仍然能夠在TCE所建構的K8s叢集中部署和測試Pod服務是否正常運作,並且管理人員可以透過Octant輕鬆部署和管理Pod及服務。首先,登入Octant管理介面,再點選「Applications > Apply YAML」項目,在彈出視窗中貼上YAML檔案內容,或是按下〔Browse〕按鈕上傳YAML檔案,然後按下〔Apply〕按鈕,系統將依據YAML內容部署Pod及容器,本文實作部署Nginx網頁伺服器。
接著管理人員按下〔Ctrl〕+〔Enter〕組合鍵,然後選擇「Pods」項目。點選剛才部署的Nginx Pod,便可以看到相關資訊和頁籤,例如在Summary頁籤中,除了可以看到容器組態設定資訊外,還可以按下〔Start Port Forward〕按鈕建立連接埠導向機制,在Logs頁籤中則會看到容器運作的日誌資訊,而Terminal頁籤中已經直接連線至Nginx容器內,點選Resource Viewer頁籤,更可透過視覺化的方式,了解Nginx容器相關服務的健康情況和組態設定資訊,如圖27所示。
結語
透過本文的深入剖析,管理人員應該已經了解Tanzu Community Edition,雖然是社群版本但是功能性卻一點也不馬虎,對於想要嘗試建構K8s叢集卻又擔心難以管理和維護的IT人員,經過本文的實戰演練後,應該能夠體會TCE在建置和管理維護上的易用性和直覺性。
<本文作者:王偉任,Microsoft MVP及VMware vExpert。早期主要研究Linux/FreeBSD各項整合應用,目前則專注於Microsoft及VMware虛擬化技術及混合雲運作架構,部落格weithenn.org。>