🚀 Chapter 5 — Platform: Phần D — Quản lý Google Online Boutique trên Amazon EKS bằng Helm
Ở Chapter 5B, chúng ta đã:
- Tạo Amazon EKS cluster.
- Tạo managed node group.
- Kết nối
kubectlvới EKS. - Deploy Google Online Boutique bằng Kubernetes manifest.
- Expose
frontendthông qua AWS Load Balancer.
Tuy nhiên, cách triển khai bằng một file manifest lớn vẫn có một số hạn chế:
- Khó thay đổi cấu hình theo từng môi trường.
- Khó quản lý nhiều phiên bản.
- Khó tái sử dụng cấu hình.
- Khó thay đổi số lượng replicas cho từng service.
- Khó chuẩn hóa deployment cho nhiều microservice.
Trong Chapter 5D, chúng ta sẽ sử dụng Helm để quản lý Online Boutique trên Amazon EKS.
1. Mục tiêu
Sau khi hoàn thành Chapter này, chúng ta sẽ có:
Google Online Boutique
↓
Helm Chart
↓
helm install / helm upgrade
↓
Amazon EKS
↓
Online Boutique
Chúng ta sẽ thực hiện:
- Cài đặt Helm.
- Kiểm tra EKS cluster từ Chapter 5B.
- Clone source code Online Boutique.
- Kiểm tra Helm chart có sẵn.
- Xóa deployment cũ bằng manifest.
- Kiểm tra Helm chart.
- Render Kubernetes manifest bằng Helm.
- Deploy Online Boutique bằng Helm.
- Kiểm tra các resource.
- Thay đổi cấu hình bằng Helm.
- Thực hiện Helm upgrade.
- Kiểm tra Helm history.
- Rollback phiên bản.
- Xóa Helm release và tài nguyên liên quan.
Trong Chapter này, chúng ta vẫn sử dụng Amazon EKS hiện tại từ Chapter 5B. Không tạo cluster mới.
2. Kiến trúc sau khi hoàn thành
Internet
│
▼
AWS Load Balancer
│
▼
frontend Service
│
▼
frontend Pod
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
cartservice productcatalogservice checkoutservice
│ │ │
▼ ▼ ▼
cart Pod productcatalog Pod checkout Pod
│
▼
Các microservice khác
Helm sẽ quản lý toàn bộ Kubernetes resources:
Helm Release
│
├── Deployments
├── Services
├── ConfigMaps
└── Các Kubernetes resources khác
3. Kiểm tra môi trường từ Chapter 5B
3.1. Kiểm tra AWS CLI
aws --version
Kiểm tra AWS account:
aws sts get-caller-identity
Kiểm tra Region:
aws configure get region
Trong lab này, chúng ta sử dụng Region Tokyo:
ap-northeast-1
Nếu chưa cấu hình:
aws configure set region ap-northeast-1
3.2. Đặt biến môi trường
export AWS_REGION=ap-northeast-1
export CLUSTER_NAME=online-boutique-eks
Kiểm tra:
echo "$AWS_REGION"
echo "$CLUSTER_NAME"
Kết quả:
ap-northeast-1
online-boutique-eks
3.3. Kiểm tra EKS cluster
aws eks describe-cluster \
--name "$CLUSTER_NAME" \
--region "$AWS_REGION" \
--query 'cluster.status' \
--output text
Kết quả mong đợi:
ACTIVE
3.4. Kiểm tra kết nối kubectl
kubectl get nodes
Tất cả node cần có trạng thái:
Ready
Kiểm tra namespace:
kubectl get namespaces
Nếu namespace online-boutique đã tồn tại từ Chapter 5B:
kubectl get namespace online-boutique
Nếu chưa tồn tại, tạo namespace:
kubectl create namespace online-boutique
Đặt namespace mặc định cho context hiện tại:
kubectl config set-context --current \
--namespace=online-boutique
Kiểm tra:
kubectl config view --minify \
--output 'jsonpath={..namespace}'
Kết quả:
online-boutique
4. Cài đặt Helm
4.1. Kiểm tra Helm
helm version
Nếu Helm đã được cài đặt, kết quả sẽ tương tự:
version.BuildInfo{Version:"v3.x.x", ...}
4.2. Cài đặt Helm trên macOS
Nếu bạn sử dụng macOS và đã có Homebrew:
brew install helm
Kiểm tra:
helm version
4.3. Cài đặt Helm trên Ubuntu
Cài đặt các package cần thiết:
sudo apt update
sudo apt install -y curl gpg
Thêm Helm repository:
curl https://baltocdn.com/helm/signing.asc \
| gpg --dearmor \
| sudo tee /usr/share/keyrings/helm.gpg > /dev/null
Thêm repository vào APT:
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/helm.gpg] \
https://baltocdn.com/helm/stable/debian/ \
all main" \
| sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
Cài đặt Helm:
sudo apt update
sudo apt install -y helm
Kiểm tra:
helm version
5. Clone source code Google Online Boutique
Nếu đã clone repository trong Chapter 5B, chuyển đến thư mục source code:
cd microservices-demo
Nếu chưa clone:
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo
Kiểm tra source code:
ls
Bạn sẽ thấy các thư mục tương tự:
README.md
src
release
helm-chart
protos
terraform
Kiểm tra Helm chart:
ls -la helm-chart
Một Helm chart thông thường sẽ có cấu trúc tương tự:
helm-chart/
├── Chart.yaml
├── values.yaml
└── templates/
Kiểm tra các file:
find helm-chart -maxdepth 2 -type f
6. Kiểm tra deployment hiện tại từ Chapter 5B
Ở Chapter 5B, ứng dụng được triển khai bằng Kubernetes manifest.
Kiểm tra các Deployment:
kubectl get deployments \
-n online-boutique
Kiểm tra các Pod:
kubectl get pods \
-n online-boutique
Kiểm tra các Service:
kubectl get services \
-n online-boutique
Kiểm tra frontend:
kubectl get service frontend \
-n online-boutique
Nếu frontend đang chạy, bạn có thể thấy:
NAME TYPE EXTERNAL-IP
frontend LoadBalancer xxx.elb.amazonaws.com
Lưu ý lại địa chỉ frontend:
export FRONTEND_URL=$(kubectl get service frontend \
-n online-boutique \
-o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Kiểm tra:
echo "$FRONTEND_URL"
7. Xóa deployment cũ bằng manifest
Trước khi triển khai bằng Helm, cần xóa resources được tạo bởi manifest ở Chapter 5B.
Không xóa EKS cluster. Chỉ xóa các resource của Online Boutique.
Chạy:
kubectl delete \
-f release/kubernetes-manifests.yaml \
-n online-boutique
Kiểm tra:
kubectl get all \
-n online-boutique
Nếu namespace không còn resource của Online Boutique, chúng ta có thể tiếp tục.
Kiểm tra lại namespace:
kubectl get namespace online-boutique
Nếu namespace đã bị xóa trong quá trình cleanup trước đó, tạo lại:
kubectl create namespace online-boutique
8. Kiểm tra Helm chart
Di chuyển về thư mục gốc của repository:
cd microservices-demo
Kiểm tra thông tin chart:
helm show chart ./helm-chart
Kiểm tra file cấu hình mặc định:
helm show values ./helm-chart
Lưu cấu hình mặc định vào file để dễ đọc:
helm show values ./helm-chart \
> /tmp/online-boutique-values.yaml
Mở file:
less /tmp/online-boutique-values.yaml
Tìm các cấu hình liên quan đến image:
grep -n "image" /tmp/online-boutique-values.yaml
Tìm các cấu hình liên quan đến replica:
grep -n -i "replica" /tmp/online-boutique-values.yaml
Tìm cấu hình frontend:
grep -n -i "frontend" /tmp/online-boutique-values.yaml
Tên các field trong
values.yamlcó thể thay đổi theo phiên bản repository. Vì vậy, cần kiểm tra file thực tế trước khi override cấu hình.
9. Kiểm tra Helm chart bằng helm lint
Chạy:
helm lint ./helm-chart
Kết quả thành công sẽ tương tự:
==> Linting ./helm-chart
1 chart(s) linted, 0 chart(s) failed
Nếu có lỗi, đọc thông báo và sửa chart trước khi deploy.
10. Render manifest bằng Helm
Trước khi cài đặt thật, sử dụng helm template để xem Helm sẽ tạo ra những Kubernetes resources nào.
helm template online-boutique ./helm-chart \
--namespace online-boutique
Lưu kết quả ra file:
helm template online-boutique ./helm-chart \
--namespace online-boutique \
> /tmp/online-boutique-rendered.yaml
Kiểm tra các loại resource:
grep '^kind:' /tmp/online-boutique-rendered.yaml
Kiểm tra các Deployment:
grep -n 'kind: Deployment' \
/tmp/online-boutique-rendered.yaml
Kiểm tra các Service:
grep -n 'kind: Service' \
/tmp/online-boutique-rendered.yaml
Kiểm tra image:
grep -n 'image:' \
/tmp/online-boutique-rendered.yaml
Ở bước này, Helm chưa tạo resource trên EKS. Lệnh helm template chỉ render YAML.
11. Deploy Online Boutique bằng Helm
11.1. Cài đặt Helm release
Chạy:
helm install online-boutique ./helm-chart \
--namespace online-boutique \
--create-namespace
Trong đó:
online-boutique Tên Helm release
./helm-chart Đường dẫn Helm chart
--namespace Namespace triển khai
--create-namespace Tạo namespace nếu chưa tồn tại
Kiểm tra Helm release:
helm list \
--namespace online-boutique
Kết quả tương tự:
NAME NAMESPACE STATUS
online-boutique online-boutique deployed
11.2. Kiểm tra trạng thái Helm release
helm status online-boutique \
--namespace online-boutique
Kết quả cần có:
STATUS: deployed
12. Kiểm tra các Kubernetes resources
12.1. Kiểm tra Deployment
kubectl get deployments \
-n online-boutique
Theo dõi rollout:
kubectl rollout status deployment/frontend \
-n online-boutique
12.2. Kiểm tra Pod
kubectl get pods \
-n online-boutique
Theo dõi realtime:
kubectl get pods \
-n online-boutique \
-w
Dừng theo dõi:
Ctrl + C
Các Pod cần chuyển sang trạng thái:
Running
Nếu Pod không chạy:
kubectl describe pod <POD_NAME> \
-n online-boutique
Xem logs frontend:
kubectl logs deployment/frontend \
-n online-boutique
12.3. Kiểm tra Service
kubectl get services \
-n online-boutique
Kiểm tra frontend:
kubectl get service frontend \
-n online-boutique
Frontend cần có:
TYPE: LoadBalancer
Các microservice nội bộ thường có:
TYPE: ClusterIP
13. Lấy địa chỉ truy cập frontend
Ban đầu, AWS Load Balancer có thể đang ở trạng thái:
EXTERNAL-IP: <pending>
Theo dõi:
kubectl get service frontend \
-n online-boutique \
-w
Khi Load Balancer được tạo xong, lấy hostname:
export FRONTEND_URL=$(kubectl get service frontend \
-n online-boutique \
-o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Kiểm tra:
echo "$FRONTEND_URL"
Test bằng curl:
curl -I "http://$FRONTEND_URL"
Kết quả mong đợi:
HTTP/1.1 200 OK
Mở trình duyệt:
http://<EXTERNAL-HOSTNAME>
14. Kiểm tra Helm release đã quản lý resources
Liệt kê các resource thuộc Helm release:
kubectl get all \
-n online-boutique \
-l app.kubernetes.io/managed-by=Helm
Xem thông tin Helm release:
helm get all online-boutique \
--namespace online-boutique
Xem values đang được sử dụng:
helm get values online-boutique \
--namespace online-boutique
Xem toàn bộ values, bao gồm cả giá trị mặc định:
helm get values online-boutique \
--namespace online-boutique \
--all
Xem manifest mà Helm đã triển khai:
helm get manifest online-boutique \
--namespace online-boutique
15. Tạo file cấu hình riêng cho lab
Không nên sửa trực tiếp file values.yaml gốc của repository.
Tạo file override riêng:
mkdir -p helm-overrides
touch helm-overrides/lab-values.yaml
Mở file:
nano helm-overrides/lab-values.yaml
Nội dung file sẽ phụ thuộc vào cấu trúc thực tế của helm-chart/values.yaml.
Ví dụ, nếu chart hỗ trợ cấu hình replicas theo dạng sau:
frontend:
replicaCount: 2
cartservice:
replicaCount: 2
thì file override có thể là:
frontend:
replicaCount: 2
cartservice:
replicaCount: 2
Chỉ sử dụng các field thực sự tồn tại trong chart. Kiểm tra
helm show values ./helm-charttrước khi thêm cấu hình.
16. Kiểm tra cấu hình override trước khi upgrade
Sử dụng helm template với file override:
helm template online-boutique ./helm-chart \
--namespace online-boutique \
-f helm-overrides/lab-values.yaml \
> /tmp/online-boutique-custom.yaml
Kiểm tra cấu hình replicas:
grep -n -A3 -B3 "replicas:" \
/tmp/online-boutique-custom.yaml
Nếu manifest render đúng, tiếp tục thực hiện upgrade.
17. Thực hiện Helm upgrade
Chạy:
helm upgrade online-boutique ./helm-chart \
--namespace online-boutique \
-f helm-overrides/lab-values.yaml
Kiểm tra trạng thái:
helm status online-boutique \
--namespace online-boutique
Kiểm tra Deployment:
kubectl get deployments \
-n online-boutique
Kiểm tra Pod:
kubectl get pods \
-n online-boutique
Kiểm tra rollout frontend:
kubectl rollout status deployment/frontend \
-n online-boutique
18. Kiểm tra Helm history
Helm lưu lại lịch sử các lần cài đặt và upgrade.
Chạy:
helm history online-boutique \
--namespace online-boutique
Kết quả tương tự:
REVISION STATUS DESCRIPTION
1 superseded Install complete
2 deployed Upgrade complete
Lấy revision hiện tại:
helm list \
--namespace online-boutique
19. Thử rollback Helm release
Nếu phiên bản mới có vấn đề, có thể rollback về revision trước đó.
Trước tiên xem history:
helm history online-boutique \
--namespace online-boutique
Rollback về revision 1:
helm rollback online-boutique 1 \
--namespace online-boutique
Kiểm tra trạng thái:
helm status online-boutique \
--namespace online-boutique
Kiểm tra rollout:
kubectl rollout status deployment/frontend \
-n online-boutique
Kiểm tra các Pod:
kubectl get pods \
-n online-boutique
Kiểm tra lại frontend:
kubectl get service frontend \
-n online-boutique
20. Kiểm tra giao tiếp giữa các microservice
Kiểm tra các Service:
kubectl get services \
-n online-boutique
Ví dụ các service nội bộ:
cartservice
productcatalogservice
checkoutservice
paymentservice
shippingservice
Kubernetes cung cấp DNS nội bộ cho các Service.
Ví dụ:
cartservice:7070
productcatalogservice:3550
checkoutservice:5050
Kiểm tra Endpoint:
kubectl get endpoints \
-n online-boutique
Hoặc:
kubectl get endpointslices \
-n online-boutique
Kiểm tra logs frontend:
kubectl logs deployment/frontend \
-n online-boutique \
--tail=100
Nếu giao diện hiển thị được sản phẩm, giỏ hàng và checkout, các microservice chính đang giao tiếp thành công.
21. So sánh cách triển khai trước và sau Helm
Trước Chapter 5D
Kubernetes Manifest
↓
kubectl apply
↓
Amazon EKS
Thay đổi cấu hình:
Sửa YAML thủ công
↓
kubectl apply
Sau Chapter 5D
Helm Chart
+
values.yaml
↓
helm install / helm upgrade
↓
Amazon EKS
Rollback:
helm rollback
Kiểm tra lịch sử:
helm history
Xem cấu hình:
helm get values
22. Xóa Helm release
Nếu chỉ muốn xóa Online Boutique nhưng giữ lại EKS cluster:
helm uninstall online-boutique \
--namespace online-boutique
Kiểm tra:
helm list \
--namespace online-boutique
Kiểm tra các resource:
kubectl get all \
-n online-boutique
Nếu không còn sử dụng namespace:
kubectl delete namespace online-boutique
Không chạy bước này nếu bạn muốn tiếp tục Chapter 5E hoặc Chapter 5F trên cùng namespace.
23. Cleanup toàn bộ EKS cluster
Nếu không cần sử dụng EKS cluster nữa, quay lại phần cleanup của Chapter 5B.
Đặt lại biến:
export AWS_REGION=ap-northeast-1
export CLUSTER_NAME=online-boutique-eks
Xóa cluster:
eksctl delete cluster \
--name "$CLUSTER_NAME" \
--region "$AWS_REGION"
Kiểm tra:
eksctl get cluster \
--region "$AWS_REGION"
Ngoài EKS Console, cần kiểm tra thêm:
- EC2.
- Load Balancers.
- Auto Scaling Groups.
- CloudFormation.
- VPC.
- NAT Gateway.
- Elastic IP.
Đặc biệt, cần kiểm tra NAT Gateway, vì tài nguyên này có thể tiếp tục phát sinh chi phí.
24. Kết quả đạt được
Sau Chapter 5B:
Amazon EKS
└── kubectl apply
└── Online Boutique
Sau Chapter 5D:
Amazon EKS
└── Helm Release
├── Helm Chart
├── values.yaml
├── Deployments
├── Services
└── Online Boutique
Chúng ta đã có thể:
- Đóng gói deployment bằng Helm.
- Render manifest trước khi triển khai.
- Cài đặt application bằng
helm install. - Cập nhật bằng
helm upgrade. - Theo dõi lịch sử bằng
helm history. - Rollback bằng
helm rollback. - Tách cấu hình khỏi Helm chart gốc.
- Quản lý nhiều microservice bằng một Helm release.
25. Kiến trúc kết thúc Chapter 5D
Developer
│
▼
GitHub
│
▼
Helm Chart
│
├── Chart.yaml
├── values.yaml
└── templates/
│
▼
helm install / helm upgrade
│
▼
Amazon EKS
│
├── frontend
├── cartservice
├── checkoutservice
├── paymentservice
├── productcatalogservice
├── recommendationservice
├── shippingservice
└── Các microservice khác
Ở Chapter tiếp theo, chúng ta sẽ tiếp tục chuyển từ:
Developer
↓
helm upgrade
↓
EKS
sang:
Developer
↓
GitHub
↓
GitOps Repository
↓
Argo CD
↓
Amazon EKS
Đó sẽ là bước đầu tiên để xây dựng GitOps Platform cho Online Boutique.
All rights reserved