Hướng dẫn cài đặt Tanzu Community Edition – TCE

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.

Trích: https://williamlam.com/2021/10/introducing-vmware-tanzu-community-edition-tce-tanzu-kubernetes-for-everyone.html

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
Trích: https://tanzucommunityedition.io/
  • 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
Trích: https://williamlam.com/2021/10/introducing-vmware-tanzu-community-edition-tce-tanzu-kubernetes-for-everyone.html
  • 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 môi trường container

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Đ.

Leave a Comment