這幾天我在嘗試 VMware Tanzu Community Edition,畢竟 VMWare 也是個大廠,現在正在全力衝刺 Kubernetes 市場,我覺得整體上安裝體驗還可以,管理架構也很乾淨,算是非常好上手,文件也寫的不錯。這篇文章是我在實作的過程中的安裝筆記,詳實記錄了一些重要觀念與注意事項。
基礎架構
VMware Tanzu Community Edition (TCE) 是一套由 VMWare 公司推出的 Kubernetes 叢集散佈版本 (Distribution),除了開源免費、功能完整、便於管理外,也非常適合拿來當作學習與開發環境。
TCE 本身包含了四個主要的構成要素:
-
Tanzu CLI
這個 tanzu
是 TCE 的命令列管理工具 (CLI),他有許多子命令可以用來管理叢集、應用程式、外掛套件等等。每個子命令其實都連結到不同的執行檔,並位於 ${XDG_DATA_HOME}/tanzu-cli
目錄下,也因此 tanzu
CLI 從架構上來說,是非常容易的進行擴充的,你可以透過 plugins 進行新增、移除或更新。
Linux 作業系統環境預設的 ${XDG_DATA_HOME}
位於 ~/.local/share
目錄。
大多數 plugins 都位於 Tanzu Framework Repo 下,並共用於多個不同 Tanzu Editions 版本之間。部分 plugins 則位於 Tanzu Community Edition Repo 下,待社群培育成熟之後,可能會移入 Tanzu Framework Repo 底下。不過,即便某些 Plugins 會遷移到 Tanzu Framework Repo,基本上是不影響現有 TCE 用戶的!
-
Managed Clusters
你可以使用 tanzu cluster
命令建立兩種不同類型的叢集,其中一種叫做 Managed Clusters (受控叢集),你必須透過 tanzu management-cluster create
命令先建立好一個 Management Cluster (管理叢集),才能在這個叢集底下建立受控叢集,又稱工作負載叢集(Workload Cluster),事實上這就是實際執行應用程式的叢集環境。基本上 VMWare 官方建議用這種方式來管理叢集,建議在生產環境(Production)使用。
-
Unmanaged Clusters
你可以使用 tanzu cluster
命令建立兩種不同類型的叢集,另一種就叫做 Unmanaged Clusters (非受控叢集),你必須透過 tanzu unmanaged-cluster create
命令直接建立一個叢集,這種叢集只能部署在單一節點,主要拿來當作開發測試環境之用。TCE 支援在同一台主機上建立多組非受控叢集,管理上十分便利。
-
Package Management
你可以用 tanzu
CLI 進行套件管理(package management),方便你可以發現、安裝、升級、刪除想要執行在 Tanzu 叢集的軟體。所有的套件皆由 carvel 工具建立,你只要遵循套件封裝流程(packaging process)即可。套件可以被封裝進一個所謂 package repository,並且可以推送到 OCI (Open Container Iinitiative) 相容的儲存庫中。
在 Tanzu 叢集中,kapp-controller 會不斷監視 package repositories 的變更 (透過 PackageRepository 這個 CRD 來宣告),當叢集被告知有新的版本 (透過 tanzu package repository
命令),這個 kapp-controller 就會拉取這個 package repository 回來,讓這些套件可以使用在叢集內。
你可以透過 tanzu package install
命令建立一個 PackageInstall
(CRD) 資源,kapp-controller 就會幫你下載並安裝到叢集中。
注意:若你安裝 Tanzu Community Edition (TCE) 的 Unmanaged Clusters 的話,預設會幫你安裝好 tkg-core-repository
這個 package repository (官網文件是寫 tce-repo
這個名稱,應該是文件沒有更新到)。若你安裝的是 Managed Clusters 的話,就要額外安裝 package repository 才行!
安裝 Unmanaged Clusters 非受控叢集
這裡我以 Windows 作業系統平台為例進行示範,安裝步驟如下:
-
先安裝 Docker Desktop for Windows
-
透過 Chocolatey 安裝 tanzu
CLI 工具
choco install tanzu-community-edition -y
-
建立一個名為 beepboop
的非受控叢集 (Unmanaged Clusters)
TCE 可以在同一台電腦建立多個叢集,用以區分不同的開發環境,相當便利。建立一個叢集的命令也非常簡單,一個命令就可以完成:
tanzu unmanaged-cluster create beepboop --cni=calico
注意:Docker for Windows 需要特別加上 --cni=calico
才能順利建立完整的叢集,否則網路部分會出問題!
你也可以用 uc
當成 unmanaged-cluster
的縮寫:
tanzu uc create beepboop --cni=calico
注意: 整個叢集都會安裝在 Docker 環境下,不會污染 Windows 目前環境。
若要在日後切換不同的 Unmanaged Clusters 叢集,只要用 kubectl config use-context kind-<CLUSTER-NAME>
即可:
kubectl config use-context kind-beepboop
-
安裝 kubectl 工具
choco install kubernetes-cli -y
你可以用以下命令查詢已安裝版本:
kubectl version --short
-
管理套件
Tanzu Community Edition (TCE) 的 Unmanaged Clusters 在安裝好之後,預設就會先安裝好名為 tkg-core-repository
的 package repository,你可以用以下命令列出現有的 package repository 清單:
tanzu package repository list --all-namespaces
將內建的 tkg-core-repository
套件儲存庫更新到最新版 (重要)
tanzu package repository update tkg-core-repository --url projects.registry.vmware.com/tce/main -n tanzu-package-repo-global
列出所有可安裝的套件:
tanzu package available list
列出 cert-manager.community.tanzu.vmware.com
套件版本:
tanzu package available list cert-manager.community.tanzu.vmware.com
安裝 1.6.1
版的 cert-manager
套件:
tanzu package install cert-manager --package-name cert-manager.community.tanzu.vmware.com --version 1.6.1
確認已安裝的套件清單:
tanzu package installed list
刪除 cert-manager
套件:
tanzu package installed delete cert-manager
-
刪除叢集
列出 Unmanaged Cluster 非受控叢集清單
tanzu unmanaged-cluster list
刪除叢集
tanzu unmanaged-cluster delete beepboop
更完整的命令請參考 Unmanaged Clusters Reference 官網文件。
安裝 Managed Clusters 受控叢集
受控叢集的安裝步驟就複雜的多,完整流程請參考 Getting Started with Managed Clusters 官網文件。
這裡最重要的觀念,就是你要先建立 1
個 Management Clusters (管理叢集),然後再透過這個 Management Clusters 安裝 N
個工作負載叢集(Workload Clusters),所有應用程式都應該安裝到工作負載叢集之中。
你要先在本機安裝一個「啟動叢集」(bootstrap cluster),基本上該叢集是一套以 Kind 為基礎的 Kubernetes 叢集,而且完全跑在 Docker 容器中,你可以透過該叢集來安裝一個「管理叢集」到你指定的目標提供者,目前有支援 Docker, VMware vSphere, Amazon Web Services 與 Microsoft Azure 等等。當「管理叢集」安裝完成後,「啟動叢集」就可以刪除了!
這裡我以 Linux 作業系統平台為例進行示範,搭配 Multipass 快速建立 Ubuntu 虛擬機器,安裝步驟如下:
-
使用 Multipass 建立名為 tanzu
虛擬機器 (VM)
建立 VMware Tanzu 最好要有 4 CPUs 與 6GB RAM 以上,我這邊加上 --bridged
參數是為了讓我可以直接從我的區域網路直接連上這台虛擬機器。
multipass launch --name 'tanzu' --bridged --disk 50G --cpus 4 --mem 6G
虛擬機器建立完成後就可以直接連進去 Shell 環境進行安裝:
multipass shell 'tanzu'
-
下載 tanzu
CLI 工具
wget https://github.com/vmware-tanzu/community-edition/releases/download/v0.10.0/tce-linux-amd64-v0.10.0.tar.gz
tar zxvf tce-linux-amd64-v0.10.0.tar.gz
cd tce-linux-amd64-v0.10.0/
./install.sh
tanzu version
這是我本次安裝的 tanzu
CLI 版本資訊:
version: v0.10.1
buildDate: 2022-02-14
sha: 401d55b
-
安裝 Kubectl 工具
因為我知道 tanzu
CLI 會建立 v1.21.5
的 Kubernetes 叢集,所以我才預先安裝好 v1.21.5
版本的 kubectl
工具。
curl -LO https://dl.k8s.io/release/v1.21.5/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --short --client
rm -f kubectl
-
安裝 Docker Engine
sudo apt update && sudo apt install docker.io -y && sudo usermod -a -G docker ubuntu
這裡的 sudo usermod -a -G docker ubuntu
命令,是為了讓 non-root
身份也可以順利執行 docker
命令,但設定完之後記得要登出再重新登入,所以需要執行 exit
先退出 Shell 環境。
-
這次重新登入 tanzu
虛擬機器要用 SSH 並啟用 Port Forwarding 功能 (Port 8080
)
假設我們 VM 的 IP 地址為 192.168.1.13
(預設 Multipass 建立的 VM 預設登入帳號為 ubuntu
)
ssh -i C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd\ssh-keys\id_rsa -L 8080:localhost:8080 -L 17777:localhost:7777 ubuntu@192.168.1.13
Port 8080
是給 TCE 安裝介面用的,而 Port 17777
則是給 octant 儀表版用的。
-
安裝管理叢集 (Management Cluster)
啟動一個 Tanzu Community Edition 安裝介面 (Web UI),並監聽 8080
Port:
tanzu management-cluster create --ui -b 0.0.0.0:8080
啟動之後,就可以在本機電腦開啟 http://localhost:8080/ 網頁,這是一個 Web 介面的 Tanzu Community Edition (TCE) 的安裝程式。由於我打算在本機安裝 VMware Tanzu,因此請選擇 Docker 來部署:
這裡只需要設定管理叢集名稱 tanzumgmt
與 Kubernetes 的網路相關設定:
確認設定後就可以按下 DEPLOY MANAGEMENT CLUSTER 進行全自動安裝,必要時你可以按 EXPORT CONFIGURATION 匯出設定檔,日後可以用 CLI 自動安裝出完全相同的管理叢集。
除了透過 Web UI 進行安裝外,你也可以使用 CLI 進行更簡便快速的安裝:
tanzu management-cluster create -i docker --name 'tanzumgmt' -v 10 --plan dev --ceip-participation=false
安裝完成之後,可以在 Shell 底下執行以下命令,確認管理叢集已經順利啟動:
tanzu management-cluster get
由於 Management Cluster 也是一個 Kubernetes 叢集,因此你可以用以下命令取得該叢集的 KUBECONFIG
憑證:
tanzu management-cluster kubeconfig get tanzumgmt --admin
切換 KUBECONFIG 到管理叢集:
kubectl config get-contexts
kubectl config use-context tanzumgmt-admin@tanzumgmt
kubectl get nodes
確認已經有 Nodes 成功運行:
kubectl get nodes
接著我們就要來安裝工作負載叢集(Workload Cluster)了!
-
建立一個工作負載叢集,假設名稱為 dev1
tanzu cluster create 'dev1' --plan dev
-
確認工作負載叢集已安裝完畢,並取得工作負載叢集的 KUBECONFIG
憑證
tanzu cluster list
取得工作負載叢集的 KUBECONFIG
憑證
tanzu cluster kubeconfig get 'dev1' --admin
切換到工作負載叢集:
kubectl config use-context 'dev1-admin@dev1'
-
查看叢集內所有的 Pods
kubectl get pods -A
-
查看 Docker Engine 運行的容器
此時應該會有 1
個管理叢集與 1
個工作負載叢集,且各有 1
個 control plane node 與 1
個 worker node。而且兩座叢集各有一個 haproxy
容器,可以讓日後 control plane 加入 HA (高可用) 的設定!
docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"
你可以直接進入 control plane node 試看看 kubectl 命令 (Continer ID 為 dea
):
docker exec -it 'dea' /bin/bash
或是用 Container 的 Label 直接選到 control plane 節點:
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Labels}}\t{{.Status}}"
docker exec -it $(docker ps --filter 'label=io.x-k8s.kind.cluster=dev1' --filter 'label=io.x-k8s.kind.role=control-plane' --format "{{.ID}}") /bin/bash
kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes
截至今日為止,TCE 安裝好之後,若 Docker 所在的主機重開,叢集會需要重建!這個議題已有 #832 進行追蹤。
-
管理套件
切換到工作負載叢集:
kubectl config use-context 'dev1-admin@dev1'
安裝 Tanzu Community Edition 官方提供的 tce-repo
package repository 到 tanzu-package-repo-global
namespace
tanzu package repository add tce-repo --url projects.registry.vmware.com/tce/main:0.10.0 --namespace tanzu-package-repo-global
注意: 安裝到 tanzu-package-repo-global
namespace 的 package repository 預設會套用到整座 Kubernetes 叢集。但你也可以在個別的 namespace 安裝不同的 package repository!
將內建的 tkg-core-repository
套件儲存庫更新到最新版 (重要)
tanzu package repository update tkg-core-repository --url projects.registry.vmware.com/tce/main -n tanzu-package-repo-global
列出已安裝的 package repository
tanzu package repository list --namespace tanzu-package-repo-global
列出所有可安裝的套件:
tanzu package available list
列出 cert-manager.community.tanzu.vmware.com
套件版本:
tanzu package available list cert-manager.community.tanzu.vmware.com
安裝 1.6.1
版的 cert-manager
套件到 cert-manager
namespace:
tanzu package install cert-manager --package-name cert-manager.community.tanzu.vmware.com --version 1.6.1
確認已安裝的套件清單:
tanzu package installed list
刪除 cert-manager
套件:
tanzu package installed delete cert-manager
-
安裝精美的 octant 儀表版 (Dashboard)
從 https://github.com/vmware-tanzu/octant/releases 找到最新版 (octant_0.25.1_Linux-64bit.tar.gz
) 進行安裝:
curl -LO https://github.com/vmware-tanzu/octant/releases/download/v0.25.1/octant_0.25.1_Linux-64bit.tar.gz
tar -xzvf octant_0.25.1_Linux-64bit.tar.gz
./octant_0.25.1_Linux-64bit/octant
在本機連結 http://localhost:17777/ 即可進入管理介面!
-
刪除叢集
刪除工作負載叢集
tanzu cluster delete 'dev1'
刪除管理叢集
tanzu management-cluster get
tanzu management-cluster delete 'tanzumgmt'
-
刪除 Multipass 建立的虛擬機器
multipass delete 'tanzu' ; multipass purge
相關連結