Vào hồi tháng 10.2021 VMware thông báo phát hành phiên bản Tanzu Comunity Editon (trong bài này sẽ viết tắt là TCE) , đây là một trong 4 phiên bản của Tanzu tính đến thời điểm hiện tại. Điểm đặc biệt của phiên bản này là phiên bản Open Source 🙂. Vì thích open source nên mình có ghi chép lại cách cài đặt để ae tìm hiểu.

Bản TCE cũng sẽ có đầy đủ các thành phần trong hệ sinh thái của container.
Các điểm tóm tắt về phiên bản này như sau:
- Tanzu có thể coi là một phiên bản K8S do vmware phát hành, nếu so sánh thì tương đương với Rancher, OpenShift. Theo các tin tức thì VMware đang đổ dồn marketing, PR, tech vào Tanzu. Trước khi có bản TCE thì người sử dụng (triển khai, vận hành) cần biết thêm về VMware vSphere cơ bản, đây cũng là điểm bất lợi của người mới tiếp cận, có nghĩa là phải biết cả linux và VMware 😀
- Cung cấp cho người dùng một lựa chọn cài đặt tanzu để tìm hiểu, thử nghiệm trước khi có quyết định triển khai prodcut hay không. Theo các nhân thì chủ yếu để vọc vạch, nắm được các cách sử dụng và có thêm lựa chọn khi cài hơn so với các bản trước kia (bản basic, bản stand, bản advance). So sánh các bản có thể xem ở đây: https://tanzu.vmware.com/tanzu/compare

- Với bản TCE này thì người dùng có thể lựa chọn trên môi trường docker thay vì phải cài trên VMware, Aws, Azue =⇒ có nghĩa là đơn giản hơn trong việc dựng lab tìm hiểu, trước kia phải có một trong các môi trường VMware, AWS, Azue như trước kia.
- Khi sử dụng TCE thì có thể deploy các cluster K8S trên các môi trường: Local (máy laptop- máy ảo có docker, vSphere, AWS, Azue)

- Khi sử dụng TCE để thử nghiệm, có 2 cách triển khai:
- Cách 1: Triển khai theo kiểu standalone cluser: Có nghĩa là chỉ có một cluster k8s để chạy các app sau này.
- Cách 2: Triển khai theo kiểu management cluster: Có nghĩa là sinh ra một cluster manager k8s để quản lý nhiều cluster workload k8s sau này. Cluster workload k8s sẽ là nơi chạy các app. Đây là kiểu triển khai các bản khác của tanzu sẽ áp dụng trong product

- Trong hướng dẫn này tôi sẽ triển khai TCE theo phương án Standalone cluster và sử dụng môi trường là Ubuntu Server 20.04. Cluster K8S sẽ được triển khai trên môi trường docker.
Môi trường
- Một máy Ubuntu server 20.4 có kết nối internet. Bạn có thể cài đặt trên Windows hoặc MAC. Máy này thường được gọi là máy bootstrap. Trong lab này tôi sẽ sử dụng máy có IP là 172.16.70.150
- RAM: +8G, Disk: +100GB, CPU: +4.
- TCE version 0.9.1
1. Các bước cài đặt
1.1. Cài đặt các gói cơ bản
Trong hướng dẫn này sẽ sử dụng tài khoản root để cài đặt.
1.1.1. Cài đặt hostname
hostnamectl set-hostname tcebootstrap
echo "172.16.70.150 tcebootstrap" >> /etc/hosts
bash
1.1.2 Cài đặt NTP
Thiết lập timezone
timedatectl set-timezone Asia/Ho_Chi_Minh
Kiểm tra lại xem đúng timezone hay chưa. Nếu có timezone của Việt Nam là ok.
timedatectl
Cài đặt chrony
apt update -y
apt install chrony -y
Kích hoạt chrony
systemctl start chrony
systemctl enable chrony
Kiểm tra xem được đồng bộ time hay chưa bằng lệnh chronyc sources
. Nếu xuất hiện dòng có dấu * là ok.
root@tcebootstrap:~# chronyc sources
210 Number of sources = 7
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ chilipepper.canonical.com 2 6 17 59 -3253us[+2000us] +/- 145ms
^+ alphyn.canonical.com 2 6 17 60 -25ms[ -19ms] +/- 178ms
^+ pugot.canonical.com 2 6 17 58 +16ms[ +21ms] +/- 153ms
^+ golem.canonical.com 2 6 17 59 +18ms[ +23ms] +/- 150ms
^* time.cloudflare.com 3 6 17 59 -4005us[+1247us] +/- 71ms
^- ntp1.m-online.net 2 6 27 56 +273us[ +273us] +/- 110ms
^+ radio-sunshine.org 2 6 17 59 +7882us[ +13ms] +/- 177ms
1.2. Cài đặt docker
Gỡ bỏ docker nếu có, cài các gói bổ trợ và cài đặt docker. Trong các lệnh dưới còn cài đặt các gói cần thiết cho tanzu.
apt-get remove docker docker-engine docker.io containerd runc
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release jq
Cài đặt docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update -y
apt-get install docker-ce docker-ce-cli containerd.io -y
Phân quyền và kích hoạt docker.
usermod -aG docker $USER
systemctl enable docker
systemctl start docker
Kiểm tra xem phiên bản của cgroup, nếu là phiên bản 1 thì ok.
docker info | grep -i cgroup
Kết quả:
Cgroup Driver: cgroupfs
Cgroup Version: 1
Nếu là version 2 thì cần fix lại thành version 1, google để tìm cách fix nhé, hoặc vào docs của tanzu community ấy.
1.3. Cài đặt kubectl
Thực hiện cài đặt kubectl để làm công cụ thao tác với cluster k8s sau này.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo mv kubectl /usr/local/bin/
sudo chmod 755 /usr/local/bin/kubectl
Kiểm tra lại phiên bản của kubectl
kubectl version --client
Kết quả như sau:
root@tcebootstrap:~# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:16:20Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"linux/amd64"}
1.4 Cài đặt tanzu
Thực hiện cài đặt tanzu bằng các lệnh sau, trong phiên bản này sử dụng bản tanzu community editon 0.9.1 dành cho linux.
1.4.1 Tải bộ cài của tanzu.
Tải bộ cài, giải nén file tce-linux-amd64-v0.9.1.tar.gz
curl -H "Accept: application/vnd.github.v3.raw" -L https://api.github.com/repos/vmware-tanzu/community-edition/contents/hack/get-tce-release.sh | bash -s v0.9.1 linux
tar -xvzf tce-linux-amd64-v0.9.1.tar.gz
Thực thi file cài đặt tanzu, do trong bài này sử dùng tài khoản root nên cần thực hiện như sau:
cd tce-linux-amd64-v0.9.1
export ALLOW_INSTALL_AS_ROOT=true
./install.sh
Sau khi thực thi, ta sẽ có kết quả như sau:
| initializing ✔ successfully initialized CLI
++ tanzu plugin repo list
++ grep tce
+ TCE_REPO=
+ [[ -z '' ]]
+ tanzu plugin repo add --name tce --gcp-bucket-name tce-tanzu-cli-plugins --gcp-root-path artifacts
++ tanzu plugin repo list
++ grep core-admin
+ TCE_REPO=
+ [[ -z '' ]]
+ tanzu plugin repo add --name core-admin --gcp-bucket-name tce-tanzu-cli-framework-admin --gcp-root-path artifacts-admin
+ echo 'Installation complete!'
Installation complete!
1.4.2 Cài đặt tanzu
Sau khi tải gói cài đăt ở trên, lúc này ta đã có gói tanzu trong máy Ubuntu, kiểm tra lại phiên bản bằng lệnh
tanzu version
Kết quả trả về:
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# tanzu version
version: v0.2.1
buildDate: 2021-09-29
sha: ceaa474
Tới đây, có 2 cách thiết lập cluster k8s thông qua tanzu:
- Cách 1: Thiết lập thông qua giao diện dòng lệnh.
- Cách 2: thiết lập bằng GUI.
Chỉ trọng một trong 2 cách thiết lập nhé.
Đối với cách 1 thì chỉ cần gõ lệnh sau, quá trình thiết lập sẽ diễn ra.
tanzu standalone-cluster create -i docker tcedemo
Trong đó:
-i docker
: là tùy chọn chỉ ra môi trường triển khai.tcedemo
: là tên của cluster
Chờ từ 15 đến 30 phút tùy vào tốc độ mạng sẽ có cụm cluser K8S được sinh ra. Quá trình này sẽ diễn ra tự động 🙂 Kết quả ở bước 1.4.3
Đối với cách 2, ta thực hiện khai báo qua trình duyệt. Trong cách này cần gõ lệnh sau để thiết lập một phiên web cho máy cài đặt tanzu.
tanzu standalone-cluster create --ui -b IP_MAY_BOOT_STRAP:8080 -u --browser=none
Trong đó, thay thế IP_MAY_BOOTTSRAP
là IP của máy chủ Ubuntu (172.16.70.150)
Trong trường hợp này lệnh sẽ là:
tanzu standalone-cluster create --ui -b 172.16.70.150:8080 -u --browser=none
Ta có kết quả ở CLI hiển thị
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# tanzu standalone-cluster create --ui -b 172.16.70.150:8080 -u --browser=none
Downloading TKG compatibility file from 'projects.registry.vmware.com/tkg/framework-zshippable/tkg-compatibility'
Downloading the TKG Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkg-bom:v1.4.0'
Downloading the TKr Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkr-bom:v1.21.2_vmware.1-tkg.1'
Validating the pre-requisites...
Serving kickstart UI at http://172.16.70.150:8080
Sau đó vào trình duyệt với địa chỉ http://172.16.70.150:8080
để khai báo theo các hướng dẫn sau đây.
Lưu ý: Thay IP phù hợp với lab của bạn.
Chọn Deploy ở ô docker.

Chọn Next

Nhập tên của cluster và chọn Next
. Tên do bạn đặt tùy ý.

Chọn next trong bước thiết lập network trong cluster k8s, để mặc định và chọn Next

Sau đó chọn REVIEW CONFIGURATION

Chọn DEPLOY STANDALONE CLUSTER

Ta sẽ thấy quá trình cài đặt bắt đầu, chờ từ 15 đến 20 phút. Quá trình này máy bootstraps sẽ tải các image, tạo các container cần thiết.

Lúc này có thể thấy bên CLI cũng hiển thị thông tin đang được deploy

1.4.3 Hoàn tất việc triển khai tanzu
Sau khi hoàn thành ta sẽ có giao diện trên web như sau:

Và trên CLI như sau:
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# tanzu standalone-cluster create --ui -b 172.16.70.150:8080 -u --browser=none
Downloading TKG compatibility file from 'projects.registry.vmware.com/tkg/framework-zshippable/tkg-compatibility'
Downloading the TKG Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkg-bom:v1.4.0'
Downloading the TKr Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkr-bom:v1.21.2_vmware.1-tkg.1'
Validating the pre-requisites...
Serving kickstart UI at http://172.16.70.150:8080
Identity Provider not configured. Some authentication features won't work.
Validating configuration...
web socket connection established
sending pending 2 logs to UI
Using infrastructure provider docker:v0.3.23
Generating cluster configuration...
Setting up bootstrapper...
Bootstrapper created. Kubeconfig: /root/.kube-tkg/tmp/config_ckOwdqPj
Installing providers on bootstrapper...
Start creating standalone cluster...
Saving standalone cluster kubeconfig into /root/.kube/config
Waiting for bootstrap cluster to get ready for save ...
Waiting for addons installation...
Moving all Cluster API objects from bootstrap cluster to standalone cluster...
Context set for standalone cluster tcedemo as 'tcedemo-admin@tcedemo'.
Cleaning up unneeded resources (for standalone clusters)...
Standalone cluster created!
2. Sử dụng cluster k8s do tanzu thiết lập.
Sau khi hoàn thành bước trên, bạn đã có cluster k8s cơ bản, đủ để chạy các ứng dụng hoặc thực hành với K8S., bây giờ tiến hành chạy thử một ứng dụng nhé.
Lúc này, quay trở lại màn hình CLI, gõ lệnh đưới để kiểm tra thông tin cluster K8S.
kubectl config get-contexts
Kết quả.
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* tcedemo-admin@tcedemo tcedemo tcedemo-admin
Lưu ý tên ở cột name ở trên để sử dụng cho lệnh dưới.
Sử dụng lệnh để chuyển quyền vào cluster có tên là tcedemo-admin@tcedemo
kubectl config use-context tcedemo-admin@tcedemo
Ta sẽ có thông báo:
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl config use-context tcedemo-admin@tcedemo
Switched to context "tcedemo-admin@tcedemo"
Kiểm tra xem cluster có bao nhiêu node k8s bằng lệnh kubectl get nodes
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl get nodes
NAME STATUS ROLES AGE VERSION
tcedemo-control-plane-5g655 Ready control-plane,master 25m v1.21.2+vmware.1-360497810732255795
tcedemo-md-0-67cf6df97d-dtmwh Ready <none> 24m v1.21.2+vmware.1-360497810732255795
Chạy thử một image là nginx kubectl run nginx --image nginx
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl run nginx --image nginx
pod/nginx created
Kiểm tra xem có pods nay chưa kubectl get pods
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 6s
Forward port để truy cập vào nginx.
kubectl port-forward --address 0.0.0.0 nginx 8080:80
Mở trình duyệt với port là 8080 ta sẽ có kết quả.

Tới đây việc dựng lab TCE theo mô hình standalone cluster đã hoàn tất, ta có thể vọc vạch các tính năng của k8s bằng TCE rồi nhé.
Nếu bạn đã biết về docker, k8s thì có thể kiểm tra thêm bằng các lệnh.
docker images
docker ps
Lệnh kubectl get ns
, kết quả như dưới.
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl get ns
NAME STATUS AGE
default Active 4h21m
kube-node-lease Active 4h21m
kube-public Active 4h21m
kube-system Active 4h21m
metallb-system Active 3m30s
tanzu-package-repo-global Active 4h21m
tkg-system Active 4h21m
tkg-system-public Active 4h21m
tkr-system Active 4h21m
Lệnh kubectl get all --all-namespaces
và kết quả.
root@tcebootstrap:~/tce-linux-amd64-v0.9.1# kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default pod/nginx 1/1 Running 0 3h55m
kube-system pod/antrea-agent-75mmm 2/2 Running 0 4h21m
kube-system pod/antrea-agent-tntnm 2/2 Running 0 4h21m
kube-system pod/antrea-controller-86f8988c5f-nzzgw 1/1 Running 0 4h21m
kube-system pod/coredns-8dcb5c56b-7qlsk 1/1 Running 0 4h22m
kube-system pod/coredns-8dcb5c56b-hvtcn 1/1 Running 0 4h22m
kube-system pod/etcd-tcedemo-control-plane-5g655 1/1 Running 0 4h22m
kube-system pod/kube-apiserver-tcedemo-control-plane-5g655 1/1 Running 0 4h22m
kube-system pod/kube-controller-manager-tcedemo-control-plane-5g655 1/1 Running 0 4h22m
kube-system pod/kube-proxy-7zhp2 1/1 Running 0 4h22m
kube-system pod/kube-proxy-m2nfs 1/1 Running 0 4h21m
kube-system pod/kube-scheduler-tcedemo-control-plane-5g655 1/1 Running 0 4h22m
metallb-system pod/controller-77c44876d-vln2x 1/1 Running 0 4m7s
metallb-system pod/speaker-stfjv 1/1 Running 0 4m7s
metallb-system pod/speaker-swcks 1/1 Running 0 4m7s
tkg-system pod/kapp-controller-6499b8866-cvfvv 1/1 Running 0 4h21m
tkg-system pod/tanzu-capabilities-controller-manager-6ff97656b8-dn6l6 1/1 Running 0 4h21m
tkr-system pod/tkr-controller-manager-6bc455b5d4-pzxl5 1/1 Running 0 4h21m
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 4h22m
kube-system service/antrea ClusterIP 100.64.61.159 <none> 443/TCP 4h21m
kube-system service/kube-dns ClusterIP 100.64.0.10 <none> 53/UDP,53/TCP,9153/TCP 4h22m
tkg-system service/packaging-api ClusterIP 100.68.119.93 <none> 443/TCP 4h21m
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/antrea-agent 2 2 2 2 2 kubernetes.io/os=linux 4h21m
kube-system daemonset.apps/kube-proxy 2 2 2 2 2 kubernetes.io/os=linux 4h22m
metallb-system daemonset.apps/speaker 2 2 2 2 2 kubernetes.io/os=linux 4m7s
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/antrea-controller 1/1 1 1 4h21m
kube-system deployment.apps/coredns 2/2 2 2 4h22m
metallb-system deployment.apps/controller 1/1 1 1 4m7s
tkg-system deployment.apps/kapp-controller 1/1 1 1 4h21m
tkg-system deployment.apps/tanzu-capabilities-controller-manager 1/1 1 1 4h21m
tkr-system deployment.apps/tkr-controller-manager 1/1 1 1 4h21m
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/antrea-controller-86f8988c5f 1 1 1 4h21m
kube-system replicaset.apps/coredns-8dcb5c56b 2 2 2 4h22m
metallb-system replicaset.apps/controller-77c44876d 1 1 1 4m7s
tkg-system replicaset.apps/kapp-controller-6499b8866 1 1 1 4h21m
tkg-system replicaset.apps/tanzu-capabilities-controller-manager-6ff97656b8 1 1 1 4h21m
tkr-system replicaset.apps/tkr-controller-manager-6bc455b5d4 1 1 1 4h21m
3. Kết luận & Mở rộng
Theo quan điểm cá nhân thì việc setup TCE cũng không qua phức tạp với các bạn có kỹ năng linux nhưng còn khá nhiều vấn đề cần phải thử nghiệm trước khi chuyển sang các bản Tanzu khác. Đặc biệt bạn cũng cần phải có nhiều kỹ năng hoặc 1 team làm về VMware vSphere tương đối một chút thì mới áp dụng vào production được.
Trong phần trên bạn đã có một cluster k8s cơ bản (core k8s), theo như các docs và tài liệu thì bạn có thể tích hợp nhiều công cụ trong hệ sinh thái của contaiker, k8s vào TCE này, ví dụ như Octant, Grafana, prometheus, velocel…
Trân trọng cám ơn, hãy phản hồi nếu bạn muốn trao đổi hoặc cần thảo luận về tanzu nhé.
Công TÔ – HCĐ.