用 Docker 架設 VMware Tanzu Community Edition 的安裝筆記
source link: https://blog.miniasp.com/post/2022/03/13/Install-VMware-Tanzu-Community-Edition-on-Docker-Notes
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
用 Docker 架設 VMware Tanzu Community Edition 的安裝筆記
這幾天我在嘗試 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 作業系統平台為例進行示範,安裝步驟如下:
-
透過 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
-
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 功能 (Port8080
)假設我們 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 [email protected]
Port
8080
是給 TCE 安裝介面用的,而 Port17777
則是給 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
namespacetanzu 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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK